Пошаговая миграция устаревшей системы с постепенной заменой определенных компонентов новыми приложениями и службами. Компоненты устаревшей системы постепенно удаляются, и со временем новая система полностью возьмет на себя все ее функции, что позволяет вывести старую систему из эксплуатации.
Контекст и проблема
Средства разработки, технологии размещения и архитектуры, на основе которых создается любая система, часто устаревают с течением времени. По мере добавления новых функций и возможностей неуклонно растет сложность старых приложений, что еще больше затрудняет обслуживание и добавление новых компонентов.
Но полная замена сложной системы часто сопряжена с огромными трудностями. Во многих случаях предпочтительнее переходить на новую систему постепенно, сохраняя старую систему для обработки тех возможностей, которые еще не реализованы в новой. Выполнение двух разных версий одного приложения означает, что клиенты должны знать, в какой их них находятся нужные компоненты. И эти сведения нужно обновлять во всех клиентах каждый раз, когда вы переносите очередной компонент или службу.
Решение
Поэтапно заменяйте компоненты новыми приложениями и службами. Создайте оболочку, которая перехватывает все запросы к устаревшим системам серверной части. Эта оболочка будет выбирать, куда направить такие запросы: к устаревшему приложению или к новой службе. Так вы сможете перенести компоненты в новую систему постепенно, не изменяя интерфейс для пользователей, которые даже не заметят, что происходит поэтапная миграция.
Эта модель позволяет снизить риски миграции и распределить усилия разработчиков по времени. Пока оболочка безопасно направляет пользователей к правильному приложению, вы можете добавлять компоненты в новую систему в комфортном темпе, сохраняя при этом работоспособность старого приложения. Через некоторое время все функции будут перенесены в новую систему и устаревшая система больше не будет нужна. Когда этот процесс завершится, вы сможете отключить и удалить старую систему.
Проблемы и рекомендации
- Отдельного внимания потребуют службы и хранилища данных, которые одновременно используются в новой и устаревшей системах. Следите за тем, чтобы обе системы могли получать доступ к этим ресурсам.
- Структурируйте новые приложения и службы таким образом, чтобы их можно было легко перехватывать и заменять в будущих миграциях инжиров.
- В какой-то момент, когда миграция завершена, удушитель фигового фасада либо уйдет, либо перейдет в адаптер для устаревших клиентов.
- Следите за тем, чтобы оболочка обновлялась параллельно с перенесенной версией.
- Следите за тем, чтобы оболочка не стала единой точкой отказа или узким местом производительности.
Когда следует использовать этот шаблон
Используйте этот шаблон при поэтапной миграции серверной части приложения на новую архитектуру.
Эту схему не стоит применять в следующих случаях:
- если запросы к системам серверной части невозможно задерживать;
- если система относительно невелика и ее легко полностью заменить.
Проектирование рабочей нагрузки
Архитектор должен оценить, как шаблон Strangler Fig можно использовать в проектировании рабочей нагрузки для решения целей и принципов, описанных в основных принципах Платформы Azure Well-Architected Framework. Например:
Принцип | Как этот шаблон поддерживает цели основных компонентов |
---|---|
Решения по проектированию надежности помогают рабочей нагрузке стать устойчивой к сбоям и обеспечить восстановление до полнофункционального состояния после сбоя. | Добавочный подход этого шаблона может помочь снизить риски при переходе компонента и больших системных изменений. - Тестирование RE:08 |
Оптимизация затрат ориентирована на поддержание и улучшение рентабельности инвестиций рабочей нагрузки. | Цель этого подхода заключается в том, чтобы максимально повысить эффективность использования существующих инвестиций в текущей работающей системе при постепенной модернизации, так как это позволяет выполнять замену с высокой производительностью инвестиций до замены низкого roI. - Затраты на компоненты CO:07 - Затраты на среду CO:08 |
Операционное превосходство помогает обеспечить качество рабочей нагрузки через стандартизированные процессы и сплоченность команды. | Этот шаблон обеспечивает непрерывный подход к улучшению, при котором добавочная замена небольшими изменениями с течением времени предпочтительнее, чем большие системные изменения, которые являются более рискованными для реализации. - Разработка рабочей нагрузки OE:06 - Рекомендации по безопасному развертыванию OE:11 |
Как и любое решение по проектированию, рассмотрите любые компромиссы по целям других столпов, которые могут быть представлены с этим шаблоном.
Следующие шаги
- Блог МартинА Фаулера на StranglerFigApplication