Strangler Pattern (Паттерн Душитель)
В этой статье поговорим о паттерне Strangler. Этот паттерн поможет мигрировать ваши легаси апликейшины на "новые рельсы" более мягко.
Проблема и контекст
По мере развития вашей системы, ваши тулы, хостинг технологии и архитектура системы может устаревать. Комплексити при добавлении новых функций может быть несоизмеримым. Иногда проще перейти на новый сервис и пилить там новые функции. Однако, если вы пилите параллельно 2 сервиса (старый и новый) у юзеров может возникнуть вопрос какой из сервисов юзать при каких запросах.
Решение
Постепенно заменяйте функционал новыми приложениями и сервисами. Создайте фасад, который будет перенаправлять на нужные сервисы и будет единой точкой входа для ваших клиентских апликейшинов. Существующий функционал стоит переносить в новый сервис постепенно, а новые функции пилить только в новом сервисе.
Strangler помогает свести к минимуму риск миграции на новый сервис и распределить усилия по разработке и времени. С фасадом который будет перенаправлять на нужный сервис, можно переносить старые функции в новый сервис с нужным темпом, не беспокоясь, что какой-то компонент отвалиться. Со временем когда вы перенесете весь функционал в новые сервисы, старая система будет "задушена" и больше не нужна.
Проблемы и вопросы при реализации
- Подумайте, как хэндлить сервисы и data store, которые будут использоваться как новыми, так и устаревшими сервисами. Убедитесь, что обе системы имеют доступ к этим ресурсам одновременно.
- Структурируйте новые приложения и сервисы таким образом, чтобы их можно было легко таким же образом заменить при будущем применении паттерна уже к ним.
- В какой-то момент, когда миграция будет завершена, strangler fig facade либо будет удален, либо превратится в адаптер для устаревших клиентов.
- Убедитесь, что фасад не отстает от миграции.
- Убедитесь, что фасад не становится единственной точкой отказа или узким местом в производительности.
Используйте этот шаблон, когда:
Используйте этот шаблон при постепенном переносе back-end приложения на новую архитектуру.
Не используйте этот шаблон, когда:
- Когда запросы на back-end систему не могут быть "перехвачены".
- Для маленьких систем где complexity по полному переносу на новый сервис незначительно