Вы когда-нибудь слышали про паттерн 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

Вы когда-нибудь слышали про паттерн Saga? | Сетка — новая социальная сеть от hh.ru
repost

184

input message

напишите коммент

· 15.03

Хороший разбор! Интересно, что Saga можно представить как 3D-модель с разными комбинациями параметров.

Как думаешь, есть ли сейчас какие-то тенденции в выборе подхода? Например, чаще ли компании склоняются к хореографии вместо оркестрации, или всё зависит от конкретного кейса?

ответить

15.03

Это все компромиссы, на которые порой приходится идти. Например, продукт коробочный и нет возможности в него затащить temporal или bpmn, тогда уже ничего не остается как работать исключительно с хореографией или брать на себя ношу писать свою реализацию оркестратора (изобретать велосипед)

Говоря о количество сервисов, после которого хореография уже не торт , это 4+, дальше уже тяжело поддерживать на хорошем уровне наблюдаемость стстемы

ответить

еще контент автора

еще контент автора

войдите, чтобы увидеть

и подписаться на интересных профи

в приложении больше возможностей

пока в веб-версии есть не всё — мы вовсю работаем над ней

сетка — cоциальная сеть для нетворкинга от hh.ru

пересекайтесь с теми, кто повлияет на ваш профессиональный путь