Какие недостатки у микросервисной архитектуры?
Главные недостатки микросервисов — это сложность распределённой системы: сетевые задержки, согласованность данных, операционная нагрузка и сложность отладки.
-
Сложность распределённой системы — приходится решать проблемы сетевых задержек, отказов сети, согласованности данных, что гораздо сложнее, чем вызов метода в монолите.
-
Сложность управления данными — невозможно использовать обычные ACID-транзакции между сервисами. Приходится применять паттерн Saga, eventual consistency, что значительно усложняет логику.
-
Операционная сложность — необходимо организовать мониторинг, логирование, трассировку для десятков или сотен сервисов. Нужна зрелая DevOps-культура и CI/CD.
-
Сетевые задержки — вызов между сервисами по сети значительно медленнее вызова метода в рамках одного процесса.
-
Сложность тестирования — интеграционное и E2E-тестирование становятся гораздо сложнее. Необходимо использовать contract testing (Pact), testcontainers, моки внешних сервисов.
-
Дублирование кода — некоторые общие функции (например, валидация, маппинг DTO) приходится дублировать в разных сервисах или выносить в shared-библиотеки, что создаёт связность.
-
Сложность отладки — один бизнес-процесс может проходить через 5-10 сервисов, и для отладки нужны инструменты распределённой трассировки.
-
Overhead на межсервисное взаимодействие — сериализация/десериализация данных, HTTP/gRPC-вызовы, брокеры сообщений добавляют накладные расходы.
-
Проблема «распределённого монолита» — при неправильной декомпозиции можно получить систему с недостатками и монолита, и микросервисов одновременно.
На собеседовании: знание недостатков ценится даже выше, чем знание преимуществ — оно показывает реальный опыт. Частая ошибка — не упомянуть distributed monolith и проблему eventual consistency.