DAS_2024_1/putilin_pavel_lab_2
2024-12-02 23:12:59 +04:00
..
data_generator putilin_pavel_lab_2 2024-12-02 23:12:59 +04:00
worker_1 putilin_pavel_lab_2 2024-12-02 23:12:59 +04:00
worker_2 putilin_pavel_lab_2 2024-12-02 23:12:59 +04:00
docker-compose.yml putilin_pavel_lab_2 2024-12-02 23:12:59 +04:00
README.md putilin_pavel_lab_2 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