754просмотров
41.7%от подписчиков
7 февраля 2026 г.
Score: 829
Недостатки микросервисной архитектуры Микросервисная архитектура (MSA) — подход, когда система разбивается на небольшие независимые сервисы.
У MSA есть недостатки, которые важно учитывать при проектировании. 1️⃣ Сложность управления распределёнными транзакциями В монолите транзакции управляются на уровне БД (ACID). В MSA данные распределены, и обеспечение согласованности требует сложных решений. ➡️ Пример:
заказ оформлен, платёж прошёл, но товар не списался — пользователь заплатил за несуществующий товар. Практики:
🔹 Saga-паттерны: реализуют оркестрацию или хореографию транзакций с локальными шагами и компенсациями
🔹 Outbox-паттерн: позволяет гарантировать отправку событий в шину сообщений после успешной локальной транзакции 2️⃣ Задержки из-за сетевых вызовов Межсервисные вызовы (HTTP, gRPC и тд) добавляют сетевые задержки, что может привести к ухудшению UX. ➡️ Пример:
открытие страницы профиля пользователя требует вызовов к 10 сервисам — итого 1+ секунда задержки. Практики:
🔹Кеширование на уровне API Gateway или Edge Cache
🔹 Асинхронная обработка через сообщения и очереди 3️⃣ Оверхеды мониторинга и трассировки При десятках и сотнях сервисов сложно локализовать источник ошибки и собрать полную картину работы. ➡️ Пример:
пользователь видит ошибку при оформлении заказа — неизвестно, виноват Cart, Orders или Payments. Практики:
🔹 Distributed Tracing (Jaeger, Zipkin, OpenTelemetry)
🔹 Централизованные логи (ELK Stack, Loki)
🔹 Метрики и алерты (Prometheus + Grafana) 4️⃣ Сложность тестирования и развёртывания Каждый сервис может иметь свою БД, конфигурацию и зависимости. Интеграционное тестирование всей системы требует поднятия множества сервисов. ➡️ Пример:
тест Cart Service требует запуска Users, Products и Discounts — иначе тесты падают. Практики:
🔹Контракты (Contract Testing): Pact, Spring Cloud Contract
🔹 Mock-сервисы и виртуализация (WireMock, Hoverfly)
🔹 Изолированные сценарии на уровне эндпоинтов 5️⃣ Дублирование данных и согласованность Каждый сервис хранит свою копию данных → возможны расхождения. ➡️ Пример:
пользователь обновил email, но в Order History отображается старый адрес. Практики:
🔹Event Sourcing и CQRS: разделяют чтение и запись и обеспечивают последовательность событий
🔹 Change Data Capture (CDC): синхронизирует данные между БД через Kafka Connect или Debezium