Олег Володин
System Architect · 14.03 · ред.
Вы когда-нибудь слышали про паттерн Saga?
Если да, то прекрасно, а о Fairy Tale Saga, или о Horror Story Saga? Если нет, то попробуем разобраться.
Начнем с простого, откуда пошел данный шаблон? Тут все просто, хотим обеспечить согласованность данных в мире микросервисов - тогда это к Saga, потому что БД скорее всего у каждого сервиса своя, нет «приколов» с двухфазными коммитами, и вообще хочется все дешево и надежно.
Если при выстраивании микросервисов обычно мы оперируем термином «кирпичик», в нашей стене под названием «решение», то в случае с Saga данный «кирпичик» остается самим собой, но у каждого из измерений (длина, ширина, высота) есть свои наименования: 1️⃣ Какой способ коммуникации используется в нашем подходе? (Sync или Async) 2️⃣ Какую консистентность данных мы гарантируем? (Строгую(atomic) или в конечном итоге(eventual)) 3️⃣ Какой способ координации мы выбираем? (Оркестрация(orchestration) или хореография(choreography))
Стоит обратить внимание, что каждый тип данного шаблона представлен в виде трехбуквенного обозначения, подразумевающее описание каждой буквы каждого измерения нашего «кирпичика». Ответ на каждый из предыдущих вопросов и формирует у нас описание одного из 3D измерений, и поэтому мы можем спокойно переходить в частным реализация шаблона Saga. Для начала стоит их перечислить: - Epic Saga(sao) - (s)Синхронное взаимодействие со (a)строгой консистентностью, обусловленной использованием (o)оркестрации - Phone Tag Saga(sac) - (s)Синхронное взаимодействие со (a)строгой консистентностью, обусловленной использованием (c)хореографии - Fairy Tale Saga(seo) - (s)Синхронное взаимодействие с (c) консистентностью в конечном итоге, обусловленной использованием (o)оркестрации - Time Travel Saga(sec) - (s)Синхронное взаимодействие с (c) консистентностью в конечном итоге, обусловленной использованием (c) хореографии - Fantasy Fiction Saga(aao) - (a) Асинхронное взаимодействие со (a)строгой консистентностью, обусловленной использованием (o)оркестрации - Horror Story Saga(aac) - (a) Асинхронное взаимодействие со (a)строгой консистентностью, обусловленной использованием (c)хореографии - Parallel Saga(aeo) - (a) Асинхронное взаимодействие с (c) консистентностью в конечном итоге, обусловленной использованием (o)оркестрации - Anthology Saga(aec) - (a) Асинхронное взаимодействие с (c) консистентностью в конечном итоге, обусловленной использованием (c)хореографии.
Каждый из данных подходов имеет и свои плюшки и шишки, и выбор подходящего зависит как от бизнес-сценариев, так и от инфры, где необходимо будет реализовывать данный подход. #dev #saga #software
Михаил Кутепов
· 15.03
Хороший разбор! Интересно, что Saga можно представить как 3D-модель с разными комбинациями параметров.
Как думаешь, есть ли сейчас какие-то тенденции в выборе подхода? Например, чаще ли компании склоняются к хореографии вместо оркестрации, или всё зависит от конкретного кейса?
ответить
Олег Володин
15.03
Это все компромиссы, на которые порой приходится идти. Например, продукт коробочный и нет возможности в него затащить temporal или bpmn, тогда уже ничего не остается как работать исключительно с хореографией или брать на себя ношу писать свою реализацию оркестратора (изобретать велосипед)
Говоря о количество сервисов, после которого хореография уже не торт , это 4+, дальше уже тяжело поддерживать на хорошем уровне наблюдаемость стстемы
ответить
еще контент автора
еще контент автора
Олег Володин
System Architect · 14.03 · ред.
войдите, чтобы увидеть
и подписаться на интересных профи