ШАГ 1: Стратегия и обоснование (НЕ начинать без этого).
Ошибка №1: Декомпозировать ради декомпозиции. Четко сформулируйте и задокументируйте бизнес-цели: улучшение времени выхода на рынок (time-to-market), независимое масштабирование компонентов, повышение отказоустойчивости, упрощение онбординга новых разработчиков. Без понимания «зачем» вы не сможете принимать верные тактические решения. Проведите инвентаризацию текущего монолита: карту модулей, их связи, точки роста боли.
Чеклист Шага 1:
- [ ] Определены и согласованы бизнес-драйверы декомпозиции.
- [ ] Составлена высокоуровневая карта модулей монолита и их зависимостей.
- [ ] Выявлены «горячие точки» — модули, наиболее часто изменяемые или вызывающие инциденты.
- [ ] Оценены риски и получена поддержка стейкхолдеров (менеджмент, продукт, инженеры).
Ошибка №2: Разделять по техническим слоям (сервис БД, сервис API, сервис логики). Это приводит к распределенному монолиту, где сервисы тесно связаны. Правильный подход — Domain-Driven Design (DDD). Выделяйте bounded context (ограниченные контексты) — автономные бизнес-поддомены. Сервис должен владеть своими данными и представлять законченную бизнес-возможность (например, «Управление заказами», «Аутентификация», «Каталог товаров»).
Чеклист Шага 2:
- [ ] Проведены воркшопы по event storming или аналогичной практике для выявления bounded contexts.
- [ ] Определены кандидаты на первый пилотный сервис (часто это автономный и часто изменяемый модуль).
- [ ] Для каждого контекста определены: бизнес-капитаны, агрегаты, доменные события.
- [ ] Спроектированы контракты API (REST/gRPC) и форматы асинхронных сообщений между будущими сервисами.
Ошибка №3: Использовать общую базу данных для нескольких сервисов. Это смертный грех, ведущий к жесткой связности. Каждый сервис должен иметь свою приватную БД, доступную только через его API. Следующая ошибка — пытаться поддерживать распределенные транзакции (2PC) для согласованности. Вместо этого применяйте паттерн Saga: последовательность локальных транзакций, компенсирующих действия в случае сбоя.
Чеклист Шага 3:
- [ ] Для каждого сервиса-кандидата определена его exclusive база данных.
- [ ] Составлен план миграции данных: дублирование, синхронизация, eventual consistency.
- [ ] Для бизнес-процессов, охватывающих несколько сервисов, спроектированы Saga (оркестрируемые или хореографией).
- [ ] Определена стратегия обработки дублирующихся данных (например, кэширование справочников).
Ошибка №4: Откладывать внедрение инфраструктурных компонентов «на потом». Без них работа в production невозможна. Вам нужны: service mesh или API gateway для маршрутизации и безопасности, централизованное логирование (ELK Stack), распределенная трассировка (Jaeger, Zipkin), метрики и алертинг (Prometheus, Grafana), контейнерный оркестратор (Kubernetes). Начинайте разворачивать и настраивать эту платформу ДО выноса первого сервиса.
Чеклист Шага 4:
- [ ] Выбраны и протестированы инструменты для логирования, трассировки, мониторинга.
- [ ] Настроен API Gateway / Service Mesh (Istio, Linkerd).
- [ ] Готов pipeline CI/CD для сборки, тестирования и деплоя контейнеризированных сервисов.
- [ ] Определены стандарты health checks, readiness/liveness probes для сервисов.
Ошибка №5: «Big Bang» релиз — выключить монолит и включить микросервисы. Это гарантированный провал. Используйте стратегию Strangler Fig Pattern: постепенно «обвивайте» монолит новыми сервисами, перенаправляя на них трафик пофункционально. Всегда сохраняйте обратную совместимость API. Внедрите feature toggles для управления потоком запросов.
Чеклист Шага 5:
- [ ] Выбрана первая функциональность для миграции по Strangler Pattern.
- [ ] Реализован механизм постепенного перенаправления трафика (через gateway или feature toggle).
- [ ] Все новые API обратно совместимы, старые endpoints монолита остаются работоспособными.
- [ ] Написаны интеграционные и контрактные тесты для новых сервисов и их взаимодействия с монолитом.
Ошибка №6: Оставить старую централизованную команду для управления всеми сервисами. Микросервисы требуют перехода к командам по продукту или сервису (две пиццы). Каждая команда отвечает за полный цикл жизни своего сервиса: разработка, деплой, мониторинг, поддержка. Инвестируйте в внутренние developer portal и снижение когнитивной нагрузки.
Чеклист Шага 6:
- [ ] Структура команд пересмотрена в соответствии с bounded contexts (Conway's Law).
- [ ] Определены зоны ответственности и SLA для каждого сервиса.
- [ ] Созданы внутренние стандарты и шаблоны (boilerplate) для быстрого создания новых сервисов.
- [ ] Налажены процессы коммуникации между командами (например, через анонсы доменных событий).
Комментарии (6)