翻译自 https://medium.com/netflix-techblog/netflix-conductor-a-microservices-orchestrator-2e8d4771bf40
Netflix 内容平台工程团队支撑了许多业务,这些业务流程由微服务任务异步驱动的。其中一些任务是持续数天的长流程。这些流程在为全球观众提供字幕方面发挥着至关重要的作用。
这些流程包括:
- Studio 合作伙伴内容集成
- 来自合作伙伴的基于 IMF 的内容集成
- 在 Netflix 中设置新标题
- 接收内容,编码和部署到 CDN
传统做法中,这些流程是临时编排的,使用 pub/sub(发布/订阅模型)组合起来,直接进行 REST 调用,并使用数据库来管理状态。然而,随着微服务数量和流程复杂度的增加,如果没有中央协调器,理解这些分布式工作流会变得非常困难。
我们将 Conductor 作为“编排引擎”构建,以满足以下需求,在应用程序中消除了模板,同时提供反应流:
- 使用基于 JSON DSL 的 Blueprint 定义执行流程
- 跟踪并管理工作流
- 能够暂停,恢复和重新启动流程
- 用户界面可视化处理流程
- 能够在需要时同步处理所有任务
- 能够扩展为百万级并发运行的流程
- 由客户端提取出来的的队列服务支撑
- 能够通过 HTTP 或其他方式操作,例如 GRPC
Conductor 旨在满足上述需求,现在已在 Netflix 使用了将近一年。迄今为止,它调度超过 260 万个工作流,包括从简单的线性工作流到运行多天的非常复杂的动态工作流。
在线 Conductor 已经在社区开源,我们希望 Conductor 可以服务于有类似需求的场景,并提升其能力。附上Conductor 的开发人员文档。
为什么不使用点对点编排
使用点对点任务编排很难随着业务需求和复杂度增长的而完成扩展。Pub/sub(发布/订阅模型)模型适用于最简单的流程,但是该方案的也存在一些问题,包括:
- 流程分散在多个应用程序的代码中