Choreography and orchestration are two different models for how distributed services can communicate with one another. In orchestration, communication is more tightly controlled. A central service coordinates the interaction and order in which services are invoked. Choreography achieves communication without tight control. Events flow between services without any centralized coordination. Many applications use both choreography and orchestration for different use cases.
Communication between bounded contexts is often how choreography is used most effectively. With choreography, producers don’t have expectations of how and when the event will be processed. Producers are only responsible for sending events to an event ingestion service and adhering to the schema. This reduces dependencies between the two bounded contexts. Often within a bounded context, you need to control the sequence of service integration, maintain state, and handle errors and retries. These use cases are better suited for orchestration.
Event buses such as Amazon EventBridge can be used for choreography, and workflow orchestration services like AWS Step Functions or Amazon Managed Workflows for Apache Airflow (Amazon MWAA) can help build for orchestration. Examples of how you may use choreography and orchestration together could include sending an event to trigger an AWS Step Functions workflow, followed by emitting events at different steps.