1 Commits

Author SHA1 Message Date
2510m
26f6db9951 commitLab8 2023-12-18 21:23:59 +04:00
20 changed files with 31 additions and 892 deletions

View File

@@ -1,148 +0,0 @@
# Отчёт по лабораторной работе №1
Выполнила: студентка гр. ИСЭбд-41, Лямзина М.А.
## Разворачивание сервиса Gitea
Содержимое файла `docker-compose.yml` в папке Gitea:
```yaml
version: "3"
networks:
gitea:
external: false
# Контейнер Gitea
services: # Описание служб
server:
image: gitea/gitea:1.20.4 # Образ gitea
container_name: gitea # Наименование контейнера
environment: # Наши параметры
- USER_UID=1000
- USER_GID=1000
- GITEA__database__DB_TYPE=mysql
- GITEA__database__HOST=db:3306
- GITEA__database__NAME=gitea
- GITEA__database__USER=gitea
- GITEA__database__PASSWD=gitea
restart: always
networks: # Параметры сети
- gitea
volumes: # Каталоги для хранения данных контейнера
- ./gitea:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports: # Порт локальный и внутри сети
- "3000:3000"
- "222:22"
depends_on:
- db
# База данных
db:
image: mysql:8 # Образ БД и версия
restart: always # Параметр перезапуска
environment: # Подключаем каталог с базой данных
- MYSQL_ROOT_PASSWORD=gitea
- MYSQL_USER=gitea
- MYSQL_PASSWORD=gitea
- MYSQL_DATABASE=gitea
networks: # Параметры сети
- gitea
volumes: # Том для хранения данных БД
- ./mysql:/var/lib/mysql
```
В папке girea создаем файл
![](Скрины/1.png)
Далее в командной строке разворачиваем сервис командой `docker-compose up -d`:
![](Скрины/2.png)
Открываем Docker Desktop и проверяем, что контейнер сервера БД и Gitea созданы и запущены:
![](Скрины/3.png)
Переходим на http://localhost:222:
![](Скрины/4.png)
Регистрируемся и автоматически входим в учетную запись:
![](Скрины/5.png)
## Разворачивание сервиса Wordpress
Также в файл `docker-compose.yml` в папке Wordpress прописываем следующий код:
```yaml
version: '3.1'
services:
# Контейнер Wordpress
wordpress:
image: wordpress # Образ
restart: always # Параметр перезапуска
ports: # На каком порте запускаем
- 7071:80
environment: # Настройки БД WordPress для подключения
WORDPRESS_DB_HOST: database # Имя хоста БД MySQL
WORDPRESS_DB_USER: user # Имя пользователя БД
WORDPRESS_DB_PASSWORD: password # Пароль пользователя БД
WORDPRESS_DB_NAME: name_database # Имя БД
volumes: # Каталог хранения файлов WordPress
- wordpress:/var/www/html
# Контейнер MySQL
database:
image: mysql:5.7 # Образ и его версия
restart: always # Параметр перезапуска
environment: # Настройки БД для подключения
MYSQL_DATABASE: name_database
MYSQL_USER: user
MYSQL_PASSWORD: password
MYSQL_RANDOM_ROOT_PASSWORD: '12345'
volumes: # Каталог хранения данных БД
- database:/var/lib/mysql
volumes:
wordpress:
database:
```
Далее в командной строке разворачиваем сервис командой `docker-compose up -d`:
![](Скрины/6.png)
Открываем Docker Desktop и проверяем, что контейнер сервера БД и Wordpress созданы и запущены:
![](Скрины/7.png)
Устанавливаем Wordpress и проверяем, что все работает:
![](Скрины/8.png)
## Разворачивание сервиса Redmine
Также в файл `docker-compose.yml` в папке Redmine прописываем код:
```yaml
version: '3.1'
services:
# Контейнер Redmine
redmine:
image: redmine # Образ контейнера
restart: always
ports: # На какой порт запускать
- 8080:3000
environment:
REDMINE_DB_MYSQL: db
REDMINE_DB_PASSWORD: example
REDMINE_SECRET_KEY_BASE: supersecretkey
# Контейнер БД MySQL
db:
image: mysql:5.7 # Образ БД и ее версия
restart: always
environment: # Название и пароль админа БД
MYSQL_ROOT_PASSWORD: example
MYSQL_DATABASE: redmine
```
Далее в командной строке разворачиваем сервис командой `docker-compose up -d`:
![](Скрины/9.png)
Переходим на http://localhost:8080:
![](Скрины/10.png)
Регистрируемся и проверяем, что все работает:
![](Скрины/11.png)

