|

Conductor: Scalable Workflow Orchestration for Modern Microservices (Born at Netflix, Powered by the Community)

If you’ve ever stared at a tangle of services, queues, and APIs and thought, “There has to be a better way to make these systems work together,” you’re not alone. As microservices and event-driven architectures grow, coordinating them becomes the real challenge. That’s where Conductor shines.

Originally built at Netflix and now actively maintained by the team at Orkes and a passionate open-source community, Conductor gives you a flexible, resilient engine to orchestrate distributed, asynchronous workflows—without tightly coupling your services. In this guide, we’ll unpack what Conductor is, why teams use it, and how to get hands-on in minutes.

Here’s the promise: by the end, you’ll know exactly how to compose fault-tolerant workflows, run Conductor locally with Docker, and ship orchestration that scales cleanly with your architecture.

Let’s dig in.

What Is Conductor? The Short, Clear Version

Conductor (often called Netflix Conductor) is an open-source orchestration engine for microservices and event-driven workflows. Think of it as a conductor in an orchestra: it doesn’t play the instruments (your services) but ensures they play together—on time, in the right order, with graceful handling when something misfires.

  • You define workflows in JSON (workflow-as-code).
  • Conductor coordinates tasks across services, APIs, and systems.
  • It supports asynchronous, long-running processes with durable state.
  • You get retries, fallbacks, timeouts, versioning, and observability out of the box.

Here’s why that matters: orchestration gives you a single source of truth for complex interactions. Instead of burying business logic across services and queues, you elevate the “when/what/if” logic into a durable, debuggable workflow.

If you’re new to orchestration vs. choreography, this primer helps: Orchestration vs. Choreography (microservices.io) and Netflix’s deep dive: Conductor: A Microservices Orchestrator (Netflix Tech Blog).

Key Benefits: Why Teams Choose Conductor

  • Resilience built in
  • Automatic retries, backoff, and error handling.
  • Fallback paths and compensation steps to recover gracefully.
  • Scales with you
  • Designed for high throughput and complex workflows in production.
  • Horizontal scalability across workers and services.
  • Clear observability
  • Track every run with a history of state transitions.
  • Built-in UI for visualizing workflow graphs and debugging.
  • Easy integration
  • Compose HTTP calls, events, sub-workflows, and more.
  • Integrate with microservices, external APIs, and legacy systems.
  • Faster iteration
  • Version workflows independently of service releases.
  • Ship new workflow versions without breaking old runs.

In short: Conductor reduces orchestration complexity so developers can focus on building services—not glue code.

Core Features You’ll Use Every Day

  • Workflow-as-code in JSON
  • Versioning and change control like any other artifact.
  • Promote safely from dev → test → prod.
  • Rich task types
  • HTTP tasks (call REST APIs), JSON transformations, Lambda (inline expressions), Sub-Workflow, Event tasks for event-driven steps, and more.
  • Extend with your own workers written in Java, Python, JavaScript/TypeScript, Go, or C#.
  • Dynamic workflow management
  • Decouple workflow logic from service releases.
  • Add/modify routes, decisions, or retries without redeploying everything.
  • Built-in UI
  • Inspect runs, drill into errors, and recover with confidence.
  • Pluggable persistence and index
  • Redis, Postgres, MySQL for persistence.
  • Elasticsearch 7.x or OpenSearch 2.x for indexing and search.

How Conductor Works (Architecture in Plain English)

At a high level:

  • Conductor Server: The API and orchestration brain. It stores workflow state, schedules tasks, and manages lifecycle.
  • Persistence: Stores durable state (Redis by default; also supports Postgres/MySQL).
  • Indexing/Search: Elasticsearch 7.x or OpenSearch 2.x for querying workflows and tasks.
  • Workers: Your code that polls for tasks from Conductor (for custom tasks). Some tasks (like HTTP) are system tasks executed by Conductor directly.
  • UI: A web console to create, inspect, and manage workflows.

