Оркестрация
В сценарии оркестрации Saga, централизованный сервис (часто называемый "оркестратор") управляет выполнением операций и обработкой ошибок. Вот как это обычно происходит:
- Запуск Saga: Оркестратор начинает Saga, запуская первую операцию. Это обычно делается путем отправки команды (сообщения) конкретному микросервису.
- Следующие шаги: После получения подтверждения о выполнении первой операции от микросервиса, оркестратор запускает следующую операцию, снова отправляя команду другому микросервису. Этот процесс повторяется, пока не будут выполнены все операции.
- Обработка ошибок: Если в любой момент Saga происходит ошибка (т.е., микросервис сообщает об ошибке или не отвечает), оркестратор начинает процесс отката. Он делает это, отправляя команды компенсационных действий микросервисам в обратном порядке выполнения. Эти компенсационные действия предназначены для "отмены" эффекта каждой операции.
- Завершение Saga: Когда все операции выполнены успешно, или все компенсационные действия выполнены после ошибки, Saga считается завершенной.
Ключевым моментом является то, что оркестратор имеет полный контроль над Saga. Он знает обо всех операциях, которые должны быть выполнены, в каком порядке, и какие действия следует предпринять в случае ошибки. Это делает оркестрацию отличным выбором для сложных транзакций, где порядок и точное управление критически важны.
Однако есть и недостатки, включая то, что оркестратор может стать узким местом и точкой отказа. Также это может привести к большей связанности между микросервисами, поскольку оркестратору необходимо знать детали каждого микросервиса для управления Saga.
Хореография
В подходе с хореографией в контексте паттерна Saga каждый микросервис определяет свои действия самостоятельно, основываясь на полученных событиях. Вот как это обычно работает:
- Запуск Saga: Первый микросервис начинает Saga, выполняя операцию и публикуя событие о ее завершении.
- Следующие шаги: Другие микросервисы, подписанные на это событие, реагируют на него, выполняя свои операции и публикуя свои собственные события о завершении. Этот процесс продолжается, пока не будут выполнены все необходимые операции.
- Обработка ошибок: Если в процессе выполнения Saga происходит ошибка, микросервис, столкнувшийся с ошибкой, публикует событие об ошибке. Другие микросервисы, которые подписаны на это событие, могут затем выполнить компенсационные действия (например, откатить свои операции).
- Завершение Saga: Когда все операции были выполнены успешно, или все компенсационные действия были выполнены после ошибки, Saga считается завершенной.
В подходе с хореографией каждый микросервис функционирует независимо, реагируя на события, которые для него имеют значение. Это приводит к меньшей связанности между микросервисами, поскольку они не нуждаются в знании деталей других микросервисов.
Однако хореография может быть сложной для управления и отладки, особенно в больших системах, поскольку нет централизованного сервиса, который бы отслеживал выполнение всей Saga. Вместо этого вам придется отслеживать цепочку событий в разных сервисах. Дополнительно, в подходе с хореографией может быть сложно обрабатывать ошибки и компенсировать их последствия, особенно если требуются сложные или многоступенчатые компенсационные операции.