Проверяется знание распределённых транзакций и компенсирующих действий.
Saga — это разбиение долгой транзакции на локальные шаги с компенсацией при ошибке. Реализуется либо через оркестратор, либо через хореографию событий.
Проблема: В микросервисах нет общей транзакции. Нужно, чтобы цепочка действий (например, бронирование отеля + покупка билета + оплата) была атомарной.
Решение — Saga:
Каждое действие выполняется локально.
При сбое выполняются компенсирующие транзакции (отмена брони, возврат денег).
Подходы:
Оркестратор — центральный сервис управляет шагами.
контроль, простая логика.
точка отказа.
Хореография — каждый сервис сам реагирует на события других.
нет единой точки отказа.
сложнее отлаживать.
Оркестратор → PaymentService: списать деньги.
Payment → BookingService: забронировать.
Booking → TicketService: выписать билет.
Если сбой на шаге 3 → Compensation: отменить бронь, вернуть деньги.
Вывод: Saga — стандартный паттерн для eventual consistency в распределённых системах.
Уровень
Рейтинг:
4
Сложность:
8
Навыки
Golang
Postgres
RabbitMQ
Kafka
Ключевые слова
Подпишись на Golang Developer в телеграм