浅谈分布式任务调度平台

背景

分布式场景下,我们会对每个独立出来的服务进行集群,来提升服务的可用性,但集群环境下就会出现当前服务模块的定时任务重复进行的情况。

那么解决方案实际上有多种:

1.将定时任务提取出来,存放在后台管理系统
2.将定时任务单独部署成一个服务
3.将不同的服务部署不同的定时任务服务,用任务调度中心将其进行整合管理,也就是本文所说的分布式任务调度平台

原理

如图:
在分布式任务调度中心中(这里以XXL-JOB的架构图为例),分为两部分。

1.任务调度中心:即任务中心管理系统,处理所有的任务分发,执行器管理,日志分析处理等
2.执行器注册中心:管理所有微服务模块的定时任务注册

其次是定时任务模块,这里统称为执行器,每个执行器都会注册,原理类似于注册中心。

 

任务调度现架构图

如此架构图部署进行数据交互后,我们只需要在任务调度平台配置对应所需要执行的任务,点击启动,可以配置对应的负载均衡策略轮询到需要运行的执行器上。确保无重复运行。并能在大数据量下进行分片与动态扩容与收缩。

数据分片

产生于任务调度平台与大数量的背景下,如实际场景中:

小李需要对公司的100万用户进行双十一秒杀活动数据推送,虽然部署了多台服务集群,但是为了避免重复进行任务,便使用单台数据节点运行定时任务,运行非常缓慢,第一个用户和最后一个用户的时间差有非常大的差异。导致用户不满。活动达不到理想效果,小李也被领导一顿吊。

那么如何通过任务调度平台去处理这个问题呢?
在任务调度平台中有个数据分片的概念,根据平台注册的执行器下标(index),根据其可将分为多个数据片段。

小李经过上一次的秒杀活动推送后,下定决心要优化推送,他决定使用分布式任务调度平台,开启十台服务,并且通过index下标将百万数据分片,配置每台服务器按各自的下标获取到10万的数据。配如下标为1的服务器获取第1条-10万条,下标为2的服务器获取第10万-20万条。以此类推。从而将此次的速度提升了十倍,用户体验度顿时好了许多。领导还请了小李喝可乐。

动态扩容与收缩

那么现在的场景又改变了,用户暴增到一千万,原有的十台服务器又慢了,领导一声令下叫回来周末度假的小李,令其将活动推送优化。

小李不慌不忙的直接启动了九十台服务器集群,因为数据分片原理是根据index下标,我们只需要提前定义好每台服务器获取多少数据,即可由此进行动态的扩容。由此,每台服务器又变成了各自领取十万数据进行推送。

数据量突然减少怎么办呢?

非双十一的情况下,用户的剁手欲望急剧下降,对服务器的需求远远不需要原有的一百台,领导希望小李能够腾出服务器资源提供别的项目使用。小李直接关闭了九十台服务器,由注册中心实时进行了收缩,由此,腾出了服务器资源。

优化

我们仔细看会发现,在单台服务器拿到十万数据进行处理时,仍然会出现第一个用户和最后一个用户收到消息的时间差,这时我们可以采用多线程方式进行任务跑批,提升程序运行数据,当然无论是多线程还是数据分片,我们都要通过日志记录分析确保每个用户收到了活动信息,如果发送失败则对其进行相应的补偿。不然就等着领导请喝茶吧。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值