Ответ
Оба подхода описывают, как микросервисы взаимодействуют для выполнения бизнес-процесса, но делают это принципиально по-разному.
Аналогия:
- Оркестрация — это симфонический оркестр с дирижером. Дирижер (оркестратор) говорит каждому музыканту (сервису), когда и что играть.
- Хореография — это танцоры на танцполе. Каждый танцор (сервис) слушает музыку (события) и решает, как двигаться, реагируя на других, но без центральной команды.
Оркестрация (Orchestration)
Централизованный подход, где один сервис-оркестратор управляет всем процессом. Он отправляет команды другим сервисам и ждет от них ответа.
- Плюсы:
- Процесс явно описан в одном месте.
- Легче отслеживать и отлаживать.
- Минусы:
- Оркестратор становится единой точкой отказа.
- Сильная связанность (coupling) сервисов с оркестратором.
- Пример: Сервис
OrderProcessor
последовательно вызываетPaymentService
,InventoryService
иShippingService
.
Хореография (Choreography)
Децентрализованный подход, где сервисы взаимодействуют через события (events). Каждый сервис выполняет свою работу и публикует событие в общую шину (например, Kafka, RabbitMQ). Другие сервисы подписываются на интересующие их события и реагируют на них.
- Плюсы:
- Слабая связанность (loose coupling) — сервисы не знают друг о друге.
- Высокая отказоустойчивость и масштабируемость.
- Минусы:
- Сложно отследить весь бизнес-процесс, так как логика распределена.
- Требуется сложный мониторинг.
Пример кода (Хореография):
// OrderService публикует событие
eventBus.Publish("order.created", orderData)
// PaymentService слушает событие и реагирует
eventBus.Subscribe("order.created", func(data Order) {
// Логика обработки платежа...
// ... после успеха публикует свое событие
eventBus.Publish("payment.processed", paymentData)
})