elastic-job的原理简介

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wanghang88/article/details/82813486

elastic-job :

1,简介

      是当当开源的一款非常好用的作业框架,在这之前,我们开发定时任务一般都是使用quartz ,对于业务量小的话 quartz是可以满足我们的要求的,使用quartz对于大的业务量的不足:

     a)quartz应用服务多节点部署,可能会重复多次执行而引发系统逻辑的错误 。

     b)quartz的集群仅仅只是用来HA,节点数量的增加并不能给我们的每次执行效率带来提升,即不能实现水平扩展。

对于定时任务quartz的不足,因此elastic-job应运而生。

2,使用场景:

     典型的job应用场景,比如余额宝里的昨日收益 ,job在每天某个时间点开始,给所有余额宝用户计算收益 ,如果用户数量不多,我们可以轻易使用quartz来完成,我们让计息job在某个时间点开始执行,循环遍历所有用户计算利息,这没问题 ;如果用户体量特别大,处理的时候可能出现的问题:

     a)我们可能会面临着在第二天之前处理不完这么多用户(单节点的情况下,单个的job应用);

     b) 如果将quartz的job应用以多杰点部署的话,多个job同时执行,很容易造成重复执行,比如用户重复计息,为了避免这种情况,我们可能会对job的执行加锁,保证始终只有一个节点能执行,

出现这样的情况 ,elastic-job可以帮我们完美地解决。

3,elastic-job的原理:

     a)elastic-job底层的任务调度还是使用的quartz,通过zookeeper来动态给job节点分片 ,通过集群达到水平扩展,集群里的每个节点都处理部分用户,不管用户数量有多庞大,我们只要增加机器就可以了 ,单台机器特定时间能处理n个用户,2台机器处理2n个用户,3台3n,4台4n...,

    b)elastic-job开发的作业都是zookeeper的客户端,比如我希望3台机器跑job,我们将任务分成3片,框架通过zk的协调,最终会让3台机器分别分配到0,1,2的任务片,server0执行id%3==0的用户,server1执行id%3==1的用户,server2执行id%3==2的用户;

    c)在上面的基础上再增加一台服务server3,此时server3分不到任务分片,因为只有3片,已经分完了。没有分到任务分片的作业程序将不执行;如果此时server2挂了,那么server2的分片项会分配给server3,server3有了分片,就会替代server2执行;如果此时server3也挂了,只剩下server0和server1了,框架也会自动把server3的分片随机分配给server0或者server1 

本问大概介绍了下elastic-job 的使用场景和基本的原理,参考博文:https://blog.csdn.net/fanfan_v5/article/details/61310045

猜你喜欢

转载自blog.csdn.net/wanghang88/article/details/82813486
今日推荐