Conductor coordinates; your services execute. This separation gives you clean boundaries and testable workflows.

When to Use Conductor (And When Not To)

Great fits: – Long-running, asynchronous processes (minutes to days). – Business processes with branching logic and retries—like order processing, user onboarding, risk checks, or transactional sagas. – Multi-step API automations—fan-out/fan-in, conditional steps, and compensating actions. – Event-driven flows that must pause until an event arrives or a manual signal occurs.

Less ideal: – Pure batch ETL where tools like Airflow are a better conceptual fit. – Ultra-low-latency, single-call flows where orchestration overhead adds little value.

If you’re orchestrating microservices and external APIs, Conductor is in its element.

Get Started Fast with Docker

You can spin up Conductor locally in minutes.

Requirements: – Docker Desktop (Mac/Windows/Linux). If needed, start here: Docker Compose docs. – Java 17+ (for local development and building): Adoptium Temurin JDK 17 – Node 14 (only if you plan to build the UI from source)

Quick start: 1. Clone the repo: – git clone https://github.com/conductor-oss/conductor 2. Change into the directory: – cd conductor 3. Start with Docker Compose (recommended for local): – docker compose -f docker/docker-compose.yaml up 4. Open the UI: – http://localhost:8127 5. Call the REST API: – http://localhost:8080

Tip: If ports are busy, update the compose file or stop conflicting services.

Create Your First Workflow (Two Paths: UI or API)

You can define workflows in JSON and register them via UI or REST. Let’s build a tiny example that calls a public API.

Workflow idea: Make a simple HTTP GET to fetch data.

Sample workflow definition (save as workflow.json if using the API): – name: hello_world_http – version: 1 – tasks: – type: HTTP – calls https://httpbin.org/get

JSON: – name: “hello_world_http” – version: 1 – schemaVersion: 2 – tasks: – type: “HTTP” – name: “http_example” – taskReferenceName: “get” – inputParameters: – http_request: – method: “GET” – uri: “https://httpbin.org/get”

Register the workflow: – Using the UI: – Go to Definitions → Workflows → Create – Paste the JSON – Using the API (example with curl): – curl -X POST http://localhost:8080/api/metadata/workflow -H 'Content-Type: application/json' -d @workflow.json

Start a workflow: – UI: – Workflows → Execute → choose hello_world_http → Start – API (curl): – curl -X POST 'http://localhost:8080/api/workflow/hello_world_http?version=1' -H 'Content-Type: application/json' -d '{}'

Check the run: – Open the UI → Executions → click into the workflow to see graph and task details.

Note: HTTP is a system task executed by Conductor. For custom business logic, you’ll write a worker that polls a task queue and completes tasks back to Conductor. The SDKs make that simple (more below).

System Tasks vs. Worker Tasks (What Runs Where?)

  • System tasks (e.g., HTTP, EVENT, SUB_WORKFLOW, LAMBDA, JSON) run inside Conductor or via built-in integrations. No external worker needed.
  • Worker tasks are custom tasks you define and implement in your language of choice. Workers poll Conductor for work and return the result.

This split keeps common orchestration primitives fast while letting you extend the platform with business-specific logic.

Building Conductor From Source (If You Prefer Local Builds)

Want to build and run Conductor as a standalone Java application?

  • Clone the repo: git clone https://github.com/conductor-oss/conductor
  • Ensure JDK 17+ is installed.
  • Build: ./gradlew clean build
  • Configure databases, queues, and environment as needed (see docs).
  • Run the server with your chosen configuration properties.

Refer to the “Building Conductor From Source” guide in the repo for current instructions and flags.

Databases and Indexing: What to Use and When

By default: – Persistence: Redis – Index/Search: Elasticsearch 7.x

Other supported backends: – Postgres – MySQL – OpenSearch 2.x (indexing) — if you use OpenSearch, ensure you comment out Elasticsearch imports to avoid Lucene conflicts during build.

