У нас є велику legacy-програму на PHP, яка за роки перетворилась на єдиний моноліт. Всередину однієї кодової бази і однієї бази даних живуть авторизація, біллінг, каталог, сповіщення і звіти. Систему стало важко масштабувати під навантаженням і больно викатувати: будь-яка дрібна зміна змушує перерозгортати все цілком, а один повільний запит тягне вниз навіть ті функції, які до нього не відносяться. Ризикована «переписування з нуля» нам не підходить. Потрібна акуратна поетапна міграція, при якій продукт продовжує працювати і приносити гроші на кожному кроку.
Основа роботи — аналіз до коду. Ми очікуємо, що ви опишете поточну поведінку, виділите чіткі обмежені контексти і разом з нами визначите, який модуль безпечніше всього винести першим. Кожен сервіс повинен жити за зрозумілим контрактом API, а границя вводитися поступово, щоб можна було откатитися, якщо щось піде не так. Також потрібна асинхронна чергу повідомлень, щоб повільні і всплескові завдання перестали блокувати користувацькі запити, і контейнери, щоб сервіс можна було збирати, тестувати і викатувати окремо.
Запропонуйте, будь ласка, поетапну дорожну карту, а не один стрибок. Реалістичний для нас план починається з виділення одного низькоризикового контексту, роботи його паралельно з монолітом, вимірювання результату і тільки потім — руху далі. Чесні компроміси і зрозумілі пояснення важливіші за модні слова.
Обсяг першого етапу: — Описати поточні модулі і вибрати перший контекст для виносу. — Задати контракт API і підключити його до моноліту через перемикач. — Ввести чергу повідомлень для одного асинхронного сценарію. — Контейнеризувати винесений сервіс з відтворюваною збіркою.