distributed-computing/labs/lab_2/README.md

8.1 KiB
Raw Permalink Blame History

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

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

Задачи:

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

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

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

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

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

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

Каждая программа должна лежать в отдельной подпапке в репозитории, например: tasks/moiseev-vv/lab_2/worker-1 и tasks/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. Были описаны зависимости одного сервиса от другого.

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

Правила именования папки с отчётом и исходными текстами - /tasks/фамилия-инициалы/lab_номер, например, /tasks/moiseev-vv/lab_2.

Пример отчёта и всего остального.

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

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

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

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

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

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

Правила именования ветки: фамилия-инициалы-lab-номер, например, moiseev-vv-lab-2.

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

Название pull request: [Л/Р 2] ФАМИЛИЯ ИМЯ, например, [Л/Р 2] Моисеев Владислав.

Варианты

Расчёт варианта также представляет собой задачку:

  1. Необходимо найти номер своей зачёткой книжки. Пусть будет 20/614.
  2. Далее необходимо найти остаток от деления номера на 7. Это будет вариант для программы 1. В нашем примере это 614 : 7 = 87 и остаток 5.
  3. Вариант для программы 2 - остаток от деления номера зачётки на 5 В нашем случае это 614 : 5 = 122 и остаток 4.

Варианты программы 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.