Common configurations: – Redis + Elasticsearch 7: config-redis.properties – Postgres: config-postgres.properties – Postgres + ES7: config-postgres-es7.properties – MySQL + ES7: config-mysql.properties

Which should you choose? – Redis + ES7: great for local dev and many prod scenarios. – Postgres/MySQL: if you prefer relational persistence or existing operational expertise. – OpenSearch 2.x: use when your org standardizes on OpenSearch.

Helpful references: – Redis: redis.io – Elasticsearch 7.x: Elastic docs – OpenSearch 2.x: OpenSearch docs – Postgres: postgresql.org – MySQL: dev.mysql.com

Designing Great Workflows: Practical Patterns

A few patterns you’ll reuse often:

  • Saga with compensation
  • After a failure, run a compensating task (e.g., cancel reservation, issue refund).
  • Model using decision + fallback branches or a dedicated compensation path.
  • Fan-out/Fan-in
  • Run tasks in parallel, then join results downstream.
  • Conductor supports fork-join structures and parallelization.
  • Event-driven waits
  • Pause until an event (e.g., “KYC-approved”) arrives.
  • Use EVENT or WAIT tasks to avoid loops and polling.
  • Sub-workflows for reuse
  • Encapsulate recurring sequences like “send notification” or “verify identity.”
  • Versioned releases
  • Keep old workflow versions active for in-flight runs.
  • Register new versions for future executions without disruption.

For a great overview of why orchestration is powerful in microservices, check out Netflix’s original write-up: Conductor: A Microservices Orchestrator.

SDKs: Build Workers in Your Language

Conductor offers official SDKs so you can build workers, start workflows, and interact with the API cleanly.

  • Java SDK: Feature-rich and battle-tested.
  • Python SDK: Ideal for data teams and quick scripting.
  • JavaScript/TypeScript SDK: Great for Node.js services.
  • Go SDK: Lightweight and efficient for Go microservices.
  • C# SDK: Build .NET task workers.

You’ll find SDKs and examples linked from the main repo: conductor-oss/conductor on GitHub. Each SDK includes examples and API docs to help you bootstrap quickly.

Observability and Debugging: See the Whole Story

Conductor’s UI gives you the “what happened and when” view you’ve always wanted: – Visual DAG of your workflow run. – Task-level logs, inputs, and outputs. – Error details and retry history. – Manual controls to retry/terminate/resume runs (with permissions).

For production, pair with your logging/metrics stack and search workflows via Elasticsearch/OpenSearch. Many teams also expose selected workflow metadata to their BI tools for auditing.

Security, Versioning, and Team Practices

A few pragmatic tips: – Treat workflows like code – Keep JSON definitions in version control. – Use code reviews and tests before promoting changes. – Version intentionally – Avoid “breaking” changes in-place; register a new version. – Let in-flight runs finish on old versions. – Separate concerns – Keep business logic in workers; keep orchestration logic in workflows. – Secure endpoints – Protect Conductor’s API with your org’s auth and network policies. – Secure any HTTP task endpoints and secrets management. – Test failure paths – Simulate failures, timeouts, and retries. – Confirm compensations run as expected.

Roadmap and What’s Next

Conductor is an active open-source project with ongoing improvements from Orkes and the community. To see what’s planned: – Review milestones and issues on GitHub: conductor-oss/conductor issues – Watch the repo for releases and changelogs – Join community discussions (Slack/discussions linked from the repo)

You’ll often find enhancements around new task types, UI improvements, operational robustness, and ecosystem integrations.

Contributing: Your Path to Impact

The project welcomes contributions of all sizes. You can: – Report issues or request features: Open a GitHub issue – Contribute code: See the Contribution Guide in the repo and look for “good first issues” – Improve docs: Clear, current docs help everyone – Build an SDK or integration: Use the Swagger API from your local deployment to bootstrap

If you’ve ever wished orchestration behaved a certain way, here’s your chance to shape the tool you use.

