middle
Когда стоит использовать микросервисы, а когда нет?
Решение о переходе на микросервисы определяется масштабом системы, размером команды и зрелостью DevOps-культуры. Начинать новый проект с микросервисов почти всегда ошибочно.
Стоит использовать, когда
- Система большая и сложная, разрабатывается несколькими командами.
- Требуется независимое масштабирование отдельных компонентов.
- Нужны разные циклы релизов для разных частей системы.
- Организация достаточно зрелая: есть CI/CD, мониторинг, опыт работы с распределёнными системами.
- Разные части системы имеют разные требования к доступности, нагрузке или технологиям.
- Команда разработки достаточно большая (обычно больше 20-30 человек).
НЕ стоит использовать, когда
- Проект маленький или находится на ранней стадии — лучше начать с монолита (или «модульного монолита»).
- Команда маленькая (3-5 разработчиков) — накладные расходы на инфраструктуру съедят все преимущества.
- Домен недостаточно изучен — невозможно правильно определить границы сервисов.
- Нет DevOps-культуры и инфраструктуры — без CI/CD, мониторинга, оркестрации контейнеров микросервисы будут кошмаром.
- Жёсткие требования к транзакционной согласованности — если все данные должны быть строго консистентны, eventual consistency создаст серьёзные проблемы.
Совет Мартина Фаулера: «Не начинайте с микросервисов. Начните с монолита, правильно структурируйте его по модулям, и когда почувствуете боль масштабирования — выделяйте микросервисы.»
Хорошей промежуточной стратегией является модульный монолит — единое приложение, но с чёткими границами модулей, которые потом можно выделить в отдельные сервисы:
Пример
// Модульный монолит — чёткие границы модулей
// module-payment/src/main/java/com/bank/payment/PaymentModule.java
// module-customer/src/main/java/com/bank/customer/CustomerModule.java
// Модули взаимодействуют только через определённые интерфейсы
На собеседовании: ключевой посыл — «it depends». Интервьюер хочет увидеть, что вы не фанатик микросервисов и понимаете, когда монолит лучше. Упомяните модульный монолит как промежуточный вариант.