2 - 理解 Temporal
Temporal 提供全新方式来构建可扩展且可靠的应用程序。
构建可靠的应用程序
复杂系统必然发生故障。软件工程师花费大量时间确保其构建的系统能承受潜在故障。Temporal 默认使代码执行变得可靠且持久。
通常情况下,如果发生崩溃,应用程序执行状态将丢失。应用程序对故障发生之前的情况没有任何记忆,因此需要大量的错误处理逻辑和复杂的恢复代码来恢复执行。该过程既耗时又容易出错,使确保可靠性变得困难。
Temporal 追踪应用程序的进度。如果出现诸如断电之类的问题,它能保证应用程序从中断的地方精确地恢复执行——就像拥有终极的自动保存功能。将故障管理的责任从应用程序卸载到平台,可以消除对大量恢复编码、测试和维护任务的需求。
持久执行
Temporal 是持久执行平台。持久执行通过保证应用程序运行至完成,确保应用程序在不利条件下仍能正确运行。这种转变简化开发流程。如果发生故障或崩溃,业务流程将无缝地持续运行,而不中断。开发者将其关注点转移到业务逻辑上,而非基础设施问题,从而构建天生具有可扩展性和可维护性的应用程序。
成千上万的开发者信任 Temporal,将其用于订单处理、客户引导和支付处理等使用场景,因为 Temporal 能构建可靠的应用程序——这些应用程序具有弹性、持久性,并且能稳定运行。使用 Temporal,无论发生什么,应用程序都将持续运行。
Temporal 应用程序:基础组件
Workflow
从概念上讲,工作流是一系列步骤的序列。日常生活中经常遇到工作流,无论是:
- 使用移动应用程序转账
- 预订假期
- 提交费用报告
- 创建新员工引导流程
- 部署云基础设施
- 训练 AI 模型
Temporal 工作流就是用代码定义的业务逻辑,概述流程中的每个步骤。
Temporal 不是无代码的工作流引擎——它是工作流即代码(Workflow-as-Code)。使用 Temporal 时,不是在可视化界面中拖放步骤,而是用编程语言、代码编辑器和其他工具以代码的形式编写工作流。无代码引擎最终将遇到其局限性,而 Temporal 则让开发者对业务流程拥有完全的控制力和灵活性。这使开发者能够精确地构建其所需要的东西。
Activity
Activity 是工作流中的独立工作单元。用函数或方法定义 Activity,具体取决于编程语言。Activity 通常涉及与外部世界的交互,比如发送电子邮件、发起网络请求、写数据库或调用 API,这些操作容易发生故障。可以直接在工作流代码中调用 Activity。
如果 Activity 失败,Temporal 将根据配置自动重试。由于 Activity 通常依赖外部系统,因此可能出现瞬时性问题,包括临时但关键的问题,比如网络故障、超时或服务中断。开发者可以完全控制每个 Activity 的重试频率和重试次数。
如果需要编排多个 Activity ,那么使用工作流。如果只需执行单个 Activity,那么使用独立 Activity。
独立 Activity 是由客户端直接启动的顶级 Activity 执行,无需使用工作流。
SDK
开发者像创建任何其他软件一样,通过编写代码创建 Temporal 应用程序。
Temporal SDK(软件开发工具包)是开源库,开发者可以将其添加到应用程序中。它提供在特定编程语言中构建工作流、Activity 以及各种其他 Temporal 特性所需的一切。
Temporal 提供七个 SDK:.NET、Go、Java、PHP、Python、Ruby、TypeScript。由于 Temporal 支持多种编程语言,因此多语言团队可以在不同语言之间进行混合搭配。开发者可以轻松地将任何 Temporal SDK 添加到当前项目中,并且无需更改已经使用的构建和部署工具。Temporal 能完美地融入现有技术栈。
Temporal 服务
Temporal 包括两个主要部分:
- 开发者编写的应用程序
- Temporal 服务(一组服务和组件)
Temporal 架构的核心是 Temporal 服务,它为应用程序提供持久性、可扩展性和可靠性。应用程序与 Temporal 服务进行通信,Temporal 服务负责监督诸如发起 API 调用等关键任务的执行,记录其完成情况。维护每个事件的详细历史记录,并且将其可靠地持久化到数据库中。
Temporal 服务的最大优势之一在于它如何处理故障。Temporal 服务维护工作流中每个步骤的详尽记录。通过保留工作流中每个步骤的历史记录,确保即使出现问题,工作流也能从最后成功的节点继续执行。Temporal 服务确切地知道从哪里恢复,而不丢失任何工作。这使开发者免于自己编写复杂的错误处理代码和费力的恢复机制。
可以在自己的基础设施上运行 Temporal 服务,也可以使用 Temporal Cloud——托管服务,负责处理运维开销,提供可扩展性和专家支持。
Worker
Temporal 真正的优势源自应用程序与 Temporal 服务的结合。当应用程序需要执行任务时,比如发送通知或处理支付,Temporal 服务负责编排需要完成的工作。Worker 是应用程序的一部分,由 Temporal SDK 提供,负责执行工作流中定义的任务。
Worker 轮询 Temporal 服务,查看是否有可用任务,Temporal 服务将任务与 Worker 进行匹配。Worker 根据任务中指定的详细信息,运行工作流代码。
部署 Activity Worker 后,可以以独立方式或从工作流内部进行调用。
这种协作对于构建可靠、可扩展和持久的应用程序至关重要。可以运行多个 Worker——通常几十个、几百个,甚至几千个——以提高应用程序的性能和可扩展性。
常见的误解是认为 Temporal 服务运行代码。事实上,Worker 运行代码,并且直接处理数据。Temporal 应用程序在设计上是安全的。工作流和 Activity 无缝部署在开发者的基础设施内,完全集成到应用程序中。数据也通过自己的加密库和密钥得以保护。开发者可以端到端地完全控制应用程序的安全性。
可视化
Temporal 提供两个查看幕后情况及与工作流进行交互的工具。这些工具对于调试用途非常有用,同时为应用程序提供实时监控。
Temporal UI
Temporal UI 是基于浏览器的用户界面,支持查看应用程序的进度。也被称为 Web UI,有助于快速隔离、调试和解决生产环境中的问题。

