Sobes.tech
Назад к вопросам
Senior
4

Что такое паттерны Saga и Outbox?

Компании, где спрашивали
СБЕРСБЕР

Ответ от нейросети

sobes.tech AI

Паттерны Saga и Outbox применяются для управления распределёнными транзакциями и обеспечения согласованности данных в микросервисах.

Saga — это паттерн, который разбивает долгую распределённую транзакцию на серию локальных транзакций, каждая из которых выполняется в отдельном сервисе. Если одна из транзакций неудачна, выполняются компенсирующие транзакции для отката изменений. Саги бывают двух типов:

  • Хореография — сервисы обмениваются событиями и сами решают, что делать дальше.
  • Оркестрация — центральный оркестратор управляет последовательностью шагов.

Outbox — паттерн, который решает проблему атомарной записи данных и сообщений для интеграции. В рамках одной транзакции в базе данных сохраняются и бизнес-данные, и сообщения для отправки (например, в Kafka) в специальной таблице outbox. Затем отдельный процесс читает эти сообщения и отправляет их в систему обмена сообщениями. Это гарантирует, что сообщение не потеряется и будет отправлено только после успешного сохранения данных.

Пример использования Outbox:

// В транзакции
saveOrder(order);
saveOutboxMessage(orderId, "OrderCreated");

// Отдельный процесс
List<Message> messages = readUnsentOutboxMessages();
for (Message msg : messages) {
    kafkaProducer.send(msg);
    markMessageAsSent(msg);
}

Вместе эти паттерны помогают строить надёжные распределённые системы с гарантией согласованности и доставки сообщений.