View File

@@ -1,454 +0,0 @@
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Mono auto generated files
mono_crash.*
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Ww][Ii][Nn]32/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
[Ll]ogs/
# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# Visual Studio 2017 auto generated files
Generated\ Files/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUnit
*.VisualState.xml
TestResult.xml
nunit-*.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# Benchmark Results
BenchmarkDotNet.Artifacts/
# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/
# Tye
.tye/
# ASP.NET Scaffolding
ScaffoldingReadMe.txt
# StyleCop
StyleCopReport.xml
# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# Visual Studio Trace Files
*.e2e
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json
# Coverlet is a free, cross platform Code Coverage Tool
coverage*.json
coverage*.xml
coverage*.info
# Visual Studio code coverage results
*.coverage
*.coveragexml
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# NuGet Symbol Packages
*.snupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
*.appxbundle
*.appxupload
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs
# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak
# SQL Server files
*.mdf
*.ldf
*.ndf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- [Bb]ackup.rdl
*- [Bb]ackup ([0-9]).rdl
*- [Bb]ackup ([0-9][0-9]).rdl
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# CodeRush personal settings
.cr/personal
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config
# Tabs Studio
*.tss
# Telerik's JustMock configuration file
*.jmconfig
# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs
# OpenCover UI analysis results
OpenCover/
# Azure Stream Analytics local run output
ASALocalRun/
# MSBuild Binary and Structured Log
*.binlog
# NVidia Nsight GPU debugger configuration file
*.nvuser
# MFractors (Xamarin productivity tool) working folder
.mfractor/
# Local History for Visual Studio
.localhistory/
# BeatPulse healthcheck temp database
healthchecksdb
# Backup folder for Package Reference Convert tool in Visual Studio 2017
MigrationBackup/
# Ionide (cross platform F# VS Code tools) working folder
.ionide/
# Fody - auto-generated XML schema
FodyWeavers.xsd
##
## Visual studio for Mac
##
# globs
Makefile.in
*.userprefs
*.usertasks
config.make
config.status
aclocal.m4
install-sh
autom4te.cache/
*.tar.gz
tarballs/
test-results/
# Mac bundle stuff
*.dmg
*.app
# content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore
# General
.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
# content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore
# Windows thumbnail cache files
Thumbs.db
ehthumbs.db
ehthumbs_vista.db
# Dump file
*.stackdump
# Folder config file
[Dd]esktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Windows Installer files
*.cab
*.msi
*.msix
*.msm
*.msp
# Windows shortcuts
*.lnk
# JetBrains Rider
.idea/
*.sln.iml
##
## Visual Studio Code
##
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json

View File

