83 lines
4.5 KiB
Markdown
83 lines
4.5 KiB
Markdown
|
# Лабораторная работа №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
|
|||
|
|