Ответ
Плюсы:
- Независимое развертывание и масштабирование: Каждый сервис можно обновлять и масштабировать отдельно.
- Технологическая гетерогенность: Разные сервисы можно писать на разных языках и использовать разные БД.
- Устойчивость: Отказ одного сервиса не должен приводить к падению всей системы.
- Границы по бизнес-доменам: Упрощает понимание и развитие больших команд.
Минусы:
- Сложность распределенной системы: Необходимо управлять межсервисной коммуникацией, отказоустойчивостью, согласованностью данных (CAP-теорема).
- Операционные накладные расходы: Требуется оркестрация (Kubernetes), мониторинг, логирование, трассировка запросов.
- Сложность тестирования: Требуется тестирование интеграции между сервисами, часто нужны сложные стенды.
- Затраты на сетевые вызовы: Замедление из-за сетевой задержки по сравнению с вызовами внутри монолита.
С точки зрения QA: Плюсы в независимом тестировании сервисов, но резко возрастает сложность интеграционного, end-to-end тестирования и отладки.