DAS_2024_1/putilin_pavel_lab_2/README.md
2024-12-02 23:12:59 +04:00

83 lines
4.5 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 - Разработка простейшего распределённого приложения
## Задание
**Цель**: Разработать два приложения, результат работы первого из которых становится входными данными для второго.
**Задачи**:
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