Какие плюсы и минусы Saga

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

Ответ

Плюсы:

  • Управляет распределенными транзакциями в микросервисной архитектуре, заменяя ACID.
  • Разделяет транзакцию на этапы (компенсирующие действия), что повышает отказоустойчивость.
  • Не требует глобальной блокировки ресурсов, улучшая масштабируемость.

Минусы:

  • Сложность реализации: нужно предусмотреть компенсацию для каждого этапа.
  • Не гарантирует строгую согласованность данных (eventual consistency).
  • Отладка и мониторинг распределенных саг могут быть нетривиальными.

Пример (Golang):

func placeOrderSaga() error {
    if err := reserveInventory(); err != nil {
        return err
    }
    if err := chargeCustomer(); err != nil {
        compensateInventory() // компенсация
        return err
    }
    return nil
}