分布式调度系统

分布式调度系统对比:

问题1:集群重复执行

            因为没有Job分发功能, 造成各worker资源浪费

问题2:线上Job修改

            如果想修改已经上线的定时任务怎么办?

            以前:每个应用都引用quartz,单独配置定时任务,一旦上线,难于修改;

            现在:无需引用quartz,直接在用户界面配置,可随时修改,随时执行。

问题3:失败异常处理机制

            线上的定时任务,如果执行失败了应该怎么办?

            以前:每个定时任务需要自己写出错报告,重新执行困难;

            现在:出错后自动告警,支持短信、邮件、微信等多种告警方式;提供手动异常处理功能。

问题4:Job处理大批量数据

             如果有任务要处理大量数据,该怎么办?

            以前:定时任务单机执行,速度较慢,不能充分利用分布式计算。

            现在:可由一个定时任务拆分成n个子任务,分配到不同机器执行,充分利用计算资源,执行状态实时监控。

问题5:中断执行中的Job任务

            批处理正在执行,发现问题想中断,怎么办?

            以前:重启。

            现在:可响应用户控制台中断指令。

 

分布式调度系统的工作原理

1. 服务注册和拉取待执行Job:接入的应用采用poll方式, 通过http协议向服务器获取任务,减少对系统的侵入

2. 任务执行

     应用方式:执行拉取的待执行Job,Job需实现统一接口;

     异常告警及处理:在执行前后上报执行状态和捕获运行异常,可做以下异常告警:任务未取走、超过预估执行时间、异常结束、取走未执行、任务中止等;

     防重:任务执行简单防重。但是存在系统故障,或多节点同时获取taskId导致重复执行,或同一节点的Job尚未取走taskId,1s后再次拉取taskId。业务方应用时应注意

3. 任务中止

     中止:在“拉取任务和执行任务时绑定taskId和context上下文,然后context上下文绑定当前线程”;在“汇报任务”时根据taskId获取context,然后执行context绑定线程的interrupt

4. 路由策略

     分布式消费者节点以轮询的方式主动拉取Job列表,按照接收到的节点请求的顺序下发,所以路由策略为:轮询

     扩展:一致性hash、failover、busyover、轮询,随机,最不经常使用,最近最久不使用。其中可切换为一致性哈希、failover等等策略

5. 主子任务

     其顺序为:Job节点(主任务)主动推送入参到该应用的的任务队列;Job节点(子任务)主动拉取该应用的任务队列。从而实现主子任务。

      

 

6. 任务积压

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值