Проблема
B2B-дистрибьютор с 2 000+ бизнес-клиентов и €45M годового GMV работал на 8-летнем Symfony-монолите. Один деплой занимал 4 часа даунтайма, баг в модуле ценообразования мог уронить всю платформу, а команда перестала выпускать фичи — 70% времени уходило на тушение пожаров. Три попытки рефакторинга на месте провалились и подорвали уверенность команды.
Что мы сделали
- Маппинг доменов — Определили 6 ограниченных контекстов (каталог, ценообразование, заказы, клиенты, склад, счета) и описали все кросс-доменные зависимости до написания единой строки кода.
- Миграция Strangler Fig — Извлекали сервисы по одному за API-шлюзом, оставляя монолит в продакшене. Никакого big-bang переключения — каждый сервис запускался независимо.
- Kubernetes и CI/CD — Контейнеризировали каждый сервис через Docker, оркестрация через Kubernetes на AWS EKS. Полный CI/CD пайплайн — push в main запускает тесты, сборку и rolling deploy за 8 минут.
- Event-driven синхронизация — Сервисы общаются через RabbitMQ-события вместо прямых API-вызовов. Eventual consistency с saga-паттернами для сложных воркфлоу: заказ → склад → счёт.

Результат
“Мы перестали бояться деплоев по пятницам и начали выкатывать по несколько раз в день. Платформа наконец принадлежит нам, а не наоборот.”
Томас Бергманн — CTO, WholesaleHub GmbH · Берлин
97%Deploy time reduction
2Incidents per month
18+Deploys per week
+35%GMV growth, year 1