Netflix 开发了一个叫“ Conductor ”的编制引擎,已经在内部生产环境中使用了一年了。在这段时间里,Netflix 已经运行了大约 260 万个处理工作流,包括简单的线性工作流,以及运行数天的动态工作流。现在 Netflix 开源了 Conductor,所有对工作流编制感兴趣的人都能使用它。
根据 Netflix 的 Conductor 开发文档的描述,这个引擎包含以下几个主要特性:
- 能够构建复杂工作流
- 能够通过微服务执行任务
- 使用 JSON DSL 描述的工作流蓝图
- 执行过程可见、可跟踪
- 能够暂停、恢复、重启、停止任务
- 任务执行通常是异步的,也可以强制同步执行
- 处理工作流能够扩展到百万级别
Conductor 的架构图如下:
API 和存储层都是可插拔的,允许使用不同的队列和存储引擎。Netflix 使用 Dynomite 做为存储方案,但也能够通过实现一个接口来转换成别的方案。
工作流中的任务分为两种类型: Worker,运行在远端机器上的用户任务;System,运行在引擎的 JVM 上的任务。后者是用来对 Worker 执行任务进行 branch、fork、join。Worker 任务通过 HTTP 或者 gRPC(基于 HTTP/2)和 Conductor 通信。
Netflix 决定开发一个编制(orchestration)而不是编排(choreography)引擎,是因为后者在他们的测试中扩展性不好。相关问题如下:
- 过程流被“嵌入到”多个应用的代码里
- 通常,在输入和输出、SLAs 等方面存在强耦合和假设,导致很难适应需求的变化
- 几乎没有办法系统地回答“某过程 X 完成了多少”?
Conductor 在 GitHub 上开源,使用 Apache License 2.0 许可。
查看英文原文: Netflix Conductor, an Orchestration Engine for Microservices
感谢薛命灯对本文的审校。
给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ , @丁晓昀),微信(微信号: InfoQChina )关注我们。
评论 1 条评论