docs/devguide/architecture/index.md
This diagram showcases an overview of Conductor's system architecture:
In Conductor, workflows are executed on a worker-task queue architecture, where each task type (HTTP, Event, Wait, example_simple_task and so on) has its own dedicated task queue. The key components of Conductor’s core orchestration engine include:
By default, Conductor uses Redis as its data store, with Elasticsearch used for its indexing backend. These storage layers are pluggable, allowing you to work with alternative backends and queue service providers.
With a worker-task queue architecture, Conductor schedules and assigns tasks to its designated task queues based on its task type. Conductor follows an RPC-based communication model where task workers run on a separate machine from the server and communicate over HTTP-based endpoints with the server.
The workers employ a polling model for managing their designated queues, and update Conductor with the task status.
Each worker declares beforehand what task(s) it can execute. At runtime, task workers poll its designated task queue(s) to receive and execute scheduled work. Conductor passes task inputs to the worker for execution and collects the task outputs, continuing the process according to the workflow definition.
By default, workers infinitely poll Conductor every 100ms. The polling interval value for each type of worker can be adjusted accordingly based on factors like workload. Here is the polling mechanism in detail:
Conductor manages and maintains the workflow state, keeping track of which tasks have been completed and which are still pending. This ensures that the workflow is executed correctly, with each task triggered precisely at the right time.
Using the workflow ID, the application can check the Conductor server for the workflow status at any time. This is particularly useful for asynchronous or long-running workflows, as it allows the application to monitor the workflow's progress and take appropriate action, such as pausing or terminating the workflow if needed.