Что сказать на собеседовании про паттерн Saga?

  Рет қаралды 6,087

Андрей Суховицкий

Андрей Суховицкий

Күн бұрын

ССЫЛКА НА КУРС:
it-es-course.getcourse.ru/main По промокоду ESCOURSE дополнительная скидка 10% до 11 сентября!
Автор курса: Андрей Суховицкий
Действующий разработчик ПО, работает над проектированием и разработкой высоконагруженных систем.
Последние 4 года создаю и провожу авторские курсы по микросервисной архитектуре, проектированию производительных систем и проектированию ПО в университете ИТМО и МФТИ.
В 2021 году получил награду как лучший преподаватель ИТМО.
0:00 В чем "пессимистичность" алгоритма двухфазного коммита (2PC) и почему это плохо в микросервисах
1:25 Паттерн Saga, определение и какую проблему он решает
4:10 Как обеспечить атомарность цепочки отдельных транзакций (Саги)
5:52 "Оптимистичность" саг

Пікірлер: 10
@alext6083
@alext6083 5 ай бұрын
Вы забыли упомянуть, что: 1 нужно решать вопрос консистентности, пока финалтная маленькая транзакция не закомичена, система находится в неконсистентном состоянии, и нужно уметь с зтим жить. 2 процесс отката маленьких транзакций иакде может обломаться, это собственно коррелирует с первыми вопросом. И с жтим также нужно уметь жить.
@sukhoa
@sukhoa Жыл бұрын
0:00 В чем "пессимистичность" алгоритма двухфазного коммита (2PC) и почему это плохо в микросервисах 1:25 Паттерн Saga, определение и какую проблему он решает 4:10 Как обеспечить атомарность цепочки отдельных транзакций (Саги) 5:52 "Оптимистичность" саг ССЫЛКА НА КУРС: it-es-course.getcourse.ru/y/3b92c9c Автор курса: Андрей Суховицкий Действующий разработчик ПО, работает над проектированием и разработкой высоконагруженных систем. Последние 4 года создаю и провожу авторские курсы по микросервисной архитектуре, проектированию производительных систем и проектированию ПО в университете ИТМО и МФТИ. В 2021 году получил награду как лучший преподаватель ИТМО.
@kotojava
@kotojava 7 ай бұрын
а если компенсационного механизма в принципе не может быть?
@gochaorg
@gochaorg Жыл бұрын
Проблема в том ещё что не все представляют что есть лог транзакций А Сага - это и есть попытка реализовать лог транзакций, только узко заточенный
@sukhoa
@sukhoa Жыл бұрын
Ну, у лога транзакций много разных предназначений. Он может использоваться для восстановления состояния хранилища, для репликации. Сага - узкоспециализированный паттерн, который помогает реализовать распределенную транзакцию, объединяющую множество неоднородных хранилищ, и при этом сохраняющую свойства атомарности, долговечности и в различной мере консистентности и изолированности.
@test_bot5541
@test_bot5541 Жыл бұрын
@@sukhoa по ACID тут вопросы. Транзакции - они обычно длинные не потому, что разработчик не догадался сделать их короткими, а потому что этого требует бизнес-логика. Если в длинной транзакции на счёт с 0-м остатком начисляется 100$ и должно сразу начислится 20%, как бонус за пополнение, то выполнится это должно атомарно, даже если будет длинно. Теперь представим, что параллельная короткая транзакция пытается списать 70$ с того же счёта за покупку чего-то. Без саг она, как вариант, прочтёт 0-й остаток и скажет, что недостаточно средств. Это правильно. Теперь вариант с патерном саги, делим долгую транзакцию: комитим 100$ ( -100 компенсационная ), но тут встревает эта короткая и списывает 70$. И на что же мы будем начислять %? На 30$ вместо 100? А если у разбитой транзакции откат, от какого остатка произойдет компенсация?
@sukhoa
@sukhoa Жыл бұрын
Да, дело тут не столько в атомарности, сколько в изолированности. Давайте рассмотрим несколько вариантов. 1. Конечно, сумма процента должна вычисляться не от текущего состояния счета, а от суммы начисления. Эта информация будет передаваться в сообщениях (событиях). Поэтому 20% всегда начислятся верно 2. Для организации изоляции в сагах могут использоваться целый ряд так называемых "контр-мер", каждая из которых помогает избавиться от определенных аномалий изоляции (dirty read, non-repeatable read, read uncommitted). В данном случае, вы можете сделать так, что параллельные саги не увидят, что сумма на счету более 0 до тех пор, пока не будет внесен и необходимый процент-бонус. То есть сделать эти 100$ "невидимыми", избавиться от аномалии read-uncommitted. 3. Есть очень много вариантов, я очень подробно разбираю похожую сагу в курсе. Еще вы всегда можете прочитать про контр-меры в этой научной статье "Semantic ACID Properties in Multidatabases Using RPC and Update Propagations. Lars Frank and Torben U. Zahle"
@test_bot5541
@test_bot5541 Жыл бұрын
@@sukhoa да, спасибо. Похоже всё-таки, что патерн в первую очередь для распределённых систем, где у каждого микросервиса м. б. своя БД, свои шарды, но все они должны отработать последовательно, как единое целое. Там да - Сага будет делать ретраи, пинговать, принимать решения о доступности узлов и т.д. В монолите, где транзакция может отработать в рамках одной сессии - смысл этого оверхеда не очень ясен. Всё равно остаток лочится и для короткой транзакции списания он по-прежнему недоступен. Как, собственно, и должно быть. Ну так и проще тогда делать транзакции serializable или read committed стнадартными средствами СУБД и не заморачиваться. Ещё может кейс для Саги, если в монолите нужно атомарно что-то выполнить из разных сессий, взятых скажем, из пула сединений веб-сервера, но пример, зачем так делать, на вскидку сложно придумать...
@ivani3237
@ivani3237 8 ай бұрын
@@test_bot5541ну так и задумано, жертвуем консистентностью в пользу скорости
Luck Decides My Future Again 🍀🍀🍀 #katebrush #shorts
00:19
Kate Brush
Рет қаралды 5 МЛН
Just try to use a cool gadget 😍
00:33
123 GO! SHORTS
Рет қаралды 85 МЛН
small vs big hoop #tiktok
00:12
Анастасия Тарасова
Рет қаралды 15 МЛН
Урок 4: Как работи Git?
17:33
C# програмиране със Зако
Рет қаралды 64
Consistent hashing, Rendezvous hashing | Вопросы собеседований
48:08
Андрей Суховицкий
Рет қаралды 1,2 М.
Парадокс двух конвертов // Vital Math
13:06
Vital Math
Рет қаралды 288 М.
Открытое алгоритмическое собеседование
1:05:22
Яндекс Практикум
Рет қаралды 2,8 М.