логотип PurpleSchool
логотип PurpleSchool

SAGA паттерн в микросервисах

Автор

Олег Марков

Введение

В распределённых микросервисных системах поддержание согласованности данных — одна из ключевых задач. Традиционные транзакции ACID не всегда применимы, поэтому используют паттерн SAGA. Он позволяет разбивать большие транзакции на последовательность локальных действий с возможностью компенсации в случае ошибки. В этой статье мы разберемся, как работает SAGA паттерн и как его применять на практике.

Принципы SAGA паттерна

SAGA состоит из последовательности локальных транзакций в разных микросервисах. Каждая транзакция выполняет часть задачи и публикует событие. В случае ошибки активируется компенсирующее действие для отмены предыдущих операций.

Типы SAGA

  1. Хореография — каждый сервис самостоятельно реагирует на события и запускает следующую транзакцию.
  2. Оркестрация — центральный оркестратор управляет последовательностью транзакций, направляя сервисы.

Пример реализации 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

  • step100+ шагов развития
  • lessons30 бесплатных лекций
  • lessons300 бонусных рублей на счет

Бесплатные лекции

Все гайды по Microservices

Взаимодействие микросервисов в распределённых приложенияхСобытийно управляемые микросервисыRabbitMQ и микросервисыОркестрация микросервисов в продакшенеМикросервисы и API взаимодействиеХореография микросервисов — подход без оркестратораВзаимодействие микросервисов в распределённых системахKafka в микросервисной архитектуреИнтеграция микросервисов в сложных системахHTTP запросы внутри микросервисовgRPC микросервисы и высокопроизводительное взаимодействиеGateway микросервисы — маршрутизация запросов
Открыть базу знаний

Лучшие курсы по теме

изображение курса

Микросервисы

Антон Ларичев
Гарантия
Бонусы
иконка звёздочки рейтинга4.8
3 999 ₽ 6 990 ₽
Подробнее
изображение курса

Nest.js с нуля

Антон Ларичев
AI-тренажеры
Практика в студии
Гарантия
Бонусы
иконка звёздочки рейтинга4.6
3 999 ₽ 6 990 ₽
Подробнее
изображение курса

Docker и Ansible

Антон Ларичев
AI-тренажеры
Гарантия
Бонусы
иконка звёздочки рейтинга4.8
3 999 ₽ 6 990 ₽
Подробнее

Отправить комментарий