В рамках второй лабораторной работы по вариантам требуется реализовать систему, состоящую из нескольких взаимодействующих друг с другом сервисов.
- Каждый сервис имеет свое собственное хранилище, если оно ему нужно. Для учебных целей можно использовать одну базу данных, но каждая система работает только со своей схемой. Запросы к другой схеме запрещены.
- Для межсервисного взаимодействия использовать HTTP (придерживаться RESTful). Допускается использовать и другие протоколы, например grpc, но это требуется согласовать с преподавателем.
- Выделить Gateway Service как единую точку входа и межсервисной коммуникации. Горизонтальные запросы между сервисами делать нельзя.
- Код хранить на Github, для сборки использовать Github Actions.
- Для автоматических прогонов тестов в файле autograding.json
и classroom.yml заменить
<variant>
на ваш вариант. - Каждый сервис должен быть завернут в docker.
- В classroom.yml дописать шаги на сборку, прогон unit-тестов и деплой каждого сервиса на heroku.
-
Для локальной разработки можно использовать Postgres в docker, для этого нужно запустить docker compose up -d, поднимется контейнер с Postgres 13, будет создана БД
services
и пользовательprogram
:test
. Для создания схем нужно прописать в 20-create-schemas.sh свой вариант задания в переменнуюVARIANT
. После поднятия контейнера будут созданы схемы, описанные в файлах schema-$VARIANT по вариантам. -
Горизонтальную коммуникацию между сервисами делать нельзя.
Предположим, у нас сервисы
UserService
,OrderService
,WarehouseService
иGateway
:- На
Gateway
от пользователяAlex
приходит запросКупить товар с productName: 'Lego Technic 42129
. Gateway
->UserService
проверяем что пользователь существует и получаемuserUid
пользователя поlogin: Alex
.Gateway
->WarehouseService
получаемitemUid
товара поproductName
и резервируем его для заказа.Gateway
->OrderService
сuserUid
иitemUid
и создаем заказ сorderUid
.Gateway
->WarehouseService
сorderUid
и переводим товарitemUid
из статусаЗарезервировано
в статусЗаказан
и прописываем ссылку наorderUid
.
- На
- При получении задания у вас создается fork этого репозитория для вашего пользователя.
- После того, как все тесты успешно завершатся, в Github Classroom на Dashboard будет отмечено успешное выполнение тестов.
Варианты заданий берутся исходя из формулы: (номер в списке группы - 1) mod 4 + 1.