Проверяет понимание подходов к обеспечению согласованности данных в распределённых микросвирвисных архитектурах.
В монолите транзакция охватывает несколько таблиц в одной базе данных, обеспечивая атомарность. В микросервисах каждый сервис владеет своей БД, поэтому классические ACID-транзакции невозможны. Если операция затрагивает несколько сервисов, нужно гарантировать, что либо все изменения применятся, либо система придёт в согласованное состояние.
async function createOrder(order) {
try {
await orderService.create(order);
await paymentService.charge(order);
await inventoryService.reserve(order);
} catch (error) {
await paymentService.refund(order);
await inventoryService.release(order);
throw error;
}
}Для большинства бизнес-процессов достаточно саги и eventual consistency. Outbox полезен, когда нужно надёжно доставлять события между сервисами. Двухфазный коммит (2PC) применяют редко из-за блокировок и низкой доступности, только если требуется строгая атомарность (например, финансовые операции).
Вывод: В микросервисах консистентность достигается не через глобальные транзакции, а через композицию локальных операций, компенсации и асинхронные события. Выбор паттерна зависит от требований к согласованности и допустимой задержке.
Уровень
Рейтинг:
5
Сложность:
7
Навыки
Node.js
Networks
Ключевые слова
Подпишись на Golang Developer в телеграм