05.调度服务
# 01.实现
注:未完成,待补充
# 1、流程图
1)Web-server
- 用户触发实例(GitLab触发、webhook触发、定时触发、人工触发)
- 实例ID推送到rabbitmq(通过mysql事务,创建好实例推送实例ID到MQ)
2)engine-JOB
- 消费MQ中instanceID,根据DAG配置,将要执行的 atom信息 + 实例ID信息 推送到rabbitmq优先级队列中
3)priorityAtomConsumer JOB
- 封装atom(通过instanceID查询对应DAG,将第一个阶段要执行的原子封装好推送到MQ队列)
- 根据atom_id来查询原子具体配置,根据原子配置封装成最终结构体(包括创建k8s job的yaml文件)
- 根据原子配置中 tag标签,从etcd/redis中获取匹配的grpc server(对应grpc server的ip和port)
- 将封装好待执行的原子配置通过grpc连接将数据发送给grpc server
4)GRPC server
- GRPC server接收封装好的原子配置,将原子封装发送给对应tag的client
5)clients
- client解析原子配置,根据执行类型(k8s/bin)
- k8s类型原子会封装好k8s job yaml并提交给k8s server创建job并执行
- client根据k8s job name获取执行状态并将执行日志上报到grpc server
6)priorityAtomSync JOB
- grpc server将原子执行状态上报到 rabbitmq的状态队列
- priorityAtomSync JOB 消费状态队列,并将状态更新到mysql
grpc client注册到grpc server
GRPC server
Dispatch 与client建立长连接(client与server建立长连接,存入连接的server内存中)
InfoReport接收心跳上报信息
AtomDispatch 接收priorityAtomConsumer调度任务,将任务派发给client
clients
- Report 协程 (client连接grpc server并保持心跳,上报自己的tag标签)
- Exec 协程 (与GRPC server保持长连接,等待server派发封装的atom执行结构体)
- 消费atom匹配可执行GRPC server(从MQ中拿到待消费的原子,根据原子tag匹配可执行server)
# 2、触发流程图
服务分层
触发流程
# 3、调度服务
# 4、GRPC服务
编辑 (opens new window)
上次更新: 2024/3/13 15:35:10