Задать вопрос

Консистентность данных в микросервисах?

Всем привет!

Допустим, есть 2pc и saga паттерны.
У первого - проблема с промежуточными этапами, когда prepare - ok, а в момент выполнения локальной транзакции все потухло.
У саги поведение (помимо сложности реализации) - read uncommited.

Так вот вопрос. Есть ли способ использовать микросервисы, когда есть нужда в транзакциях и консистентности данных, избегая костыльных реализаций транзакций?

Тот же ACID в РСУБД продумывался десятилетиями, с ведением журнала транзакций, изоляций и бла бла - в общем работает идеально. В случаях микросервисов мы костылим какие-то левые решения, которые не всегда дают профит

например в 2pc это когда на момент выполнения транзакции все рухнуло, а мы, например, отправили смску. Все. Результата нет, юзер в ярости. С монолитом такого не произошло бы.
В случае с сагами, то тут проблема в изоляции, и без какого-нибудь Kafka не обойтись, ибо только он может дать гарантию на 1) сохранение порядка сообщений 2) что сообщение будет отправлено ровно 1 раз

Оттого и вопрос - можно ли обойтись без всего этого, сохранив плюсы реализации транзакционных механизмов РСУБД на микросервисах?

p.s не спорю, что для того же кейса с смсками, можно было бы заюзать outbox какой нибудь, но ведь это проблему все равно не решает
  • Вопрос задан
  • 381 просмотр
Подписаться 4 Средний 7 комментариев
Пригласить эксперта
Ответы на вопрос 1
DollyPapper
@DollyPapper
Оттого и вопрос - можно ли обойтись без всего этого, сохранив плюсы реализации транзакционных механизмов РСУБД на микросервисах?

Паттерны распред. транзакций от того и появились, что нельзя. У вас физически несколько разных БД на разных хостах. Транзакция это свойство систем хранения данных, когда мы атомарно фиксируем некоторое состояние системы в БД. В распределенной системе - в нескольких БД. Сайд эффекты типа отправки СМС не имеют никакого отношения к транзакциям. Либо отправляйте СМС после полной фиксации транзакции, либо как вариант используйте компенсирующую СМС, типа - "Извините мы ошиблись на самом деле мы не сделали того о чем мы писали в прошлой смс", но это уже в порядке бреда.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы