Strangler Application – это архитектурный подход, который используется для постепенного рефакторинга и замены устаревших систем или приложений новыми решениями. Основная идея заключается в том, чтобы внедрить новое приложение параллельно с существующим, постепенно перенося функциональность от старого к новому до тех пор, пока старое приложение не станет полностью ненужным и его можно будет "удушить".
Контекст: Крупные компании часто сталкиваются с проблемой обновления устаревших монолитных приложений, которые трудно поддерживать и масштабировать.
Проблема: Полная замена старого приложения новым за один раз слишком рискованна и трудоемка. Непрерывность бизнеса может быть нарушена, а пользователи могут столкнуться с проблемами.
Решение: Паттерн Strangler Application позволяет постепенно заменить старое приложение новым, добавляя новые функциональности в виде микросервисов. Например, Amazon и Netflix использовали этот подход для миграции своих старых систем на новую архитектуру, минимизируя риски и обеспечивая непрерывность работы. Они начали с замены отдельных модулей, постепенно внедряя новые компоненты, пока весь монолит не был заменен. Компании начинают с замены отдельных модулей, постепенно внедряя новые компоненты, пока весь монолит не будет заменен.
Преимущества:
- Минимизация рисков: Постепенная миграция снижает вероятность серьезных сбоев.
- Быстрая доставка: Новые функции могут быть развернуты быстрее и с меньшими усилиями.
- Постепенное улучшение: Постепенное обновление позволяет быстро реагировать на обратную связь и корректировать ошибки.
Недостатки:
- Сложность управления: Требуется управление двумя системами (старой и новой) в течение переходного периода.
- Интеграционные сложности: Необходимо обеспечить корректное взаимодействие между старыми и новыми компонентами.
- Дополнительные затраты: Требуются дополнительные ресурсы для поддержания и мониторинга обеих систем.
Основные стадии подхода Strangler Application
- Анализ, планирование и разработка новых микросервисов (Transform):
Постепенное внедрение новых микросервисов для замены или обновления существующих частей системы. Этот этап включает в себя:
- Оценку и анализ текущего состояния монолитной системы.
- Идентификацию модулей и функциональности, которые могут быть выделены в отдельные микросервисы.
- Разработку и создание микросервисов для специфических функций или модулей.
- Интеграцию новых микросервисов с уже существующей системой для обеспечения плавной функциональности.
- Переход пользователей (Coexist):
На этом этапе новые микросервисы начинают работать параллельно с оставшейся частью монолита, позволяя постепенно переводить пользователей на новую систему без прерываний в работе. Включает:
- Плавное перенаправление пользовательских запросов с монолита на микросервисы.
- Мониторинг работы и отладку новых компонентов для гарантии их корректного функционирования.
- Вывод из эксплуатации старого кода (Eliminate):
После успешного переноса всех необходимых функций и данных, старый монолитный код постепенно отключается и удаляется. Это завершает процесс миграции. Процесс включает:
- Постепенное отключение функциональности, которая теперь обслуживается микросервисами.
- Окончательное удаление устаревших компонентов системы после полного завершения миграционного процесса.
Как сказал бы Индиана Джонс, "Выбор должен быть сделан мудро". Так и с паттерном Strangler Application — шаг за шагом, кусочек за кусочком, и в итоге вы получите новое блестящее приложение, не нарушив ни одной древней реликвии (кода).