0 4.5K ru

Strangler Pattern (Паттерн Душитель)

В этой статье поговорим о паттерне Strangler. Этот паттерн поможет мигрировать ваши легаси апликейшины на "новые рельсы" более мягко. 

Проблема и контекст

По мере развития вашей системы, ваши тулы, хостинг технологии  и архитектура системы может устаревать. Комплексити при добавлении новых функций может быть несоизмеримым. Иногда проще перейти на новый сервис и пилить там новые функции. Однако, если вы пилите параллельно 2 сервиса (старый и  новый) у юзеров может возникнуть вопрос какой из сервисов юзать при каких запросах.

Решение

Постепенно заменяйте функционал новыми приложениями и сервисами. Создайте фасад, который будет перенаправлять на нужные сервисы и будет единой точкой входа для ваших клиентских апликейшинов. Существующий функционал стоит переносить в новый сервис постепенно, а новые функции пилить только в новом сервисе.

Strangling the monolith

Strangler помогает свести к минимуму риск миграции на новый сервис и распределить усилия по разработке и времени. С фасадом который будет перенаправлять на нужный сервис, можно переносить старые функции в новый сервис с нужным темпом, не беспокоясь, что какой-то компонент отвалиться. Со временем когда вы перенесете весь функционал в новые сервисы, старая система будет "задушена" и больше не нужна. 

Проблемы и вопросы при реализации

  • Подумайте, как хэндлить сервисы  и data store, которые  будут использоваться как новыми, так и устаревшими сервисами. Убедитесь, что обе системы имеют доступ к этим ресурсам одновременно.
  • Структурируйте новые приложения и сервисы таким образом, чтобы их можно было легко таким же образом заменить при будущем применении паттерна уже к ним.
  • В какой-то момент, когда миграция будет завершена, strangler fig facade либо будет удален, либо превратится в адаптер для устаревших клиентов.
  • Убедитесь, что фасад не отстает от миграции.
  • Убедитесь, что фасад не становится единственной точкой отказа или узким местом в производительности.

Используйте этот шаблон, когда:

Используйте этот шаблон при постепенном переносе back-end приложения на новую архитектуру.

Не используйте этот шаблон, когда:

  • Когда запросы на back-end систему не могут быть "перехвачены".
  • Для маленьких систем где complexity по полному переносу на новый сервис незначительно

Comments:

Please log in to be able add comments.