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
.