Skip to content

Temporal

在这篇文章中

信息

Temporal 是一个用于构建可靠分布式应用程序的开源平台。它解决了现代开发中的一个关键挑战:在不稳定的环境中确保关键流程的执行。它允许开发人员专注于业务逻辑,而不是处理基础设施故障。

Temporal 主要功能

  • 工作流编排: 提供长时间运行的业务流程的稳健执行。自动处理故障和重试,保证任务完成。
  • 分布式事务: 确保在不同服务之间一致地执行操作,而无需使用分布式锁。
  • 超时和调度: 允许设置定时器和调度任务,即使对于长时间运行的流程也能保持高精度。
  • 可扩展性: 支持水平扩展以处理高负载。组件可以独立扩展。
  • 历史调试: 保留流程执行的历史记录,便于分析和调试工作流。
  • 版本控制: 支持在不中断运行中的任务的情况下安全更新工作流。
  • 可观测性: 与监控和跟踪系统集成,以便控制应用程序。
  • 多租户: 为多个团队或应用程序提供隔离和资源管理。

部署功能

ID 软件名称 兼容操作系统 虚拟机 物理机 vGPU GPU 最低CPU(核) 最低内存(GB) 最低硬盘(GB) 自定义域名 是否启用
266 Temporal Ubuntu 22.04 + + + + 2 2 30 订购
  • 预装依赖项:
    • Docker;
    • Git(用于克隆存储库)。
  • 附加组件:
    • Nginx(用于反向代理);
    • Postgresql(数据库);
    • Elasticsearch(用于工作流历史记录存储);
    • Grafana(用于监控);
    • Prometheus(用于指标收集);
    • Jaeger(用于分布式跟踪);
    • OpenTelemetry Collector(用于遥测收集)。
  • 项目目录:/root/docker-compose
  • 自定义文件:/root/docker-compose/docker-compose-multirole_edited.yaml

具有 Web 界面的主要组件:

名称 本地地址和端口 外部地址
Temporal UI localhost:8080 https://temporal{server_id_from_invapi}.hostkey.in
Grafana localhost:8085 https://temporal{server_id_from_invapi}.hostkey.in/grafana/
Prometheus localhost:9090 https://temporal{server_id_from_invapi}.hostkey.in/prometheus/
Prometheus Metrics - https://temporal{server_id_from_invapi}.hostkey.in/prometheus/metrics

部署 Temporal 后的入门指南

付款后,服务器就绪的通知将发送到您注册的电子邮件地址。其中将包含 VPS IP 地址和登录凭据以进行访问。我们公司的客户通过 服务器管理面板和 APIInvapi 管理硬件。

点击 webpanel 标签中的链接后,将打开授权窗口。

授权数据可以在服务器管理面板的 Configuration >> Tags 选项卡或发送的电子邮件中找到:

  • 通过 Web 界面访问 Temporal 管理面板的链接:在 webpanel 标签中;
  • LoginPassword 用于管理服务器:在服务器交付时通过电子邮件提供。

主屏幕和导航

点击 webpanel 标签中的链接后,将打开 Temporal Web 界面:

Temporal UI

主屏幕显示所选命名空间中的工作流列表 (Workflows)。消息“No Workflows running in this Namespace”表示当时没有活动进程。

界面的主要元素:

  • 左侧的 Sidebar 提供对系统不同部分的访问;
  • Top bar 显示当前命名空间(默认为“default”);
  • 右上角的 Start Workflow 按钮用于启动新进程;
  • Process table 包含 Status、Workflow ID、Run ID、Type、Start、End 列。

功能能力

  1. 启动新的工作流进程

    • 点击右上角的 Start Workflow 按钮;
    • 在出现的表单中填写必要的参数;
    • 确认进程创建。
  2. 查看和过滤进程

    • 使用 Filter 按钮根据各种条件选择进程;
    • 从表中选择任何进程以查看详细信息。
  3. 代码示例

    • 通过 GitHub 存储库链接访问集成示例:
    • samples-go - Go 示例;
    • samples-java - Java 示例;
    • samples-typescript - TypeScript 示例;
    • samples-python - Python 示例;
    • samples-dotnet - .NET 示例;
    • samples-php - PHP 示例。
  4. 更改设置:

    • 右上角的 UTC 选择器用于更改时区;
    • (Gear) 按钮用于访问额外的界面设置。

