В чем разница между оркестрацией и хореографией, их плюсы и минусы
Что проверяют
Умеете ли вы проектировать распределённый бизнес-процесс, где нет одной транзакции на все сервисы, и понимаете ли, чем платите за каждый вариант. Следом обычно просят нарисовать сагу оформления заказа и объяснить, как откатить шаг, если оплата не прошла.
Как отвечать
Дайте определения через ответственность за процесс:
- оркестрация: есть координатор, который знает весь сценарий, отправляет команды сервисам и ждёт ответов. Состояние процесса хранится в одном месте, поэтому видно, на каком шаге застрял заказ;
- хореография: координатора нет, каждый сервис подписан на события и публикует свои.
OrderCreatedслушает склад, послеStockReservedреагирует оплата, и так далее.
Оркестрация даёт явный сценарий, простую отладку и понятные компенсации, но в координаторе концентрируется бизнес-логика, и его легко превратить в «божественный сервис». Хореография даёт слабую связность и простое добавление подписчиков, но сценарий размазан по сервисам, циклические цепочки событий появляются незаметно, а ответить на вопрос «почему заказ завис» без распределённой трассировки почти невозможно.
В .NET это ложится на конкретные инструменты. Оркестрацию делают на state machine сагах MassTransit или сагах NServiceBus, на Azure Durable Functions, Dapr Workflow или Temporal. Хореографию строят на событиях через RabbitMQ, Kafka или Azure Service Bus. В обоих случаях нужен transactional outbox, иначе запись в базу и публикация события разъедутся, и идемпотентные потребители, потому что доставка почти всегда at-least-once.
Практичный вывод: короткие процессы из двух-трёх шагов удобно делать хореографией, длинные с компенсациями и таймаутами надёжнее оркестровать. В одной системе часто живут оба подхода.
Где спотыкаются
Называют оркестратор единой точкой отказа. Состояние саги лежит в базе, координаторов может быть несколько, реальная проблема в связности и разрастании логики.
Утверждают, что при хореографии падение сервиса ничего не ломает. Процесс всё равно остановится, просто заметить это будет сложнее.
Забывают про компенсации. Откат в саге это отдельная бизнес-операция вроде возврата денег, а не ROLLBACK.