@@ -1,85 +0,0 @@
# Отчёт по лабораторной работе №2
Выполнил: студентка гр. ИСЭбд-41, Лямзина Мария.
Вариант программы 1: 2. Формирует файл `/var/result/data.txt` из первых строк всех файлов каталога `/var/data`.
Вариант программы 2: 4. Ищет наименьшее число из файла `/var/data/data.txt` и сохраняет количество таких чисел из последовательности `/var/result/result.txt`.
## Создание приложений
Создадим 2 приложения.
Был выбран язык C# и технология .NET 5.
Для создания обычных консольных приложений воспользуемся командами:
```sh
dotnet new console -o worker-1
dotnet new console -o worker-2
```
Согласно варианту, программа 1 должна брать из `/var/data` по первой строчке из каждого файла, и в результате записать все в файл `/var/result/data.txt`.
[Исходный текст программы worker-1](worker-1/Program.cs)
Согласно варианту программа 2 искать в файле `/var/data/data.txt` наименьшее число и посчитать количетсво таких чисел.
Далее количество записывается в `/var/result/result.txt`.
[Исходный текст программы worker-2](worker-2/Program.cs)
Дополнительно создан файл [.gitignore](.gitignore) для того, чтобы не закоммитить в git ничего лишнего.
## Настройка окружения
Для связи двух приложений воспользуемся следующей схемой:
1. Каталог `./data` должен быть примонтирован в каталог `/var/data` для программы 1.
Оттуда будут браться исходные данные.
2. Каталог `./result-1` должен быть примонтирован в каталог `/var/result` для программы 2.
Туда будут складываться промежуточные данные.
3. Каталог `./result-1` также должен быть примонтирован в каталог `/var/data` для программы 2.
Оттуда будут браться промежуточные результаты.
4. Каталог `./result` должен быть примонтирован в каталог `/var/result` для программы 2.
Туда будут складывать результаты финальной обработки.
Для каждой программы были созданы файлы Dockerfile ([программа 1](worker-1/Dockerfile), [программа 2](worker-2/Dockerfile)) с подробным описанием процесса сборки.
Был создан файл [docker-compose.yml](docker-compose.yml), в котором указан манифест для запуска распределённого приложения.
## Сборка и запуск
1. В каталог `./data` помещены 2 файла с различной значениями.
![](photo/1.png)
![](photo/2.jpg)
На выходе программа должна записать 1 и 1.
![](photo/3.jpg)
2. Теперь, обрабатывая этот файл:
![](photo/1.jpg)
Программа найдет число 1 как минимальное, оно повторяется 2 раза значит в `/var/result/result.txt` выведется число 2 .
![](photo/4.jpg)
Для запуска приложения необходимо ввести команду `docker compose up --build`.
Результат запуска после сборки:
```
[+] Running 2/0
✔ Container lab_2-worker-1-1 Created 0.0s
✔ Container lab_2-worker-2-1 Created 0.0s
Attaching to lab_2-worker-1-1, lab_2-worker-2-1
lab_2-worker-1-1 | Файл успешно сформирован!
lab_2-worker-2-1 | Количество наименьших чисел сохранено в файле: /var/result/result.txt
lab_2-worker-1-1 exited with code 0
lab_2-worker-2-1 exited with code 0
```
В результате в каталоге `./result` создался файл `data.txt` с содержимым `1 1`, что соответствует входным данным.
В каталоге `./result` создался файл `result.txt` с содержимым `2`, что соответствует входным данным.

View File

@@ -1,19 +0,0 @@
1
22
11
15
46
23
11
55
449
78
65
15
35
1
59
11
87
465
11

View File

@@ -1,13 +0,0 @@
1
5
4
6
4
5
7
5
3
2
2
2
4

View File

@@ -1,18 +0,0 @@
version: "3.1"
services:
worker-1:
build: ./worker-1
volumes:
# Монтирует локальную папку data к папке data в контейнере.
- ./data:/var/data
# Монтирует локальную папку result-1 к папке result в контейнере.
- ./result-1:/var/result
worker-2:
build: ./worker-2
volumes:
# Монтирует локальную папку result-1 к папке data в контейнере.
- ./result-1:/var/data
- ./result:/var/result
# Зависимость от первого приложения.
depends_on:
- worker-1

View File

