由于最近在看分布式调度任务平台,节前也有研究过当当的elastic-job,加上刚刚看的肖德时:分布式任务调度平台实践探讨,自己关于分布式调度任务也有一些思考。
1.去中心化
在任务调度中,如果有一个中心节点在负责给分布式系统中的worker发送任务,执行调度,则这个中心节点很容易成为性能瓶颈,并且中心节点不可用就会导致整个系统瘫痪。上面提到的两个分布式任务调度平台都采用了zookeeper集群来保存分布式中的共享信息,其高可用和数据一致性是值得信赖的。
2.消息队列
当任务产生如果同步发给worker,当高并发的任务请求产生的时候则会导致系统崩溃,如果将任务消息放置在能够处理高吞吐的消息队列中,如kafka,worker在有能力处理任务的时候再去消息队列取任务执行,能够很好提升系统处理任务的并发能力。但是这样也会存在一个问题去思考,那就是任务堆积的问题,需要将任务很好地监控起来。
3.分片技术
分片技术是充分利用当前机子资源的办法,将任务尽量均匀地分配到每个worker上去执行实现并行处理。利用kafka 的分区,每个worker到指定的分区上去取数据,如果消息是均匀地发送到kafka,则是一个不错的分片解决方案。
4.弹性伸缩
在大量任务到来的时候,如果能够弹性增加worker的数量,则可以提升系统处理任务的能力,但是需要考虑
新增的worker如何进入系统中,从系统的任务队列中获取,并不影响现有的系统的运作。