Netflix Conductor:一个微服务编制引擎

阅读数:4514 2016 年 12 月 25 日

话题:开源DevOps架构

Netflix 开发了一个叫“Conductor”的编制引擎,已经在内部生产环境中使用了一年了。在这段时间里,Netflix 已经运行了大约 260 万个处理工作流,包括简单的线性工作流,以及运行数天的动态工作流。现在 Netflix 开源了 Conductor,所有对工作流编制感兴趣的人都能使用它。

根据 Netflix 的Conductor 开发文档的描述,这个引擎包含以下几个主要特性:

  • 能够构建复杂工作流
  • 能够通过微服务执行任务
  • 使用 JSON DSL 描述的工作流蓝图
  • 执行过程可见、可跟踪
  • 能够暂停、恢复、重启、停止任务
  • 任务执行通常是异步的,也可以强制同步执行
  • 处理工作流能够扩展到百万级别

Conductor 的架构图如下:

conductor-architecture

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)关注我们。