В двух предыдущих статьях мы рассмотрели ключевые идеи микросервисов. В первой части были описаны качественные характеристики границ микросервисов. Во второй части был представлен доменно-ориентированный подход и методы определения границ сервисов. В сегодняшней заключительной статье мы рассмотрим альтернативы доменно-ориентированному подходу, а затем изучим шаблоны для разделения монолита на микросервисы.
Contents
Разложение на основе волатильности
Общепринятой альтернативой декомпозиции по предметной области является волатильность. Декомпозиция на основе волатильности включает в себя разделение наиболее часто изменяющихся частей системы на отдельные микросервисы. Этот метод может быть очень полезен, если вашей основной целью является время выхода на рынок (TTM). Но если такой подход вынуждает вас нести службу за пределы организации, скорость доставки продукта неизбежно начнет снижаться.
Разбивка по организационной структуре
В соответствии с законом Конвей, существует прямая связь между организационной структурой и результирующей архитектурой системы. Определение границ отдела не должно приводить к ситуации, когда право собственности на отдел распределяется между несколькими командами. Первый способ разрешить эту ситуацию — выделить часть функционала в отдельный отдел и передать право собственности другой команде. Второй способ – изменение организационной структуры. Хорошим решением здесь было бы перейти на команды потокао чем я говорил в отдельной статье.
Шаблон для разбиения монолита на микросервисы
Прежде чем перейти к описанию моделей, хочу сделать предупреждение. Микросервисы не должны быть самоцелью. Это не панацея. Ориентация на микросервисы приводит к тому, что вы перестаете рассматривать альтернативные варианты решения задач. Иногда проще и разумнее использовать монолит. Например, масштабирование существующего монолита иногда более эффективно за счет использования балансировщика нагрузки, чем длительное последовательное разбиение на микросервисы. Поэтому, прежде всего, определитесь со своими целями. А затем выбрать самые простые инструменты для их изготовления.
Код или база данных
Если вы осознанно подошли к разделению своего монолита на микросервисы, вам нужно определиться с шагами. Что следует удалить первым — код или базу данных? Рекомендуется детально изучить возможность подсветки кода и базы данных, а затем определиться с приоритетом. Наиболее распространенным первым шагом является перемещение кода при сохранении единой (монолитной) базы данных. Как правило, если вы не можете получить код, вы можете прекратить работу и избежать распутывания зависимостей базы данных.
Менее распространенный подход — сначала восстановить базу данных. У этого подхода есть преимущества — вы заранее решаете проблемы с целостностью данных. В этом случае последующее извлечение кода будет менее рискованным.
Модель «Душетель»
Модель «Душетель» (Душитель инжир шаблон) заключается в постепенном переносе функционала старой системы на новую. Обращения к существующей монолитной системе перехватываются и перенаправляются в микросервис для получения новой функциональности. Остальную функциональность обеспечивает монолит и к нему направляются соответствующие запросы. Отличительной особенностью данной модели является то, что в монолит не вносятся никакие изменения. Это преимущество можно использовать для параллельного выполнения вызовов старого и нового кода и последующего сравнения результатов.
Модель с переключаемой функцией
Модель с переключаемой функцией (переключение функций Или селектор функций) — это механизм, используемый для включения, отключения и переключения между версиями функций. В нашем случае функционал в монолите и микросервисе может быть разным, и этот механизм позволяет переключаться между реализациями в зависимости от обстоятельств (например, через логический флаг).
Заключение
Прежде чем приступить к переносу функциональности Monolith на микросервисы, необходимо четко определить конечную цель. Если микросервисы — лучшее решение, рассмотрите стратегию поэтапного переноса функций. Учтите, что процесс извлечения микросервиса из монолита тоже можно разделить на несколько этапов.
Этой статьей я завершаю цикл публикаций по моделированию микросервисов. Все статьи серии (Часть 1, Часть 2 и Часть 3) предназначены для улучшения вашего понимания оптимального разделения системы на модули в архитектуре микросервисов. Подпишись на мой телеграмм каналчтобы не пропустить свежие статьи. И увижу вас скоро!