ansushina / rsoi-2

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Лабораторная работа #2

GitHub Classroom Workflow

Microservices

Формулировка

В рамках второй лабораторной работы по вариантам требуется реализовать систему, состоящую из нескольких взаимодействующих друг с другом сервисов.

Требования

  1. Каждый сервис имеет свое собственное хранилище, если оно ему нужно. Для учебных целей можно использовать одну базу данных, но каждая система работает только со своей схемой. Запросы к другой схеме запрещены.
  2. Для межсервисного взаимодействия использовать HTTP (придерживаться RESTful). Допускается использовать и другие протоколы, например grpc, но это требуется согласовать с преподавателем.
  3. Выделить Gateway Service как единую точку входа и межсервисной коммуникации. Горизонтальные запросы между сервисами делать нельзя.
  4. Код хранить на Github, для сборки использовать Github Actions.
  5. Для автоматических прогонов тестов в файле autograding.json и classroom.yml заменить <variant> на ваш вариант.
  6. Каждый сервис должен быть завернут в docker.
  7. В classroom.yml дописать шаги на сборку, прогон unit-тестов и деплой каждого сервиса на heroku.

Пояснения

  1. Для локальной разработки можно использовать Postgres в docker, для этого нужно запустить docker compose up -d, поднимется контейнер с Postgres 13, будет создана БД services и пользователь program:test. Для создания схем нужно прописать в 20-create-schemas.sh свой вариант задания в переменную VARIANT. После поднятия контейнера будут созданы схемы, описанные в файлах schema-$VARIANT по вариантам.

  2. Горизонтальную коммуникацию между сервисами делать нельзя.

    Services

    Предположим, у нас сервисы 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.

Прием задания

  1. При получении задания у вас создается fork этого репозитория для вашего пользователя.
  2. После того, как все тесты успешно завершатся, в Github Classroom на Dashboard будет отмечено успешное выполнение тестов.

Варианты заданий

Варианты заданий берутся исходя из формулы: (номер в списке группы - 1) mod 4 + 1.

  1. Flight Booking System
  2. Hotels Booking System
  3. Car Rental System
  4. Library System

About


Languages

Language:TypeScript 91.2%Language:JavaScript 4.5%Language:Dockerfile 3.8%Language:Shell 0.6%