Вопрос проверяет понимание проблем, возникающих при распределённых транзакциях, и необходимости компромиссов в распределённых системах.
Распределённые транзакции — это операции, которые затрагивают несколько независимых узлов (баз данных, сервисов). Они сложны из-за CAP-теоремы, которая утверждает, что в распределённой системе невозможно одновременно обеспечить согласованность (Consistency), доступность (Availability) и устойчивость к разделению (Partition tolerance). Приходится выбирать два из трёх свойств.
async function createOrderSaga(order) {
try {
await reserveStock(order); // Шаг 1
await processPayment(order); // Шаг 2
await confirmOrder(order); // Шаг 3
} catch (error) {
// Компенсационные действия
await cancelPayment(order);
await releaseStock(order);
throw error;
}
}В этом примере каждый шаг — отдельная операция. Если что-то пошло не так, запускаются компенсации.
Распределённые транзакции требуют компромиссов. Для критичных по согласованности систем (финансы) используют 2PC или Paxos/Raft. Для микросервисов чаще применяют Saga, жертвуя строгой согласованностью ради доступности и производительности.
Уровень
Рейтинг:
4
Сложность:
7
Навыки
Node.js
Networks
Ключевые слова
Подпишись на Java Developer в телеграм