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

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

Всем привет!

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

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

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

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

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

p.s не спорю, что для того же кейса с смсками, можно было бы заюзать outbox какой нибудь, но ведь это проблему все равно не решает
  • Вопрос задан
  • 387 просмотров
Подписаться 4 7 комментариев