← Назад к вопросам

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

1.0 Junior🔥 91 комментариев
#Требования и их анализ

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI29 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

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

Основное определение

Хореография (Choreography) в контексте архитектуры микросервисов — это паттерн взаимодействия сервисов, при котором не существует центрального orchestrator'а. Вместо этого каждый сервис знает о событиях других сервисов и самостоятельно принимает решения о реагировании на них. Это decentralized подход к координации.

Хореография vs Оркестровка (Orchestration)

Оркестровка (Orchestration)

  • Центральный orchestrator управляет всеми взаимодействиями
  • Сервисы не знают друг о друге, знают только orchestrator'а
  • Явная последовательность шагов определена в одном месте
  • Проще отследить и отладить
  • Coupling на orchestrator (risk)

Хореография (Choreography)

  • Нет центрального orchestrator'а
  • Каждый сервис реагирует на события
  • Сервисы коммуницируют через событийную шину
  • Более распределённый и масштабируемый подход
  • Сложнее отследить логику (distributed trace)

Как работает хореография

Клиент создаёт заказ → Orders публикует OrderCreated → Несколько сервисов слушают и реагируют независимо → Каждый публикует свои события → Другие сервисы реагируют

Компоненты хореографии

1. Event Publisher (издатель событий)

  • Сервис, который создаёт и публикует событие
  • Не знает, кто на него подпишется
  • Асинхронная публикация

2. Event Broker (брокер событий)

  • Message broker (RabbitMQ, Kafka, AWS SNS/SQS)
  • Передаёт события от издателей подписчикам
  • Буферизация, гарантия доставки

3. Event Subscriber (подписчик событий)

  • Сервис, который слушает события
  • Реагирует и выполняет свою логику
  • Может публиковать новые события

4. Event Schema (схема события)

  • Структура данных события
  • Версионирование для совместимости
  • Документирование в AsyncAPI

Примеры хореографии в e-commerce

Сценарий: Создание заказа

  1. UI отправляет заказ в Orders сервис
  2. Orders сервис сохраняет заказ
  3. Orders публикует OrderCreated
  4. Inventory слушает и уменьшает сток
  5. Inventory публикует InventoryReserved
  6. Payment слушает и берёт платёж
  7. Payment публикует PaymentProcessed
  8. Shipping слушает и создаёт доставку
  9. Shipping публикует ShippingStarted
  10. Notification слушает все события

Преимущества хореографии

  • Decoupling — сервисы не зависят друг от друга
  • Масштабируемость — легко добавить новый сервис
  • Flexibility — каждый сервис имеет полный контроль
  • Resilience — падение одного не влияет на других
  • Event sourcing — история всех событий фиксируется

Недостатки хореографии

  • Сложность отладки — трудно отследить flow событий
  • Distributed tracing — нужны специальные инструменты
  • Testing — тестирование асинхронных flow'ов сложнее
  • Consistency — eventual consistency требует обработки
  • Non-obvious flow — логика разбросана по сервисам

Паттерны в хореографии

1. Event Sourcing

  • Все изменения хранятся как события
  • Source of truth — лог событий
  • Можно реплей'ить

2. SAGA (Sagas)

  • Распределённая транзакция
  • Каждый шаг — сервис с компенсирующей операцией
  • При ошибке откатываются все шаги

3. Outbox Pattern

  • Сервис записывает событие в своей БД
  • Отдельный процесс публикует в брокер
  • Гарантирует at least once доставку

4. Dead Letter Queue (DLQ)

  • События, которые не удалось обработать
  • Специальная очередь для retry'я
  • Предотвращает потерю данных

Инструменты для хореографии

  • Kafka — высокопроизводительный event streaming
  • RabbitMQ — надёжный message broker
  • AWS SNS/SQS — управляемые сервисы в облаке
  • Google Pub/Sub — масштабируемое pub/sub
  • Azure Service Bus — enterprise message broker

Best Practices

  • Используй AsyncAPI для документирования событий
  • Версионируй события (добавляй version в payload)
  • Логируй все события для audit trail
  • Используй correlation ID для отслеживания
  • Обрабатывай ошибки и retry логику явно
  • Мониторь очереди и latency
  • Тестируй через интеграционные тесты

Хореография — мощный паттерн для масштабируемых microservices.