Skip to content

Volkovaan/lab3-template

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

GitHub Classroom Workflow

Fault Tolerance

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

На базе Лабораторной работы #2 реализовать механизмы, увеличивающие отказоустойчивость системы:

  • На Gateway Service для всех операций чтения реализовать паттер Circuit Breaker. Накапливать статистику в памяти, и если система не ответила N раз, то в N+1 раз вместо запроса сразу отдавать fallback. Через небольшой timeout выполнить запрос к реальной системе, чтобы проверить ее состояние.
  • В случае недоступности данных из некритичного источника (не основного), возвращается fallback-ответ. В зависимости от ситуации, это может быть:
    • пустой объект или массив;
    • объект, с заполненным полем (uid или подобным), по которому идет связь с другой системой;
    • default строка (если при этом не меняется тип переменной).
  • В задании описаны две операции, изменяющие состояния нескольких систем. В случае недоступности одной из систем, участвующих в этой операции, выполнить:
    • откат всей операции;
    • возвращать пользователю ответ об успешном завершении операции, а на Gateway Service поставить этот запрос в очередь для повторного выполнения.

Требования

  1. Для автоматических прогонов тестов в файле autograding.json и classroom.yml заменить <variant> на ваш вариант.
  2. Код хранить на Github, для сборки использовать Github Actions.
  3. Каждый сервис должен быть завернут в docker.
  4. В classroom.yml дописать шаги на сборку, прогон unit-тестов.
  5. Деплой каждого сервиса должен быть только на Heroku.

Пояснения

  1. Для локальной разработки можно использовать Postgres в docker.
  2. Схема взаимодействия сервисов остается как в Лабораторной работе #2.
  3. Для реализации очереди можно использовать language native реализацию (например, BlockingQueue для Java), либо какую-то готовую реализацию типа RabbitMQ, Redis, ZeroMQ и т.п. Крайне нежелательно использовать реляционную базу данных как средство эмуляции очереди.
  4. Для корректности реализации лабораторной выключается один сервис и проверяется корректность работы остальных. Для этого используется Heroku API, сервис переводится в Maintenance Mode. Для реализации этой операции в нужно в classroom.yml в блоке Run API Tests прописать переменные:
    envVar: '[{ "key": "serviceName", "value": "<Service Name>" }, { "key": "herokuApiKey", "value": "${{secrets.HEROKU_API_KEY}}" }]'
    
  5. Чтобы HEROKU_API_KEY не зашивать в коде, его нужно прописать в Settings -> Secrets.
  6. В переменную serviceName нужно прописать имя выключаемого (указан во вариантах задания) сервиса на Heroku.

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

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

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

Распределение вариантов заданий аналогично ЛР #2.

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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages