定时任务的灰度发布实现思路
1、启动阶段-注册执行节点
所有执行节点在启动的时候注册自己能执行哪些定时任务
执行节点如果停机重启(如:停机重启,发布重启),主节点会感知这个变化,从而从上述注册中剥离该执行节点,后续任务就不会再分配到原先节点
2、启动阶段-选举管理节点,
所有节点注册完毕,会参与选举,产生一个管理节点
管理节点可以参与或不参与任务执行。
管理节点随机在执行节点中产生,如果管理节点停机,zk会感知并通知所有节点重新选举产生新管理节点。
3、运行阶段-管理节点创建定时任务实例,分配给合适的执行节点
管理节点选举出来,就会周期性的扫描定时任务模版,提前创建定时任务实例并分配执行节点, 分配执行节点其实是更新实例的节点字段。 这叫做主动分配。
管理节点为任务实例分配执行节点时遍历具备该业务执行能力的执行节点集合,依次分发给执行节点,
开始时记录开始节点,每轮扫描回到开始节点,就结束为本实例分配执行节点动作
如果此节点没有执行节点,就放弃等待下一轮扫描。
4、运行阶段-执行节点收到通知,扫描执行任务实例
管理节点分配定时任务实例后,会通知执行节点,
执行节点受到通知,会到数据库里捞取执行分配给自己的待执行任务实例
5、 关于灰度发布
发布人员会修改系统参数greyRegions,并刷新到缓存
发布人员会停机需要升级灰度版本的部分节点,修改配置标记为灰度节点
发布人员发布灰度应用并启动应用实例
灰度节点启动过程中重新注册到定时任务管理机制中,标记自己是灰度节点,注册自己的定时任务业务能力,参与执行分配
管理节点发现要执行的实例属于灰度region时,会寻找具备该能力的灰度节点执行该定时任务,
如果没有找到就放弃等待下一轮再扫,可能此时灰度节点还没有启动或注册加入执行节点集合。