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