distributed-computing/tasks/melnikov-ky/lab_2/README.md
2023-10-24 21:30:03 +04:00

85 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Отчёт по лабораторной работе №2
Выполнил: студент гр. ИСЭбд-41, Мельников Кирилл.
Вариант программы 1: 6. Берёт из каталога `/var/data `случайный файл и перекладывает его в `/var/result/data.txt`.
Вариант программы 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` помещены 3 файла с различными названиями и содержимым.
![](scrins/1.png)
На выходе программа должна записать данные из рандомного файла директории `/var/data`.
![](scrins/5.png)
![](scrins/3.png)
![](scrins/4.png)
2. Теперь, обрабатывая эти файлы:
![](scrins/2.png)
На выходе программа должна записать число 5 в `./result` так как в файле c названием data.txt минимальное число = 11, которое встречается 5 раз.
![](scrins/6.png)
Для запуска приложения необходимо ввести команду `docker compose up --build`.
Результат запуска после сборки:
```
[+] Running 2/1
✔ 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 | Файл /var/data/data.txt успешно скопирован в /var/result/data.txt.
lab_2-worker-1-1 exited with code 0
lab_2-worker-2-1 | Количество наименьших чисел сохранено в файле: /var/result/result.txt
lab_2-worker-2-1 exited with code 0
```
В результате в каталоге `./result` создался файл `result.txt` с содержимым `5`, что соответствует входным данным.
Изменение значений в файлах из каталога `./data` также изменяет содержимое в файлах из каталогов `./result-1` и `./result`.