Community and Support

You have options: – GitHub: conductor-oss/conductor – Community Slack: Find the invite link in the README and join the conversation – Orkes: Learn more about the team stewarding the project at orkes.io – Concept references: – Event-driven architecture overview: CNCF Glossary – Saga pattern for microservices: microservices.io

And of course: explore the examples in the repo to see workflows you can copy and adapt.

Frequently Asked Questions

Q: Is Netflix Conductor still open-source?
A: Yes. Conductor is open-source and actively maintained by the Orkes team and a growing community. The code lives at conductor-oss/conductor.

Q: What’s the difference between Orkes and Conductor?
A: Conductor is the open-source engine. Orkes is the company maintaining the project and contributing features, docs, and community stewardship. Orkes also provides commercial offerings, but the OSS engine remains free and community-driven.

Q: How does Conductor compare to Temporal or Airflow?
A: All three orchestrate workflows, but their sweet spots differ: – Conductor: JSON-based workflows, strong microservice orchestration and system tasks, REST-first, easy to integrate with existing services. – Temporal: Code-first workflows with durable state and strong polyglot SDKs; great if you want workflow logic embedded in application code. – Airflow: Excellent for batch/ETL and data engineering DAGs; task scheduling and dependency management for data pipelines. Choose based on your workflows (service orchestration vs. code-first vs. data pipelines).

Q: Can I run Conductor in Kubernetes?
A: Yes. Many teams deploy Conductor to Kubernetes with Helm or custom manifests. You’ll run the server, backing data stores (Redis/Postgres/MySQL), and indexing (ES/OpenSearch). Start with Docker locally, then containerize for your cluster.

Q: What databases and indexes are supported?
A: Persistence: Redis (default), Postgres, MySQL. Indexing: Elasticsearch 7.x or OpenSearch 2.x. Check the repo for configuration properties (e.g., config-redis.properties, config-postgres.properties).

Q: Does Conductor support long-running workflows?
A: Absolutely. Workflows can run for minutes, hours, or days. Conductor keeps state durable and provides resumability, retries, and timeouts.

Q: Can I model human-in-the-loop steps?
A: Yes. Use EVENT or WAIT-style patterns to pause a workflow until an action occurs (e.g., an approval). When your external system posts the event or callback, Conductor resumes the workflow.

Q: How do I evolve workflows without breaking in-flight runs?
A: Use versioning. Register a new workflow version for new executions; let existing runs finish on their original version. This avoids hard-breaking changes.

Q: Do I need to write all tasks as custom workers?
A: No. Conductor provides system tasks (HTTP, JSON, LAMBDA, SUB_WORKFLOW, EVENT, etc.). Use custom workers for business-specific operations your services must execute.

Q: Where can I find examples and SDKs?
A: Start at the main repo: conductor-oss/conductor. You’ll find examples, sample workflows, and links to language SDKs.

Final Takeaway

Conductor gives you a clear, scalable way to orchestrate microservices and event-driven systems—without tangling business logic across services. With workflow-as-code, resilient task handling, and a friendly UI, you can move faster, debug easier, and evolve safely.

Your next step: – Spin it up locally with Docker. – Register a simple workflow. – Add a custom worker in your preferred language.

When you’re ready for more, explore the repo, join the Slack community, and consider subscribing to updates from Orkes and the Conductor project to stay on top of new features and best practices.

Discover more at InnoVirtuoso.com

I would love some feedback on my writing so if you have any, please don’t hesitate to leave a comment around here or in any platforms that is convenient for you.

For more on tech and other topics, explore InnoVirtuoso.com anytime. Subscribe to my newsletter and join our growing community—we’ll create something magical together. I promise, it’ll never be boring! 

Stay updated with the latest news—subscribe to our newsletter today!

Thank you all—wishing you an amazing day ahead!

Read more related Articles at InnoVirtuoso

Browse InnoVirtuoso for more!