Какие недостатки микросервисной архитектуры существуют кроме сложности согласованности данных
Что проверяют
Понимаете ли вы, что микросервисы решают организационную задачу ценой технической сложности, и можете ли назвать эту цену в терминах .NET. Следом обычно спрашивают, когда вы остались бы на монолите или выбрали модульный монолит.
Как отвечать
Согласованность уже названа, поэтому идите дальше:
- сеть вместо вызова метода: задержка, частичные отказы, таймауты. Нужны политики устойчивости: Polly и пакет
Microsoft.Extensions.Http.ResilienceсAddStandardResilienceHandler(таймауты, повторы, circuit breaker). Без них один медленный сервис тянет за собой всю цепочку; - наблюдаемость: запрос проходит через пять сервисов, и без распределённой трассировки ошибку не найти. Нужны OpenTelemetry, сквозной correlation id, централизованные логи и метрики;
- контракты: изменение DTO в одном сервисе ломает потребителей. Нужны версии API, обратная совместимость, контрактные тесты (например, Pact) и осторожность с общими NuGet-пакетами, иначе они связывают сервисы жёстче монолита;
- тестирование: юнит-тестов мало, нужны интеграционные на Testcontainers, а поднять всю систему локально трудно;
- инфраструктура и деньги: у каждого сервиса свой пайплайн, образ, конфигурация, секреты, алерты. Появляются Kubernetes, API-шлюз, брокер сообщений, и всем этим кто-то должен заниматься;
- распределённый монолит: сервисы нельзя выкатить по отдельности, потому что они синхронно зависят друг от друга. Минусы обеих схем сразу;
- безопасность между сервисами: аутентификация сервис-сервис, mTLS, проброс токена пользователя.
Закончите выводом: микросервисы оправданы, когда нескольким командам нужно выпускаться независимо, а у частей системы разная нагрузка. Одной команде чаще подходит модульный монолит с чёткими границами, которые потом можно вынести в сервисы.
Где спотыкаются
Режут систему по техническим слоям (сервис пользователей, сервис базы данных), а не по бизнес-границам. Получается сплошной сетевой трафик.
Строят цепочки синхронных HTTP-вызовов там, где подошло бы асинхронное событие через брокер.
Выносят доменные модели в общую библиотеку, и любое её обновление требует пересборки десятка сервисов.