@@ -1,48 +0,0 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.30114.105
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "worker-1", "worker-1\worker-1.csproj", "{8B8730EA-D88C-4713-8AA4-A3D12ABFAC77}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "worker-2", "worker-2\worker-2.csproj", "{3C748027-270F-4C30-8D0E-27C0D2866B71}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{8B8730EA-D88C-4713-8AA4-A3D12ABFAC77}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8B8730EA-D88C-4713-8AA4-A3D12ABFAC77}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8B8730EA-D88C-4713-8AA4-A3D12ABFAC77}.Debug|x64.ActiveCfg = Debug|Any CPU
{8B8730EA-D88C-4713-8AA4-A3D12ABFAC77}.Debug|x64.Build.0 = Debug|Any CPU
{8B8730EA-D88C-4713-8AA4-A3D12ABFAC77}.Debug|x86.ActiveCfg = Debug|Any CPU
{8B8730EA-D88C-4713-8AA4-A3D12ABFAC77}.Debug|x86.Build.0 = Debug|Any CPU
{8B8730EA-D88C-4713-8AA4-A3D12ABFAC77}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8B8730EA-D88C-4713-8AA4-A3D12ABFAC77}.Release|Any CPU.Build.0 = Release|Any CPU
{8B8730EA-D88C-4713-8AA4-A3D12ABFAC77}.Release|x64.ActiveCfg = Release|Any CPU
{8B8730EA-D88C-4713-8AA4-A3D12ABFAC77}.Release|x64.Build.0 = Release|Any CPU
{8B8730EA-D88C-4713-8AA4-A3D12ABFAC77}.Release|x86.ActiveCfg = Release|Any CPU
{8B8730EA-D88C-4713-8AA4-A3D12ABFAC77}.Release|x86.Build.0 = Release|Any CPU
{3C748027-270F-4C30-8D0E-27C0D2866B71}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3C748027-270F-4C30-8D0E-27C0D2866B71}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3C748027-270F-4C30-8D0E-27C0D2866B71}.Debug|x64.ActiveCfg = Debug|Any CPU
{3C748027-270F-4C30-8D0E-27C0D2866B71}.Debug|x64.Build.0 = Debug|Any CPU
{3C748027-270F-4C30-8D0E-27C0D2866B71}.Debug|x86.ActiveCfg = Debug|Any CPU
{3C748027-270F-4C30-8D0E-27C0D2866B71}.Debug|x86.Build.0 = Debug|Any CPU
{3C748027-270F-4C30-8D0E-27C0D2866B71}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3C748027-270F-4C30-8D0E-27C0D2866B71}.Release|Any CPU.Build.0 = Release|Any CPU
{3C748027-270F-4C30-8D0E-27C0D2866B71}.Release|x64.ActiveCfg = Release|Any CPU
{3C748027-270F-4C30-8D0E-27C0D2866B71}.Release|x64.Build.0 = Release|Any CPU
{3C748027-270F-4C30-8D0E-27C0D2866B71}.Release|x86.ActiveCfg = Release|Any CPU
{3C748027-270F-4C30-8D0E-27C0D2866B71}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

View File

@@ -1,2 +0,0 @@
1
1

View File

@@ -1 +0,0 @@
2

View File

@@ -1,18 +0,0 @@
# Задаем базовый образ на .net
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build-env
# Задаем рабочую директорию
WORKDIR /src
# Копируем файлы и папки в каталог в контейнер
COPY . ./
# Создаем образы и устанавливаем данные пакеты в контейнер
RUN dotnet restore
COPY . .
RUN dotnet publish -c Release -o /publish
FROM mcr.microsoft.com/dotnet/aspnet:5.0
WORKDIR /publish
COPY --from=build-env /publish .
# Вызываем приложение во время выполнения контейнера
ENTRYPOINT ["dotnet", "worker-1.dll"]

View File

@@ -1,28 +0,0 @@
using System;
using System.IO;
class Program
{
static void Main()
{
string dataDirectory = "/var/data";
string outputFile = "/var/result/data.txt";
string[] fileLines = Directory.GetFiles(dataDirectory);
using (StreamWriter writer = new StreamWriter(outputFile))
{
foreach (string filePath in fileLines)
{
string[] lines = File.ReadAllLines(filePath);
if (lines.Length > 0)
{
writer.WriteLine(lines[0]);
}
}
}
Console.WriteLine("Файл успешно сформирован!");
}
}

View File

@@ -1,9 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net5.0</TargetFramework>
<RootNamespace>worker_1</RootNamespace>
</PropertyGroup>
</Project>

View File

@@ -1,18 +0,0 @@
# Задаем базовый образ на .net
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build-env
# Задаем рабочую директорию
WORKDIR /src
# Копируем файлы и папки в каталог в контейнер
COPY . ./
# Создаем образы и устанавливаем данные пакеты в контейнер
RUN dotnet restore
COPY . .
RUN dotnet publish -c Release -o /publish
FROM mcr.microsoft.com/dotnet/aspnet:5.0
WORKDIR /publish
COPY --from=build-env /publish .
# Вызываем приложение во время выполнения контейнера
ENTRYPOINT ["dotnet", "worker-2.dll"]

