ETask 是 ECMDB 生态系统中的专业分布式任务执行组件。它主要用于解耦主应用的执行压力,通过分布式架构异步处理耗时的自动化运维剧本和巡检任务。
- 全异步执行:将耗时网络探活、配置收集、自动化剧本下发任务转交于 ETask 异步化,彻底防止主站阻塞。
- 高危操作沙盒化:允许将 ETask 执行器部署在严格网络隔离的安全区,主控通过中心态的中间件传递指令,大幅度压缩暴露的核心安全侧攻击面。
仅需变更基础启动参数,即可灵活使单个二进制程序切换不同微服务角色(Scheduler / Agent / Executor),为严苛的防火墙环境演化出三套互补获取链路:
- Kafka Agent 模式:完全不需要监听外部入站端口,依靠主动订阅消息队列获取任务,从物理上隔绝外网反向探测。
- gRPC PUSH 模式:调度中心利用内部高速网络,直接向处于同一可信内网的节点集群发起高速点对点下抛推送。
- gRPC PULL 模式:执行节点定时利用长轮询向控制端认领任务,完美适配高网络限制或边缘侧弱网环境。
- 跨环境支撑:全量支持透传解析各形态执行文件,如常见 Shell 脚本或封装依赖的 Python 工具链路。
- 结构化收集:执行完毕不仅采集标准输出,更提供系统级的描述符管道 (FD) 挂载拦截,强制将结果转为标准 JSON 结构响应回主控系统。
展现从 ECMDB 到内部调度分发,及多种派发通道到最后状态回流的并行逻辑网络视角:
sequenceDiagram
participant ECMDB as 🎛️ 主业务平台 (ECMDB)
participant Scheduler as 🧠 ETask 调度大脑 (Scheduler)
participant Agent as 🛡️ 隔离区/边缘 (Agent 节点)
participant Kafka as 📨 事件总线 (Kafka)
participant Executor as ⚡️ 高速内网区 (Executor 节点)
ECMDB->>Scheduler: 1. Http/gRPC 派下发任务请求载荷
Note over Scheduler,Agent: ⏩ Agent 分支模式 (基于 Kafka 队列去中心化流转)
Scheduler->>Kafka: 2a. 将包含脚本上下文的发布指令投进 Topic
Kafka-->>Agent: 3a. Agent 循环长订阅拉取到当前任务
Agent-->>Kafka: 4a. 独立运行完毕,将结果 JSON 写回状态 Topic
Kafka-->>Scheduler: 5a. 调度大脑收到反馈收集确认
Note over Scheduler,Executor: ⚡️ Executor 分支模式 (基于 gRPC 高性能直连传输)
Scheduler->>Executor: 2b. (PUSH 模式) 路由直指点对点触发 Execute()
Executor-->>Scheduler: 3b. (PULL 模式) Worker 唤醒并发起长请求主动签收
Executor->>Executor: 4b. 依赖 Context 隔离,剥离内部协程执行子进程
Executor-->>Scheduler: 5b. 获取执行完成时的结果报告 (Reporter) 并同步返回
Scheduler-->>ECMDB: 6. 落盘状态流转并驱动核心 CMDB 闭环完成所有动作
通过启动命令的 --mode 参数设定当前程序所处的网络拓扑阶段。所有特性均编译在同一可执行文件内:
| 组件名称 | 说明 | 启动指令 |
|---|---|---|
| Scheduler (调度大脑) | 位于中心端,统筹从核心业务平台下发的具体编排载体,并负责在不同边缘执行集群中路由和重试。 | go run main.go server --mode scheduler |
| Agent (消息代理端) | 无需开放端口的静默节点,基于 Kafka 构建。专门部署于有着苛刻的出入站限制,只能对外联通的隔离网段。 | go run main.go server --mode agent |
| Executor (原生直连端) | 采用 gRPC rpc 构建的高并发节点,拥有最强的心跳发现机制与最低的延迟分发速度,适合部署在核心机房圈中。 | go run main.go server --mode executor |
💡 聚合模式提示: 当进行开发测试或者只有一台宿主机可利用时,可使用
go run main.go server --mode all将以上三大组件融合捆绑在一个常驻进程内。
保证分布式环境下的可用性与长平稳心跳探测,所有强依赖均围绕企业级常见组件:
- 开发语言与引擎:Go 1.25.0、Ego (基础框架)、gRPC (底层通讯规范)
- 调度存储依赖:MySQL (支持 Egorm 操作基础数据与任务载荷)
- 高性能去中心化总线:Kafka (承载异步任务与大规模执行回传状态池)
- 注册与发现:Etcd (心跳保活续期、租约签发与在线 Endpoint 热同步)
本系统在根目录使用 Taskfile.yaml 聚合了常用的环境准备与启动测试工作:
开始联调前,务必保证开发主机能连通测试环境的 Kafka 与 Etcd。配置路径:config/all.yaml。
# 整理并拉取 Go 模块包
go mod tidy
# 依赖 Buf,重新针对修改过的 Protobuf (api层) 生成通信存根
task gen
# 利用 Wire 生成项目的自动化控制反转 (DI) 依赖注入层
task wire
# 初始化并根据对应库执行数据库结构强制同步建表
task migrate:up开发调试提供了专属的 task 命令别名,用于模拟网络中的多个物理角色节点:
# 【一键体验】同时拉起具有分发中心与本地执行能力的全量引擎
task run
# 【仅启动主控】剥离执行单元,单纯监听业务网关请求
task scheduler
# 【启动隔离节点】专门订阅 Kafka 队列来干活的不开放端口节点
task agent
# 【启动直连节点】对外暴露 gRPC 执行端口等待指派任务分配的集群节点
task executor 🌟 如果这个核心执行中枢对您有帮助,请给我们一个 Star!
Made with ❤️ by Duke1616