Что такое хореография в Saga

«Что такое хореография в Saga» — вопрос из категории Архитектура, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Хореография в Saga — это подход к управлению распределёнными транзакциями, где каждый сервис самостоятельно реагирует на события от других сервисов, без централизованного оркестратора. Каждый шаг транзакции выполняется локально, а сервисы обмениваются событиями через брокер (Kafka, RabbitMQ и т. д.).

Пример:

// Сервис A: создаёт заказ и публикует событие
func CreateOrder() {
    // Локальная транзакция
    tx := db.Begin()
    defer tx.Rollback()

    order := Order{Status: "pending"}
    tx.Create(&order)

    // Отправка события
    event := OrderCreatedEvent{OrderID: order.ID}
    PublishToKafka("order.created", event)

    tx.Commit()
}

// Сервис B: слушает событие и резервирует товар
func OnOrderCreated(event OrderCreatedEvent) {
    tx := db.Begin()
    defer tx.Rollback()

    // Локальная транзакция
    ReserveStock(event.OrderID)
    PublishToKafka("stock.reserved", event)

    tx.Commit()
}

Плюсы:

  • Высокая масштабируемость (нет единой точки отказа).
  • Гибкость (сервисы слабо связаны).

Минусы:

  • Сложнее отслеживать поток транзакций.
  • Труднее обрабатывать ошибки (нужны компенсирующие транзакции).