View File

@@ -1,22 +0,0 @@
using System;
using System.IO;
using System.Linq;
class Program
{
static void Main()
{
string inputFile = "/var/data/data.txt";
string outputFile = "/var/result/result.txt";
string[] lines = File.ReadAllLines(inputFile);
int[] numbers = lines.Select(int.Parse).ToArray();
int minNumber = numbers.Min();
int countOfMinNumbers = numbers.Count(n => n == minNumber);
File.WriteAllText(outputFile, countOfMinNumbers.ToString());
Console.WriteLine("Количество наименьших чисел сохранено в файле: " + outputFile);
}
}

View File

@@ -1,9 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net5.0</TargetFramework>
<RootNamespace>worker_2</RootNamespace>
</PropertyGroup>
</Project>

View File

@@ -0,0 +1,31 @@
# Отчет по лабораторной работе №8
Выполнила студентка гр. ИСЭбд-41 Лямзина М.А.
## Задачи
Написать небольшое эссе (буквально несколько абзацев) своими словами. А помогут Вам в этом вопросы из списка:
1. Зачем сложные системы (например, социальная сеть ВКонтакте) пишутся в "распределенном" стиле, где каждое отдельное приложение (или сервис) функционально выполняет только ограниченный спектр задач?
2. Для чего были созданы системы оркестрации приложений? Каким образом они упрощают / усложняют разработку и сопровождение распределенных систем?
3. Для чего нужны очереди обработки сообщений и что может подразумеваться под сообщениями?
4. Какие преимущества и недостатки распределенных приложений существуют на Ваш взгляд?
5. Целесообразно ли в сложную распределенную систему внедрять параллельные вычисления? Приведите примеры, когда это действительно нужно, а когда нет.
## Эссе
Распределение задач между отдельными приложениями или сервисами позволяет выполнять эти задачи параллельно, ускоряя общее время отклика системы. Такой подход обеспечивает легкость масштабирования. Если одно из приложений работает под высокой нагрузкой, его можно горизонтально масштабировать, добавляя дополнительные экземпляры. Это позволяет легко управлять ресурсами и поддерживать производительность системы.
Системы оркестрации приложений были созданы для управления и координации работы распределенных систем, состоящих из большого числа независимых и взаимодействующих между собой компонентов. Системы позволяют автоматизировать процессы это значительно упрощает и ускоряет весь жизненный цикл системы, от разработки до эксплуатации.
Очереди обработки сообщений - это механизмы, используемые для организации и управления потоком сообщений в распределенных системах. Очереди сообщений позволяют асинхронно отправлять и принимать сообщения между компонентами системы, даже если они работают в разных временных интервалах или между ними есть задержка в связи с сетью или другими обстоятельствами. Это делает их особенно полезными в распределенных системах, где компоненты могут быть развернуты на разных серверах или даже на разных частях мира. Под сообщениями может подразумеваться: задачи или команды, события, обновления состояния, уведомления и оповещения и тп.
Преимуществами распределенных приложений, на мой взгляд, являются:
1. Масштабируемость: Распределенные приложения могут легко масштабироваться горизонтально путем добавления или удаления узлов. .
2. Отказоустойчивость: Если один из компонентов распределенного приложения выходит из строя, остальные компоненты все еще могут работать нормально.
3. Гибкость: В распределенных системах компоненты могут быть разработаны и модифицированы независимо друг от друга.
Недостатки распределенных приложений:
1. Сложность разработки: Разработка распределенных приложений может быть сложнее, чем для монолитных приложений
2. Зависимость от сети: Распределенные приложения зависят от работоспособности сети.
Внедрение параллельных вычислений в сложной распределенной системе может быть целесообразным, если система подвержена высокой нагрузке или обрабатывается большой объем данных, тогда параллельные вычисления позволяют распределить работу между несколькими узлами. Если же система имеет узкую проходную способность, которую невозможно распаллелить, то тогда параллельные вычисления не стоит применять. Если задачи в системе достаточно малы и не требуют большого количества вычислительных ресурсов, параллельные вычисления могут также оказаться бесполезными.