跳转至

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 能力

  • 循环与条件分支:forwhileif/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 应用编排场景中,这些能力通常具有明显价值。