部署组
部署组在 TCT 中用于管理执行器实例(任务应用实例),执行相同业务功能的执行器实例注册到同一个部署组中,在部署组中进行任务的调度(如广播、分片)执行,同时 TCT 通过部署组进行相关的权限控制。
注意,同一部署组中的执行器实例必须是功能相同的,即支持相同的任务类型,包含相同的内置任务。
部署组中主要涉及几个重要的属性:
- 并发数限制:用于指定该部署组下的执行器实例允许多少个任务同时执行。可以在创建部署组时配置该参数。需要特别注意的是,这里的并发限制并不是一个绝对严格的并发控制,在一些特殊场景下可能会略微偏离这个限制值,例如限制 100,可能某个特殊场景下运行中任务数为 101。因此对于并发数很敏感的场景不要通过它来做并发控制,例如期望严格控制并发数为 1 的场景。
- 支持任务类型:表明该部署组下的执行器实例支持哪种类型的任务,该属性不是创建部署组时指定的,而是部署组下的执行器实例上报的,执行器实例上报的时候会报告其支持的任务类型,例如支持 Python 脚本的执行器实例上必须具备执行 Python 的环境。
执行器
TCT 中任务最终由执行器执行,执行器是用户开发的业务应用,它通过 TCT SDK 和 TCT 进行交互,接受 TCT 调度的任务并且上报任务执行进度信息。
执行器启动的时候,TCT SDK 会将该执行器注册(执行器和服务端时钟偏移不能超过3分钟,否则会注册失败)到配置的部署组上,同时启动的时候会扫描该执行器中的内置任务(Java Bean,或者特定目录下的任务脚本)并上报给 TCT 服务端。
类型
执行器按照使用方式不同可以分为以下的两种类型:
- 专属执行器:用户通过 Java 开发好需要执行的任务,部署到部署组中,这些执行器(应用实例)只用于执行这些预置的 Java 任务。专属执行器可以是一个专门用于任务的应用,也可以在已有的服务中添加 TCT SDK 依赖并开发特定的任务,这样应用部署后照常提供之前的服务,但是额外多了这些任务的调度能力。专属执行器的好处是执行器只用于特定任务的执行,避免其他任务的干扰(例如资源占用),确保了隔离性和可靠性。
- 通用执行器:执行器也可以用于执行通用的任务,这时候执行器类似于执行任务的 Agent,我们既可以在执行器中包含 Java 开发的预置任务,也可以在特定目录中管理预置的 Python、Shell 等任务类型。同时除了这些预置的任务,也可以由 TCT 直接动态下发任务内容(如 Python、Shell 脚本)到这些执行器上执行。TCT 自带的默认部署中的 tct-worker 执行器就属于通用执行器。
标签管理
标签是附加在执行器实例上的键值对,用于指定对用户有意义且和执行器相关的标识属性。标签可以用于组织和选择执行器子集。执行器在启动的时候,可以通过配置项指定标签集合,也可以在 TCT 控制台上手动管理(添加、删除)执行器实例的标签。执行器的标签可以用于指定任务调度的调度策略,例如通过标签过滤执行器实例。
隔离/恢复

在某些情况下,我们会希望隔离部署组中的部分执行器实例,不让任务调度其中,例如需要对某个执行器实例进行运维(升级版本、调整资源等)或者下线。隔离后的执行器实例不会有新的任务再调度其上执行,但是已经调度的任务会继续执行。隔离的实例也可以在 TCT 控制台上进行恢复,恢复后执行器实例继续接受任务调度。
内置任务
内置任务是执行器启动时扫描到的任务,可以是在执行器代码中开发的 Java 任务,也可以是放在特定目录下的 Python、Shell 脚本。
默认部署组
TCT 自带了一个默认的部署组(default),并且自带了容器化方式部署的 3 个执行器(tct-worker),这些执行器可以执行任意类型的任务,包括内置的 Java、Shell、Python 任务以及动态下发的 Shell、Python 和外部任务。
通过它可以快速体验 TCT 的任务调度能力,该部署组是一个公共的部署组,所有用户都可见,从资源以及隔离的角度上考虑,它适用于简单的任务执行,不应作为大范围生产使用。
部署组类型
TCT 部署组

TCT 部署组是完全在 TCT 中进行管理的部署组(TCT 会负责 TCT 部署组的增删改查),在 TCT 控制台上我们可以创建一个部署组,然后将该部署组 ID 配置到执行器实例中,执行器实例启动后会自动注册到该部署组上。
TSF 部署组
除了 TCT 中管理(如增删改查)的部署组,TCT 也和 TSF 进行了打通,能直接识别 TSF 中的部署组。在部署组管理中,我们可以查看开启了 TCT 任务调度的 TSF 部署组。注意这里只有那些开启了 TCT 任务调度,并且正确配置了 TCT 参数(如 TCT 服务地址、AK/SK),成功注册到 TCT 上的 TSF 部署组才会在该列表中显示。
在我们创建任务的时候可以直接选择 TSF 部署组,例如:
注意通过 TSF 部署组部署的执行器实例也可以显式地配置一个 TCT 部署组 ID,让执行器示例注册到 TCT 部署组上,而不是使用默认的 TSF 部署组。在以下几个场景下使用 TCT 部署组会比较合适:
- 希望对部署组进行资源级别的细粒度权限控制,TCT 部署组完全由 TCT 控制,通过 CAM 和项目实现了资源级别的权限控制。
- 多个 TSF 部署组的执行器实例期望放到统一的一个部署组中进行调度,这时候需要将这些执行器示例都注册到 TCT 部署组上。例如在多 AZ 架构下,每个 AZ 下部署了一个 TSF 部署组,期望任务能够在这些跨 AZ 的执行器上调度,实现 AZ 级别容灾。