Temporal工作流平台简介¶
工作流平台的需求¶
在微软的 Azure
云计算产品中,有一个 Azure Durable Functions 提供了serverless计算环境(通常可以对标Kubernetes)中编写有状态函数(stateful functions)。作为Azure云的函数计算扩展, Durable Fuctions
可以实现函数编程模式来定义有状态工作流:
状态管理
自动检测点(Automatic checkpointing)
无人值守重启
实际上云计算的这类持久化函数(Durable Fuctions)是一种有状态服务的工作流,已经是商业应用的常见功能。不过,各个云厂商的serverless都是深度绑定平台,无法灵活跨云或者用于开源的Kubernetes。
temporal.io 推出了开源的工作流平台 Temporal工作流平台 ,能够面向程序员开发出解决三大场景应用:
多重步骤: 多个相关动作朝向一个共同目标运行
分布式: 跨多个服务器和服务的操作,在分布式系统中协作
任意长度: 工作流的时间跨度可以秒级,也可以跨越数天或者数年
在现实中,众多的操作有人为触发也有定时任务触发,分散在不同的体系和平台中,需要精确编排才能协作完成工作流,所以需要一个可靠的、一致性的、正确的工作流来及解决不同数据结构的业务串联。
Temporal工作流平台 作为开源工作流提供了通用编程SDK和负责状态管理、事件处理的后端服务。每个工作流都是一个内聚函数(cohesive function),通过提供的构建块定义整个场景
定义¶
Temporal¶
按照 Temporal官方定义 : Temporal 是一种可扩展、可信赖、可重入的流程运行时( a scalable and reliable runtime for Reentrant Processes
),称为 Temporal Workflow Executions
:
Temporal Application¶
Temporal Application
一组 Temporal Workflow Executions
,每个 Temporal Workflow Executions
在本地状态独占访问,在分布式系统中所有 Temporal Workflow Executions
并发执行,并通过消息传递(message passing)与其他 Workflow Executions
和环境进行通信。
Reentrant Process¶
Temporal Workflow Execution
是一个可重入流程(Reentrant Process): 可继续(resumable),可恢复(recoverable),可反应(Reactive)
可继续(resumable): 流程可以暂停执行直到可以运行时继续执行的能力
可恢复(recoverable): 流程因1故障暂停执行可以在故障消除后继续执行的能力
可反应(Reactive): 流程对外部事件做出相应反应的能力
总之: Temporal Workflow Execution
定义了工作流函数, 只需要执行一次 ,无论代码执行数秒还是数年,也无论负载大小或是否存在故障。
Temporal SDK¶
Temporal SDK是特定开发语言的API库,支持:
Go SDK
Java SDK
PHP SDK
Python SDK
TypeScript SDK
正在开发的SDK:
.NET
Rust
Ruby
第三方SDK:
Clojure
Scala
Ruby
Temporal Client¶
Temporal客户端可以执行:
获取工作流执行的结果
列出工作流执行
查询工作流执行
发出工作流执行信号
启动工作流执行