Олег Марков
SAGA паттерн в микросервисах
Введение
В распределённых микросервисных системах поддержание согласованности данных — одна из ключевых задач. Традиционные транзакции ACID не всегда применимы, поэтому используют паттерн SAGA. Он позволяет разбивать большие транзакции на последовательность локальных действий с возможностью компенсации в случае ошибки. В этой статье мы разберемся, как работает SAGA паттерн и как его применять на практике.
Принципы SAGA паттерна
SAGA состоит из последовательности локальных транзакций в разных микросервисах. Каждая транзакция выполняет часть задачи и публикует событие. В случае ошибки активируется компенсирующее действие для отмены предыдущих операций.
Типы SAGA
- Хореография — каждый сервис самостоятельно реагирует на события и запускает следующую транзакцию.
- Оркестрация — центральный оркестратор управляет последовательностью транзакций, направляя сервисы.
Пример реализации SAGA на Python с RabbitMQ
import pika
import json
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.queue_declare(queue='order_events')
# Отправка события о создании заказа
order_event = {"type": "ORDER_CREATED", "order_id": 101}
channel.basic_publish(exchange='', routing_key='order_events', body=json.dumps(order_event))
# Получение события и выполнение локальной транзакции
def callback(ch, method, properties, body):
event = json.loads(body)
if event['type'] == 'ORDER_CREATED':
print(f"Processing payment for order {event['order_id']}")
# Локальная транзакция платежа
# В случае ошибки — выполнить компенсирующее действие
channel.basic_consume(queue='order_events', on_message_callback=callback, auto_ack=True)
channel.start_consuming()Если вы хотите детальнее погрузиться в архитектуру микросервисов и SAGA паттерн — приходите на наш курс Microservices. На курсе 94 урока и 5 упражнений, AI-тренажеры для практики с кодом и задачами 24/7, решение задач с живым ревью наставника, еженедельные встречи с менторами.
Применение SAGA на практике
- Обработка заказов и платежей в e-commerce;
- Управление бронированиями и резервированием ресурсов;
- Координация нескольких микросервисов в финансовых и логистических системах.
Частые ошибки
- Игнорирование компенсационных действий — приводит к несогласованности данных;
- Смешивание хореографии и оркестрации без ясной структуры;
- Слабое логирование событий — затрудняет диагностику ошибок;
- Отсутствие контроля повторной обработки сообщений — могут возникать дубликаты транзакций.
Частозадаваемые вопросы
Все ли операции можно оформить через SAGA? SAGA подходит для бизнес-процессов, где транзакции могут быть разделены на локальные операции с возможностью компенсации.
Как выбрать между хореографией и оркестрацией? Хореография подходит для простых процессов с небольшим числом сервисов, оркестрация — для сложных сценариев с множеством зависимостей.
Заключение
SAGA паттерн позволяет управлять распределёнными транзакциями, обеспечивая согласованность данных в микросервисной архитектуре. Применение правильной схемы хореографии или оркестрации, контроль событий и компенсационных действий помогает строить надёжные и масштабируемые системы.
Использование SAGA ускоряет обработку сложных процессов и снижает риск ошибок между сервисами. Для закрепления навыков работы с распределёнными транзакциями и изучения дополнительных подходов к микросервисам рекомендуем курс Microservices. В первых 3 модулях курса доступно бесплатное содержание, что позволяет попробовать SAGA на практике и понять структуру курса до покупки полного доступа.
Постройте личный план изучения Microservices до уровня Middle — бесплатно!
Microservices — часть карты развития Backend
100+ шагов развития
30 бесплатных лекций
300 бонусных рублей на счет
Бесплатные лекции
Все гайды по Microservices
Лучшие курсы по теме

Микросервисы
Антон Ларичев
Nest.js с нуля
Антон Ларичев