Flyte
Flyte 是一个面向数据管道、机器学习工作流和 AI 应用的工作流编排平台。
核心优势
使用原生 Python 编写工作流逻辑,同时获得生产系统级别的持久化、缓存、恢复和扩展能力。 尤其适合需要避免 DSL 表达限制、同时又要求可靠运行与规模化执行能力的数据与 AI 工作流。
核心定位
Flyte 的核心定位不是以另一套工作流语法替代 Python,而是在保留 Python 编程模型的前提下,为任务编排提供生产级的调度、持久化、恢复与扩展能力。
Pure Python, no DSL
Flyte 强调 “Pure Python, no DSL”:工作流定义直接采用 Python 任务与函数表达,无需额外引入专门的 DSL;工作流本身也可以视为一个由其他任务组合而成的 Python 任务。
注:DSL(Domain Specific Language,领域特定语言)如 SQL、Dockerfile 等。
它的核心思路可以概括为三点:
- 用普通 Python 函数组织任务、分支、循环和并发
- 把持久化、调度、缓存、恢复、扩展这些系统能力交给平台
- 避免开发者在“代码灵活性”和“生产可靠性”之间二选一
Flyte 可以理解为:保留 Python 的表达能力,同时补足生产级调度系统的可靠性。
可直接复用的 Python 能力
- 循环与条件分支:
for、while、if/elif/else - 错误处理:
try/except - 并发模型:
async/await - 第三方库:可直接
import使用
@env.task()
async def my_workflow(data: list[str]) -> list[str]:
results = []
for item in data:
if should_process(item):
result = await process_item(item)
results.append(result)
return results
Data Engineering 中的重要性
对数据工程而言,这一点尤为重要,因为真实工作流通常并非静态 DAG,而是会基于输入数据动态分支、循环与聚合。Flyte 的设计目标之一,就是避免在业务逻辑复杂化后重新受限于 DSL 的表达边界。
持久化(Durability)
Flyte 会自动持久化任务执行过程中的输入、输出和中间结果,通常存储到对象存储中。
这类机制通常带来以下收益:
- 可观测性:能看到每一步实际流过了什么数据
- 审计能力:可以追踪谁在什么时间、用什么参数运行了什么任务
- 数据血缘:可以从输出反查输入和上游过程
这些能力由平台默认提供,而不依赖手动编写日志或自行维护检查点。
可复现(Reproducibility)
Flyte 把“同样输入应当得到同样输出”视为工作流系统的重要能力。
它主要通过下面几类机制来保证可复现性:
- 确定性执行:相同输入应产生相同结果
- 任务缓存:输入一致时复用历史结果
- 容器版本化:代码运行环境固定,避免“本地能跑,线上不一样”
例如,可以为任务开启缓存:
@env.task(cache="auto")
async def expensive_computation(data: str) -> str:
...
当同一流程再次运行时,Flyte 会优先复用未变化步骤的缓存结果,而不是重新计算全部任务。
可恢复(Recoverability)
Flyte 的另一项关键能力是:失败后从断点继续,而不是从头重跑。
当工作流失败时:
- 已成功完成的任务结果会被保留
- 修复问题后,可以从失败点继续运行
- 通过
@flyte.trace可以在任务内部创建更细粒度的检查点
面向规模化执行
Flyte 把分布式执行中的常见困难封装到了平台层:
- 并行执行:可以用
asyncio.gather()表达并发 - 动态工作流:可根据运行时数据动态构建后续步骤
- 快速调度:通过复用容器降低任务启动开销
- 资源管理:可为任务声明 CPU、内存、GPU 等资源需求
这使开发者能够将关注点更多放在任务之间的业务关系上,而不是底层调度、容器启动与资源编排等平台细节。
适合场景
Flyte 适合如下场景:
- 数据管道较长,且中间结果需要保留
- ML / AI 工作流计算成本高,希望充分利用缓存
- 工作流运行时间长,失败后不能接受整条链路重跑
- 流程具有动态分支、循环或运行时生成任务的需求
- 需要较强的审计、血缘和可追踪能力
典型场景示例
例如,一条流程需要先批量处理上千个文件,再基于处理结果训练模型,最后将模型部署到线上。
在这类场景中,Flyte 的价值通常体现为:
- 文件处理失败后,可以在修复问题后从失败点继续运行
- 训练已经完成、但部署失败时,可以只重试部署阶段
- 对同一批数据重复运行时,可以通过缓存跳过未变化的计算
- 需要审计整个流程时,可以追溯每一步的执行记录与上下游关系
对于非常简单的定时脚本,Flyte 往往偏重;但在生产级数据平台、训练流水线或 AI 应用编排场景中,这些能力通常具有明显价值。