典型用例:

  • 监控进程:定期检查运行中任务的状态;
  • 调试:在发生故障时详细分析错误;
  • 管理工作负载:启动、暂停和取消进程;
  • 开发新进程:使用代码示例创建自定义工作流。

备注

有关使用 Temporal 的详细信息,请参阅 官方开发人员文档

使用 Go 测试 Temporal(可选)

信息

以下是安装必要组件并使用 Go 中的 Saga 模式示例测试 Temporal 的过程。此测试展示了平台可靠执行长生命周期业务流程并自动处理故障的关键能力。Saga 模式通过补偿操作机制解决了分布式系统中的事务原子性问题。

1. 安装 Go

在开始测试之前,在服务器上安装 Go:

更新包列表

apt update
安装依赖项

apt install -y wget git curl
下载最新版本的 Go(截至本文撰写时为 1.22.1)

wget https://golang.org/dl/go1.22.1.linux-amd64.tar.gz
将存档解压到 /usr/local

tar -C /usr/local -xzf go1.22.1.linux-amd64.tar.gz
设置环境变量

echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
echo 'export GOPATH=$HOME/go' >> ~/.bashrc
echo 'export PATH=$PATH:$GOPATH/bin' >> ~/.bashrc
在当前会话中激活更改

source ~/.bashrc
验证安装

go version

2. 克隆 Temporal 示例存储库

进入主目录

cd ~
克隆 Go 示例存储库

git clone https://github.com/temporalio/samples-go.git
导航到示例目录

cd samples-go

3. 使用 Saga 示例进行测试

Saga 模式用于管理分布式事务,确保在发生错误时能够回滚(补偿)。

Saga 示例的结构

saga/
├── worker/main.go     # 处理任务的 Worker 进程
├── start/main.go      # 初始化 Worker 进程
├── activity.go        # 动作定义(取款/存款)
├── workflow.go        # 动作序列定义
└── shared.go          # 通用定义

运行测试:

  1. 启动 Worker(在第一个终端中执行):

    cd ~/samples-go
    go run saga/worker/main.go
    
    Worker 将向 Temporal 注册并等待任务。将出现有关尝试获取任务的日志消息。

  2. 启动 Starter(在第二个终端中执行):

    cd ~/samples-go
    go run saga/start/main.go
    
    Starter 启动从一个账户向另一个账户转账的过程。

预期结果:

在 Worker 的日志中,您将看到:

  1. 从账户 001-001 取款;
  2. 向账户 002-002 存款;
  3. 在 activity StepWithError 中专门创建的错误;
  4. 三次尝试执行有故障的 activity;
  5. 启动补偿操作:
    • 将资金返回到原始账户;
    • 取消取款。

4. 通过 Temporal Web 界面验证结果

  1. 在浏览器中打开 Temporal Web 界面(通过 webpanel 标签);
  2. 在界面中,找到 ID 为 transfer-money-workflow 的工作流;
  3. 您将看到工作流的完整执行历史记录,包括所有活动和补偿操作:

信息

在 Temporal Web 界面中,您将看到 transfer-money-workflow 的状态为 "Failed"。这并非测试配置或执行中的错误,而是 Saga 示例的预期行为。此示例专门设计用于演示在遇到错误时的补偿机制。activity StepWithError 在执行取款和存款操作后故意生成错误,演示如何启动补偿操作。在此示例中,“Failed”状态表示补偿机制正常工作,系统在检测到错误后恢复到一致状态。

通过 API 订购 Temporal 服务器

question_mark
Is there anything I can help you with?
question_mark
AI Assistant ×