На заре развития нашего филиала в компании уже работал проект-монолит, позволяющий обучать около 10 тысяч пользователей. Мы проанализировали текущую ситуацию в проекте и поняли, что, разобрав наш монолит на микросервисы, мы решим многие проблемы динамично развивающегося проекта. Основные из них:
- Низкая отказоустойчивость.
- Большие риски при разработке новых фич.
- Сложность совместной работы с проектом для территориально разделенных команд.
- Большие накладные расходы на поддержку.
Поэтому мы активно приступили к проектированию нашей будущей инфраструктуры. Для начала было принято решение выделить три микросервиса:
- storage (для централизованного хранения файлов);
- users (для удобного управления пользователями);
- feedback (для переиспользования другими проектами бизнес-потребности в комментировании/оценивании материала).
Решение о выделении именно этих микросервисов принимали на основе трех факторов: степени требований к надежности и масштабированию этой части системы, сложности отделения от монолита и необходимости реиспользования. Разумеется, что разработка каждого из них укладывалась в один спринт.
Таким образом, простейшая схема первой версии выглядела так: