8.1 KiB
Лабораторная работа №2 - Разработка простейшего распределённого приложения
Цель: изучение техники создания простого распределённого приложения.
Задачи:
- Согласно вашему варианту разработать два приложения такие, что результат первого является исходными данными для второго.
- Изучить файлы сборки образов docker и разработать их для созданных приложений.
- Собрать файл
docker-compose.ymlдля запуска приложений. Разобраться с монтированием каталогов из хост-системы. - Правильно закоммитить результат без лишних файлов.
- Оформить 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.
Необходимо, чтобы в файле было:
- Два сервиса. Каждый соответствует вашим программам.
- Объявлена директива
buildдля каждого сервиса. - Была работа с монтированием папок.
- Были описаны зависимости одного сервиса от другого.
Оформление отчёта
Правила именования папки с отчётом и исходными текстами - /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] Моисеев Владислав.
Варианты
Расчёт варианта также представляет собой задачку:
- Необходимо найти номер своей зачёткой книжки. Пусть будет 20/614.
- Далее необходимо найти остаток от деления номера на 7.
Это будет вариант для программы 1.
В нашем примере это
614 : 7 = 87 и остаток5. - Вариант для программы 2 - остаток от деления номера зачётки на 5
В нашем случае это
614 : 5 = 122 и остаток4.
Варианты программы 1:
- Ищет в каталоге
/var/dataсамый большой по объёму файл и перекладывает его в/var/result/data.txt. - Ищет в каталоге
/var/dataфайл с наибольшим количеством строк и перекладывает его в/var/result/data.txt. - Формирует файл
/var/result/data.txtиз первых строк всех файлов каталога/var/data. - Формирует файл
/var/result/data.txtтак, что каждая строка файла - количество строк в файлах из каталога/var/data. - Формирует файл
/var/result/data.txtтак, что каждая строка файла - количество символов в именах файлов из каталога/var/data. - Ищет в каталоге
/var/dataфайл с самым коротким названием и перекладывает его в/var/result/data.txt. - Берёт из каталога
/var/dataслучайный файл и перекладывает его в/var/result/data.txt.
Варианты программы 2:
- Сохраняет произведение первого и последнего числа из файла
/var/data/data.txtв/var/result/result.txt. - Ищет набольшее число из файла
/var/data/data.txtи сохраняет его вторую степень в/var/result/result.txt. - Ищет наименьшее число из файла
/var/data/data.txtи сохраняет его третью степень в/var/result/result.txt. - Ищет набольшее число из файла
/var/data/data.txtи сохраняет количество таких чисел из последовательности в/var/result/result.txt. - Ищет наименьшее число из файла
/var/data/data.txtи сохраняет количество таких чисел из последовательности в/var/result/result.txt.