conductor

2025-12-25

java

今天所做之事勿候明天,自己所做之事勿候他人。——歌德

Conductor:源自 Netflix 的可扩展工作流编排引擎

当你的系统从“一个应用”演进为“几十上百个微服务 + 一堆事件”,你就会需要一个可靠、可观察、可伸缩的编排引擎,把这些复杂的流程组织起来。Conductor 正是为此而生——它最初由 Netflix 构建,用于管理分布式、异步的微服务与事件驱动工作流;如今由 Orkes 团队在社区中持续维护与发展。

  • 仓库主页:conductor-oss/conductor
  • 官方站点:Conductor OSS
  • README 永久链接(信息来源):README.md@aa7de92
  • 默认分支:main
  • 项目描述(仓库 Description):“Conductor is an event driven orchestration platform providing durable and highly resilient execution engine for your applications”
  • 许可协议:Apache 2.0

进一步了解 Netflix 的背景文章:Netflix Conductor: A Microservices Orchestrator


Conductor 是什么?

从官方 README 的定义与特性出发:

  • 它是一个面向分布式、异步场景的“微服务编排引擎”,将服务组合成复杂工作流,同时保持低耦合。
  • 支持事件驱动(Event-driven),可在高流量环境下稳定扩展(Scalable)。
  • 工作流以“代码”的方式定义(Workflow as code),采用 JSON,且支持版本化管理。
  • 内置可定制 UI,便于监控与管理工作流;同时提供丰富的任务类型(HTTP、JSON、Lambda、子工作流 Sub Workflow、事件 Event 等)。

你可以把它理解为“微服务世界的流程控制中心”,在其中定义任务节点、依赖、重试/回退、超时、分支与聚合等,系统就按你的流程可靠地执行。


为什么选择 Conductor?

README 列出了它的关键优势:

  • Resilience and Error Handling:内建重试与回退机制,让失败不再传播成雪崩。
  • Scalability:面向复杂工作流与高并发场景构建,横向扩展能力强。
  • Observability:提供工作流的监控与可视化调试,让问题可见可控。
  • Ease of Integration:微服务、外部 API、遗留系统,都能顺畅集成。

同时,它的“动态工作流管理”能力,支持工作流在不改动底层服务的前提下演进——你的服务可以照常迭代,编排层面独立升级。


特性速览

  • Workflow as code:工作流用 JSON 定义、版本化管理
  • 丰富任务类型:HTTP、JSON、Lambda、Sub Workflow、Event 等
  • 动态工作流:编排独立演进,不和服务紧耦合
  • 内置 UI:可视化监控与管理
  • 灵活持久化与队列选型:Redis、Postgres、MySQL 等
  • 索引后端:默认 Elasticsearch 7.x,也支持 OpenSearch 2.x、Postgres、Sqlite

详见 README 的 FeaturesDatabase Specifications 部分。


快速上手

按照官方 README:

环境要求

  • Docker Desktop(MacWindowsLinux)
  • Java (JDK) 17 或更新版本
  • Node 14(用于构建 UI;更早版本可能可用,但未测试)

启动(本地推荐用 Docker Compose)

1
2
3
4
5
6
7
8
9
10
11
# 克隆仓库
git clone https://github.com/conductor-oss/conductor

# 进入目录
cd conductor

# (可选)安装自动格式化的 git hook
ln -s ../../hooks/pre-commit .git/hooks/pre-commit

# 启动服务
docker compose -f docker/docker-compose.yaml up

数据库与索引后端

默认持久化与队列:

  • Redis(standalone)

可选持久化:

  • Postgres、MySQL

默认索引后端:

  • Elasticsearch 7.x

可选索引后端:

  • OpenSearch 2.x、Postgres、Sqlite

对应配置文件(路径来自 README):


从源码构建

你也可以将 Conductor 作为独立 Java 应用构建与部署,按需配置数据库、队列与环境变量。参考 README 的“Build from source”(以及 docs 中的构建指南)。


SDK 一览(官方维护)

每个 SDK 都提供示例与详细 API 文档,便于在不同语言栈中集成 Conductor。


代码案例

下面的几个片段用于“演示工作流编排的思路”,以帮助理解 Conductor 的工作方式。它们不是仓库原文,请以官方文档和 README 为准。

1) 定义一个最简的工作流(JSON,示意)

工作流以 JSON 定义并版本化管理,包含任务节点及依赖关系。示例展示一个 HTTP 调用与事件驱动的串联。你可以在 UI 或通过 REST API 提交工作流元数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
{
"name": "sample_http_event_workflow",
"description": "Demo: call an HTTP service, then emit/await an event",
"version": 1,
"tasks": [
{
"name": "http_call_user_service",
"taskReferenceName": "http_user",
"type": "HTTP",
"inputParameters": {
"http_request": {
"method": "GET",
"uri": "https://api.example.com/users/123",
"timeout": 5000
}
}
},
{
"name": "publish_event",
"taskReferenceName": "pub_evt",
"type": "EVENT",
"inputParameters": {
"sink": "conductor:demo:event:user_fetched",
"payload": {
"userId": "${http_user.output.body.id}"
}
}
},
{
"name": "wait_event",
"taskReferenceName": "wait_evt",
"type": "EVENT",
"inputParameters": {
"sink": "conductor:demo:event:downstream_ready"
}
}
],
"schemaVersion": 2
}

说明:

  • type: "HTTP"type: "EVENT" 属于 README 提到的“丰富任务类型”范畴。
  • 事件任务可以用于发布或等待某个业务事件,从而实现解耦的编排。
  • 具体字段与用法以官方文档与 UI 引导为准。

2) 通过 Docker Compose 本地启动(来自 README)

1
2
3
docker compose -f docker/docker-compose.yaml up
# UI: http://localhost:8127
# API: http://localhost:8080

启动后你可以在 UI 中创建工作流,或使用你偏好的 HTTP 客户端与 API 交互(Swagger 可在本地环境访问)。


常见使用场景

  • 跨微服务的“业务流程”:下单 → 支付 → 库存 → 通知 → 风控,复杂但可编排
  • 异步/事件驱动系统:触发、聚合、等待、补偿
  • 可视化编排与运营:UI 中观察每个节点的状态、重试、人工干预与回退
  • 与遗留系统的集成:通过 HTTP、子工作流或事件桥接旧系统

这些能力都源于 README 所描述的“工作流引擎 + 丰富任务类型 + 低耦合 + 可观察”的组合。


社区与贡献

欢迎参与文档完善、代码贡献、或围绕 Conductor 的 SDK 构建与扩展(Swagger API 在本地环境可用)。


写在最后

Conductor 的价值在于把“复杂流程”变成“可管理的工作流”:任务、事件、重试、回退、并发与可观察,统统纳入编排视野。它既保留了工程师对“逻辑”的掌控,又避免了各微服务之间的硬编码耦合。这种“组织力”对现代分布式系统至关重要。

如果你要在微服务洪流中保有“清晰的流程图”,并让系统在高并发、失败与变更面前保持韧性,不妨用 Docker Compose 拉起来试试 UI,定义你的第一个 JSON 工作流,然后再逐步探索任务类型、持久化与索引后端的选型。Conductor 适配多种语言 SDK,也欢迎你在社区里分享实践心得——它是一个“工程师友好”的平台。

— 参考与原始信息: