Проблема
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