DAS_2023_1/labs/lab_2.md

7.9 KiB
Raw Blame History

Лабораторная работа №2 - Разработка простейшего распределённого приложения

Цель: изучение техники создания простого распределённого приложения.

Задачи:

  1. Согласно вашему варианту (выбирайте любой) разработать два приложения такие, что результат первого является исходными данными для второго.
  2. Изучить файлы сборки образов docker и разработать их для созданных приложений.
  3. Собрать файл docker-compose.yml для запуска приложений. Разобраться с монтированием каталогов из хост-системы.
  4. Правильно закоммитить результат без лишних файлов.
  5. Оформить pull request по правилам и отправить его на проверку.

Разработка двух приложений

Необходимо разработать 2 приложения согласно варианту. Описание поиска своего варианта расположено ниже.

Общее для всех вариантов:

  • Язык разработки приложений — любой.
  • Содержимое исходных файлов - целые числа.
  • Результат выполнения программы 2 необходимо дополнительно вывести на экран.

Автор советует использовать dotnet, java, go или python.

Каждая программа должна лежать в отдельной подпапке в репозитории, например: moiseev-vv-lab_2/worker-1 и moiseev-vv-lab_2/worker-2.

Добавление файлов сборки Dockerfile

В каталоге с каждым приложением необходимо создать файл Dockerfile, где будут расположены инструкции по сборке образа с вашими приложениями.

Для многих языков программирования шаблоны Dockerfile можно найти в Интернете.

В рамках задания необходимо расписать, за что отвечает каждая значимая строка в Dockerfile. Хотя бы одном.

Если у вас используется multi-stage build (как в примере выше, где в одном Dockerfile несколько конструкций FROM), необходимо расписать, зачем.

Формирование файла docker-compose.yml

Необходимо в каталоге с вашей работой создать файл docker-compose.yml, чтобы можно было собрать и запустить программы следующей командой:

distributed-computing\tasks\moiseev-vv\lab_2$ docker compose up --build

До $ - каталог относительно корня репозитория, чтобы понять, откуда запускается docker compose.

Необходимо, чтобы в файле было:

  1. Два сервиса. Каждый соответствует вашим программам.
  2. Объявлена директива build для каждого сервиса.
  3. Была работа с монтированием папок.
  4. Были описаны зависимости одного сервиса от другого.

Оформление отчёта

Правила именования папки с отчётом и исходными текстами на примере ivanov_ivan_lab_1.

Коммит результата

Перед началом работы над задачей необходимо актуализировать свой форк, выполненный в работе №1.

Как это сделать зависит от конкретного хранилища git-репозиториев.

TODO: Так как всё-таки?!

Также необходимо не забыть добавить файл .gitignore в каталог с вашей работой. Если вы этого не сделаете, на коммит "полезут" файлы сборки и прочие вещи, который быть в публичном репозитории не должны.

Для dotnet файл .gitignore создаётся при помощи команды dotnet new gitignore.

Правила именования ветки: фамилия_инициалы_lab_номер, например, moiseev_vv_lab_2.

Все файлы, которые вы использовали в первой лабораторной работе и которые вам понадобятся во второй пожалуйста продублируйте в папку второй лабораторной работы, а после сделайте новую ветку для второй л/р также от master:

> git checkout master
> git checkout -b moiseev-vv-lab-2
> mkdir moiseev-vv-lab-2
> cd moisev-vv-lab-2 <--- вот сюда скопировать, и эту же папку коммитить, чтобы не нарушать ранее выполненную л/р

Правила оформления pull request

См. тут.

Варианты

Варианты программы 1:

  1. Ищет в каталоге /var/data самый большой по объёму файл и перекладывает его в /var/result/data.txt.
  2. Ищет в каталоге /var/data файл с наибольшим количеством строк и перекладывает его в /var/result/data.txt.
  3. Формирует файл /var/result/data.txt из первых строк всех файлов каталога /var/data.
  4. Формирует файл /var/result/data.txt так, что каждая строка файла - количество строк в файлах из каталога /var/data.
  5. Формирует файл /var/result/data.txt так, что каждая строка файла - количество символов в именах файлов из каталога /var/data.
  6. Ищет в каталоге /var/data файл с самым коротким названием и перекладывает его в /var/result/data.txt.
  7. Берёт из каталога /var/data случайный файл и перекладывает его в /var/result/data.txt.

Варианты программы 2:

  1. Сохраняет произведение первого и последнего числа из файла /var/data/data.txt в /var/result/result.txt.
  2. Ищет набольшее число из файла /var/data/data.txt и сохраняет его вторую степень в /var/result/result.txt.
  3. Ищет наименьшее число из файла /var/data/data.txt и сохраняет его третью степень в /var/result/result.txt.
  4. Ищет набольшее число из файла /var/data/data.txt и сохраняет количество таких чисел из последовательности в /var/result/result.txt.
  5. Ищет наименьшее число из файла /var/data/data.txt и сохраняет количество таких чисел из последовательности в /var/result/result.txt.