任务队列和工作程序(worker)是紧密耦合的组件。

Tasks

任务是工人是在 Workflow Execution or Activity Execution.中需要处理的上下文
有两种类型的任务:

任务队列

任务队列是轻量级的,动态分配的,供一个或者多个 Workers 轮询 Tasks.

有两种类型的任务队列, Activity Task QueuesWorkflow Task Queues。不过这两个队列可以有同样的名字

Task Queue component
任务队列是非常轻量级的组件。

  • 任务队列不需要显式注册,而是在工作流执行或活动生成时或工作进程订阅时按需创建。
  • Temporal Application 可以维护的任务队列数量没有限制。

工作人员通过同步RPC轮询任务队列中的任务。此实现提供了几个好处:

  • 工作进程不需要有任何开放端口,这样更安全。
  • 工作进程不需要通过DNS或任何其他网络发现机制来通告自己。
  • 当所有工作进程都关闭时,消息只会保留在任务队列中,等待工作进程恢复。
  • 工作人员仅在消息有备用容量时处理其轮询,避免自身过载。
  • 实际上,任务队列可在大量工作进程之间实现负载平衡。
  • 任务队列支持服务器端限制,使您可以将任务调度速率限制在工作进程池中,同时在出现峰值时仍支持更高的任务调度。
  • 任务队列启用我们所说的任务路由,即将特定任务路由到特定工作进程甚至特定进程。

监听给定任务队列的所有工作人员必须具有相同的活动和/或工作流注册。一个例外是在服务器升级期间,可以在二进制文件滚动更新的时候不匹配。

:::info 注意:任务队列没有任何排序保证。如果有一个积压的任务在那段时间没有耗尽,那么这个任务可能会在队列中停留很长时间。 :::

粘性执行

粘性执行是指工作实体缓存工作流执行事件历史记录和监听的专用任务队列。

在工作实体完成工作流任务链中用于工作流执行的第一个工作流任务后,将执行粘性执行。

工作实体缓存工作流执行事件历史记录,并去转有的工作队列开始轮询更新而不是整个事件历史记录的工作流任务。

如果工作实体没有在适当的时间内从专用任务队列中提取工作流任务,则群集将恢复在原始任务队列上调度工作流任务。然后,另一个工作实体可以恢复工作流执行,并可以为将来的工作流任务设置为粘性执行方式。

粘性执行是 Temporal Platform 的默认策略。

任务路由

任务路由是指任务队列与一个或多个工作进程配对时,主要用于活动任务执行。

在某些用例 (例如文件处理) 中,活动任务必须路由到特定的工作进程。例如,假设您有一个包含以下三个独立活动的工作流:

  • 下载文件。
  • 以某种方式处理文件。
  • 将文件上传到其他位置。

下载文件的第一个活动可能发生在任何主机上的任何工作线程上。但是,第二个和第三个活动必须由第一个活动下载文件的同一主机上的工作人员执行。
在现实场景中,您可能有许多工作进程扩展到许多主机上托管。您需要开发基于 Temporal 应用程序,以便在需要时将任务路由到特定的工作流程。
代码示例:

Workers

在日常对话中,术语 Worker 可以表示Worker程序、Worker进程或Worker实体。Temporal 文档将在下面明确区分它们的概念。

Worker Program

工作程序是定义工作进程约束的静态代码,使用 Temporal SDK 提供的api开发的程序。

Related 📚

Component diagram of a Worker Process and the Temporal Server
工作流进程负责轮询任务队列,任务出队后执行对应的工作代码,并将结果上报给 Temporal Cluster。

更正式地说,工作进程是实现任务队列协议和任务执行协议的任何进程。

Temporal应用程序开发人员负责开发工作程序和操作工作流程。工作进程在 Temporal 集群外部。在我们的许多教程中,我们向您展示了如何在同一台计算机上同时运行一个 Temporal 集群和一个工作线程以进行本地开发。然而,生产级 Temporal应用通常有一个
Worker 阵列【我理解是 worker 集群】所有工作进程都在临时群集外部的主机上运行。Temporal 应用程序可以根据需要具有尽可能多的工作进程。

工作进程可以同时托管工作流工作进程和活动工作进程。许多 sdk 支持在单个工作进程中拥有多个工作实体的功能。(不同 sdk 的工作实体创建和管理不同。)单个工作实体只能监听单个任务队列。但是,如果一个工作进程具有多个工作实体,则该工作进程可能正在监听多个任务队列。

工作进程、任务队列和任务的实体关系图 (元模型)
执行活动任务的工作进程必须有权访问执行活动定义中定义的操作所需的任何资源,例如:

  • 外部API调用的网络访问连通性。
  • 基础设施配置的凭证【ssh 啥的】。
  • 机器学习实用程序专用 gpu。

Worker Entity

工作线程实体是 Worker Process 中侦听特定任务队列的单个工作线程。

工作实体在单个任务队列上侦听和轮询。工作线程实体包含 Workflow worker 和 Activity worker,以便它可以执行工作流执行或活动执行。