工作流编排技术是现代企业级软件架构的重要组成部分,尤其在复杂的业务场景和大规模分布式系统中,合理设计和高效执行工作流能够保障系统的可靠性和扩展性。Uber作为拥有海量业务量和复杂技术架构的互联网公司,一直致力于打造高效且可扩展的工作流平台。近日,Uber宣布开源Starlark Worker,这一创新工具将Cadence工作流编排系统与Starlark脚本语言深度融合,极大地优化了工作流的定义和执行方式,成为业界关注的焦点。工作流编排平台在定义语言方面普遍存在两类方案:一类是基于声明式配置语言,例如JSON或YAML为基础的领域专用语言;另一类是采用通用编程语言,如Go或Java来表达具体的工作流逻辑。声明式语言直观简洁,适合描述简单流程,但随着业务复杂度提升,声明式配置往往难以支持复杂控制流,且配置文件庞大难以维护。通用编程语言则具备较强的表达力,适合灵活处理复杂逻辑,但需要遵循严格的可重放(replayable)模式,且工作流代码的每次变更都需重新部署执行环境,给多租户环境带来较大运维压力。
Uber基于这些挑战提出了Starlark Worker,将表达力强、灵活且安全的Starlark脚本语言引入Cadence工作流执行中,带来配置驱动式系统的简捷与脚本语言的自由度完美结合。Starlark是一种由Google开源的类Python脚本语言,具备确定性执行模型和沙箱安全机制,能确保工作流代码的可重放性并防止执行时发生意外副作用。Uber的Starlark Worker架构建立在Cadence坚实的基础之上,继承了Cadence在弹性扩展、故障容错、状态持久化方面的优势,同时结合Starlark简洁且富有表现力的语法,使开发者可以用熟悉的Python风格编写工作流定义。借助这种组合,用户不仅能够灵活设计复杂的条件分支、循环控制和数据转换,还能享受到无服务器(serverless)的便捷体验。一旦用户完成脚本编写,只需将.starlark文件压缩后提交给Cadence引擎,Cadence会将工作流分发给可用的Starlark Worker执行节点,无需重新部署任何服务器或Worker服务。这种方式极大降低了多租户环境下的运维难度,并提升了开发和迭代效率。
Starlark Worker的执行流程精妙结合了Cadence工作流引擎和Google开源Starlark Go语言解释器。工作流脚本文件被压缩上传后,Worker解压并调用内嵌的Starlark解释器执行代码,通过扩展的领域专用函数,与Cadence的核心功能和外部服务进行交互。这些扩展函数尤为关键,如sleep函数实现工作流暂停,uuid函数通过Cadence的SideEffect机制生成唯一标识,http.do函数则允许工作流中可靠地调用外部HTTP接口,且具备自动重试能力。开发者无需理解Cadence底层复杂原理,专注业务逻辑编写。Starlark的天生确定性特性与Cadence的可重放要求天然契合,避免了传统编程语言中需手动排除非确定性操作的潜在难题。同时,Starlark的Python风格语法降低了工程师和数据科学家的学习成本,让更多团队能够快速上手并参与工作流开发。
安全方面,Starlark的沙箱模型限制了工作流代码的外部访问权,适合支持多租户环境下的代码隔离和权限管理。Uber内部的经典应用场景是Michelangelo机器学习平台,多个团队定制各种MLOps工作流实现自动化流水线。典型的模型重训练工作流程涵盖启动训练任务、部署影子模型、数据收集和性能评估、人工审批决策以及根据结果部署生产模型等步骤。通过Starlark Worker,这些流程能够灵活编写并动态更新,避免了频繁调度和部署后台服务的繁琐流程。工作流脚本存储于对象存储系统,需要时直接提交至Cadence执行,支持快速迭代和高效调试。Starlark Worker还拥有良好的扩展能力。
用户可以通过Go语言实现自定义插件,为脚本语言注入特定领域的功能,从而进一步提升平台适用的业务广度。伴随着Cadence本身的弹性伸缩机制,Starlark Worker能够实现高并发、低延迟的工作流处理,适配Uber内部庞大的业务量,月执行量超百亿级。作为一种共享的托管服务,Starlark Worker极大减轻了用户对底层服务的管理负担,平台运维团队集中管理资源升级,用户专注于业务开发,效率与资源利用率双双提升。开源之后,Starlark Worker面向社区开放所有源码和示例,欢迎更多行业开发者探索、反馈和贡献。无论是机器学习平台、数据处理流水线,还是其他需要灵活、可靠工作流定义的应用场景,Starlark Worker都提供了一条既高效又安全的路径。总结来看,Uber开源的Starlark Worker充分发挥了Cadence工作流编排与Starlark脚本语言的优点,通过无服务器的多租户模式优化了开发体验,简化了迭代流程,提升了可维护性和可靠性。
它为企业级工作流编排提供了一个创新范式,促进了工作流开发从复杂部署到脚本化管理的转变,堪称现代分布式系统中的一大里程碑。期待未来这一平台在更多领域焕发光芒,与开源社区形成良性互动,共同推动工作流编排技术的持续进步。 。