Git Product home page Git Product logo

lab2-template's Introduction

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

GitHub Classroom Workflow

Microservices

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

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

Требования

  1. Каждый сервис имеет свое собственное хранилище, если оно ему нужно. Для учебных целей можно использовать один instance базы данных, но каждый сервис работает только со своей логической базой. Запросы между базами запрещены.
  2. Для межсервисного взаимодействия использовать HTTP (придерживаться RESTful). Допускается использовать и другие протоколы, например grpc, но это требуется согласовать с преподавателем.
  3. Выделить Gateway Service как единую точку входа и межсервисной коммуникации. Горизонтальные запросы между сервисами делать нельзя.
  4. На каждом сервисе сделать специальный endpoint GET /manage/health, отдающий 200 ОК, он будет использоваться для проверки доступности сервиса (в Github Actions в скрипте проверки готовности всех сервисов wait-script.sh.
    "$path"/wait-for.sh -t 120 "http://localhost:$port/manage/health" -- echo "Host localhost:$port is active"
  5. Код хранить на Github, для сборки использовать Github Actions.
  6. Gateway Service должен запускаться на порту 8080, остальные сервисы запускать на портах 8050, 8060, 8070.
  7. Каждый сервис должен быть завернут в docker.
  8. В docker-compose.yml прописать сборку и запуск docker контейнеров.
  9. В classroom.yml дописать шаги на сборку и прогон unit-тестов.
  10. Для автоматических прогонов тестов в файле autograding.json и classroom.yml заменить <variant> на ваш вариант.

Пояснения

  1. Для разработки можно использовать Postgres в docker, для этого нужно запустить docker compose up -d, поднимется контейнер с Postgres 13, и будут созданы соответствующие вашему варианту (описанные в файлах schema-$VARIANT) базы данных и пользователь program:test.
  2. Для создания базы нужно прописать в 20-create-schemas.sh свой вариант задания в
  3. Docker Compose позволяет выполнять сборку образа, для этого нужно прописать блок build.
  4. Горизонтальную коммуникацию между сервисами делать нельзя.
  5. Интеграционные тесты можно проверить локально, для этого нужно импортировать в Postman коллекцию <variant>/postman/collection.json) и <variant>/postman/environment.json.

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) % 4)+1.

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

lab2-template's People

Contributors

romanow avatar wcdbmv avatar shaha17 avatar mrrvz avatar dpudov avatar domanovkon avatar volkovaan avatar zeynalovz avatar shooterbot avatar vr009 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.