Хореография — разработка систем, где взаимодействие между компонентами или службами происходит без единого центра управления, в качестве которого выступает оркестратор (его также называют Process Manager). Каждый компонент имеет свою роль и координирует общение с другими компонентами системы.
Хореография обычно используется в масштабируемых, устойчивых и гибких системах. Например, в абстрактной архитектуре микросервисов, где каждый компонент выполняет определенную функцию, взаимодействует с другими компонентами с помощью асинхронного обмена сообщениями и отвечает только за свою часть работы без привязки к глобальной задаче.
Управление компонентами происходит децентрализованно. Каждый из них самостоятельно решает, как реагировать на получаемые события или сообщения. Компоненты работают автономно, не полагаясь на внешнюю координацию. Они интерпретируют входящие сообщения и запускают соответствующие действия на основе своей внутренней логики. При этом связь между компонентами слабая и асинхронная, они взаимодействуют без сильной зависимости от реализаций друг друга и без необходимости немедленного реагирования на события или сообщения. Это способствует повышению гибкости и отказоустойчивости системы и облегчает обслуживание и масштабируемость.
Оркестрация — напротив, разработка систем, где взаимодействие между компонентами или службами происходит при координации центральным контроллером или оркестратором.
Оркестрация часто используется в распределенных системах, микросервисной архитектуре и облачных вычислениях для координации выполнения сложных задач и процессов, таких как проектирование, создание и предоставление услуг, автоматизация документооборота, выполнение распределенных транзакций и т. д.
Оркестратор или центральный контроллер определяет порядок выполнения задач и управляет их распределением между участниками системы. Порядок выполнения задач заранее определяется и настраивается в рамках процесса и может включать в себя последовательность шагов, условия выполнения и т. д. Оркестратор может отслеживать состояние выполнения процесса и реагировать на изменения, перераспределяя задачи, нагрузку или принимая решения на основе текущего контекста.