При независимых данных сервисов нет обычной локальной транзакции на весь бизнес-процесс. Нужно явно выбирать границы атомарности, допустимую задержку согласования и поведение при частичном отказе.
Какова основная проблема микросервисов при раздельных данных и как решать распределённую согласованность?
При независимых данных сервисов нет обычной локальной транзакции на весь бизнес-процесс. Нужно явно выбирать границы атомарности, допустимую задержку согласования и поведение при частичном отказе.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
При независимых данных сервисов нет обычной локальной транзакции на весь бизнес-процесс. Нужно явно выбирать границы атомарности, допустимую задержку согласования и поведение при частичном отказе.
Локальные изменения фиксируют транзакцией сервиса, публикацию события связывают с ними через outbox. Длинный процесс организуют сагой с идемпотентными шагами и компенсациями, которые не всегда являются точным rollback. Для чтения можно строить проекции и показывать промежуточные статусы. Сильная синхронная согласованность тоже возможна специальными протоколами, но увеличивает связность и стоимость отказов. Иногда лучший ответ — не разделять тесно связанный инвариант между сервисами вовсе.