Temporal CLI
Temporal CLI 是用于管理、监控和调试 Temporal 应用程序的命令行界面工具。通过终端,可以:
- 启动工作流
- 追踪工作流的进度
- 取消或终止工作流
- 以及执行其他操作
Temporal CLI 为开发者提供直接访问 Temporal 服务的途径,可用于本地开发。
事件历史(Event History)
使用 Temporal,工作流可以从崩溃中无缝恢复。这得益于事件历史——关于工作流执行生命周期中所发生一切的完整且持久的日志——以及 Temporal 服务在重放期间持久化存储事件的能力。
Temporal 使用事件历史记录所有步骤。当工作流定义发起 API 调用,执行 Activity 或启动计时器(Timer)时,工作流本身不直接执行操作,而是向 Temporal 服务发送命令(Command)。
命令是 Worker 在工作流任务执行完成后向 Temporal 服务发出的请求动作。Temporal 服务根据这些命令采取相应操作,比如调度 Activity 或调度计时器。这些命令随后被映射为持久化存储的事件(Event),以备故障恢复之需。如果 Worker 发生崩溃,那么它利用事件历史重放代码,将工作流执行的状态恢复到崩溃发生前的状态,然后从故障点继续执行,仿佛故障从未发生过一样。
像重力一样可靠
Temporal 提供持久性,使应用程序能够持续运行数天、数周甚至数年,即使底层基础设施发生故障也不会中断。这就是所谓的持久执行。Temporal 代表软件开发中的一次范式转变。不仅仅使现有模式变得更加可靠,而是采用全新方法,构建复杂的分布式系统。
Temporal 简化状态管理,开发者无需编写大量额外代码,处理每种可能出错的情况。凭借内置的可扩展性,Temporal 确保应用程序无论规模大小或复杂程度如何,都能平稳运行。