DAS_2024_1/putilin_pavel_lab_2/README.md

83 lines
4.5 KiB
Markdown
Raw Normal View History

2024-12-02 23:12:59 +04:00
# Лабораторная работа №2 - Разработка простейшего распределённого приложения
## Задание
**Цель**: Разработать два приложения, результат работы первого из которых становится входными данными для второго.
**Задачи**:
1. Разработать два приложения:
- **worker_1**: Считывает файл с целыми числами, умножает каждое число на 2 и сохраняет результат в новый файл.
- **worker_2**: Считывает файл, созданный `worker_1`, вычисляет сумму чисел и выводит результат.
2. Разработать файлы сборки Docker для каждого приложения.
3. Собрать файл `docker-compose.yml` для запуска обоих приложений.
4. Настроить монтирование директорий для обмена данными между контейнерами.
5. Организовать генерацию входных данных с помощью скрипта `data_gen.py`.
6. Правильно закоммитить решение с использованием `.gitignore` для исключения лишних файлов.
## Описание решения
### Программы
1. **data_generator/data_gen.py**:
- Генерирует случайные целые числа и сохраняет их в файл `input.txt` в папке `data`.
2. **worker_1/app.py**:
- Читает файл `input.txt`, умножает числа на 2 и сохраняет результат в `output_worker1.txt`.
3. **worker_2/app.py**:
- Читает файл `output_worker1.txt`, вычисляет сумму чисел и выводит результат на экран.
### Генерация данных
Скрипт `data_gen.py` создаёт файл `input.txt` с 20 случайными числами в диапазоне от 1 до 100. Если папка `data` отсутствует, скрипт создаёт её автоматически.
### Docker
1. **Dockerfile для `worker_1`**:
- Устанавливает Python.
- Копирует скрипт `app.py`.
- Устанавливает рабочую директорию `/app`.
- Запускает `app.py`.
2. **Dockerfile для `worker_2`**:
- Устанавливает Python.
- Копирует скрипт `app.py`.
- Устанавливает рабочую директорию `/app`.
- Запускает `app.py`.
### Docker Compose
Файл `docker-compose.yml` управляет запуском трёх сервисов:
1. **data_generator** — генерирует входные данные.
2. **worker_1** — обрабатывает данные из `input.txt` и создаёт `output_worker1.txt`.
3. **worker_2** — читает `output_worker1.txt`, вычисляет сумму чисел и выводит результат.
Монтирование директорий обеспечивает обмен файлами между контейнерами.
### Сборка и запуск
1. Генерация данных:
```
docker-compose run data_generator
```
2. Запуск всех сервисов:
```
docker-compose up --build
```
### Результаты
После выполнения команд:
- **input.txt** — файл, созданный `data_generator`, содержащий случайные числа.
- **output_worker1.txt** — файл, созданный `worker_1`, содержащий числа, умноженные на 2.
- Конечный результат (сумма чисел) выводится в консоль `worker_2`.
## Вывод
В результате лабораторной работы было создано простейшее распределённое приложение с использованием Docker и Docker Compose. Реализация демонстрирует базовые подходы к созданию контейнеризированных приложений, обмену данными между контейнерами и автоматизации обработки данных.
**Видео демонстрации**:
Ссылка: https://cloud.mail.ru/public/83jj/3fGCcVQcK