7.1 任务平台
juno-admin后台编辑编辑定时任务信息的时候,按组区分定时任务类别,组名即为应用名称,后面定时任务信息只会被应用所部属的机房消费到,并最终只有一台机器成功执行定时任务信息
有juno-admin后台统编辑带应用名的定时任务信息,并以应用名划分定时任务所在组。后台编辑好的定时任务信息在发布到etcd后,只会被任务信息所在的应用下的机房机器所消费到,机器得到消费的信息后,需要去获取锁,得锁者响应定时任务,未得锁者不响应定时任务。 这个锁可以用mysql的行锁+多版本去满足。
7.1.1 业内调研
7.1.2 架构设计
7.1.3 任务执行时序图
添加任务,执行任务
sequenceDiagram
admin->>etcd: 写入待执行指令
etcd->>etcd: event消息产生
agent->>etcd: 获取cmd执行指令内容与执行规则
agent->>+agent: 获取定时任务后完成加锁操作
agent->>agent: 解析规则策略,注册定时任务
agent->>etcd: 将任务执行信息写入etcd
agent->>-etcd: 执行完成后删除对应的key
agent-->>etcd: 执行结果反馈
etcd-->>admin: 获取执行结果进行MySQL落地
立即执行任务
sequenceDiagram
admin->>etcd: 写入待执行指令
etcd->>etcd: event消息产生
agent->>etcd: 获取cmd执行指令内容与执行规则
agent->>+agent: 获取定时任务后完成加锁操作
agent->>agent: 解析规则策略,注册定时任务
agent->>etcd: 将任务执行信息写入etcd
agent->>-etcd: 执行完成后删除对应的key
agent-->>etcd: 执行结果反馈
etcd-->>admin: 获取执行结果进行MySQL落地
强杀任务
7.1.4 业务流程
- 由Agent心跳上报到Admin,Admin存储应用和agent的对应关系
- 在Admin进行定时任务的逻辑处理,定时任务和应用强绑定,某个应用的定时任务执行逻辑指挥在对应的Agent上进行
- 执行结果通过ETCD进行回调,再有Admin统一处理
- 对异常执行任务进行重试
7.1.5 关键设计
/juno/task/proc/pid/jobId/appName/hostName #关闭进程
/juno/task/cmd/appName/jobId # 任务下发
/juno/task/once/appName/jobId/hostName # 任务执行
/juno/task/lock/jobId # 执行锁
/juno/task/noticer/hostName # 执行结果通知
/juno/task/csctl/<cmd> # 临时指令