Java教程之基于XXL-JOB实现分布式任务调度的实现

背景

笔者以前在电商公司,我们需要在8月18号做大促活动,我们会提前一天给所有的用户推送活动信息,且需要根据用户画像生成不同的推送内容。

当时我们总共有80万用户左右。

经测试,通过Spring Task和分布式锁,单台机器同时开启5个线程,执行时间需要27个小时左右,即便开10个线程,需要14个小时左右,显然执行时间过长。

解决方案

当时个推服务部署节点有3台,在每年大促期间可动态扩容,其余的机器资源没有充分利用起来。

要想短时间内完成推送,那么就得想办法让每台机器各自分一部分用户数据去执行,这样效率可提高原来的N倍。

那么就需要分布式任务去执行,核心思想如下图:

Java教程之基于XXL-JOB实现分布式任务调度的实现

经过调研现有的开源的分布式任务调度框架,决定在elastic-job和xxl-job中选一个

Elastic Job是当当网开源一个分布式调度解决方案,由两个相互独立的子项目Elastic-Job-Lite和Elastic-Job-Cloud组成;定位为轻量级无中心化解决方案,使用 jar 包的形式提供分布式任务的协调服务。支持分布式调度协调、弹性扩容缩容、失效转移、错过执行作业重触发、并行调度、自诊断和修复等等功能特性。

XXL-Job官网是大众点评发布的分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。

更倾向于选择XXL-JOB:

轻量级,支持通过Web页面对任务进行动态CRUD操作,操作简单只依赖数据库作为集群注册中心,接入开发简单,不需要ZK高可用、解耦、高性能、监控报警、分片、重试、故障转移团队持续开发,社区活跃支持后台直接查看每个任务执行实时日志具体实现在项目中集成xxl-job客户端<dependency> <groupId>com.xuxueli</groupId> <artifactId>xxl-job-core</artifactId> <version>2.2.0</version> </dependency>在配置文件中配置xxl-job信息xxl: job: accessToken: admin: addresses: http://xxl部署IP地址:8080/xxl-job-admin executor: appname: vm-service address: ip: port: 9989 logretentiondays: 30新增XxlJobConfig.javapackage com.itheima.config; import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * xxl-job config * * @author xuxueli 2017-04-28 */ @Configuration @Slf4j public class XxlJobConfig { @Value(${xxl.job.admin.addresses}) private String adminAddresses; @Value(${xxl.job.accessToken}) private String accessToken; @Value(${xxl.job.executor.appname}) private String appname; @Value(${xxl.job.executor.address}) private String address; @Value(${xxl.job.executor.ip}) private String ip; @Value(${xxl.job.executor.port}) private int port; // @Value(“${xxl.job.executor.logpath}”) // private String logPath; @Value(${xxl.job.executor.logretentiondays}) private int logRetentionDays; @Bean public XxlJobSpringExecutor xxlJobExecutor() { log.info(“>>>>>>>>>>> xxl-job config init.”); XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); xxlJobSpringExecutor.setAdminAddresses(adminAddresses); xxlJobSpringExecutor.setAppname(appname); xxlJobSpringExecutor.setAddress(address); xxlJobSpringExecutor.setIp(ip); xxlJobSpringExecutor.setPort(port); xxlJobSpringExecutor.setAccessToken(accessToken); //xxlJobSpringExecutor.setLogPath(logPath); xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); return xxlJobSpringExecutor; } }在xxl-job中新增执行器

注册方式选自动注册,这样方便动态扩容

Java教程之基于XXL-JOB实现分布式任务调度的实现
创建任务

路由策略选择分片广播

Java教程之基于XXL-JOB实现分布式任务调度的实现
代码部分

在任务代码获取推送用户时,根据当前的分片及分片总数对用户ID取余,这样我们就可以在每个分片节点,获取不一样的数据。id值越连续,分片则越均匀。

ShardingUtil.ShardingVO shardingVo = ShardingUtil.getShardingVo(); int numbers = shardingVo.getTotal(); //分片总数 int index = shardingVo.getIndex(); //当前分片索引

假设分片总数为3,当前节点获取到的分片索引为0,那么查询推送用户SQL如下:

SELECT user_id FROM `user_info` WHERE MOD(user_id,3)=0

注意:我们在实际代码中,分片总数和当前分片索引是以参数的形式传给查询的SQL语句的。

如上,即可完成分布式任务。

总结

在某些定时任务需要处理大量数据的情况下,我们可以通过引入分布式任务框架xxl-job,充分利用机器资源,将需要处理的数据均匀的分配到不同的机器上去执行,提高任务执行效率。

免责声明:文章内容来自互联网,本站仅作为分享,不对其真实性负责,如有侵权等情况,请与本站联系删除。
转载请注明出处:Java教程之基于XXL-JOB实现分布式任务调度的实现 https://www.dachanpin.com/a/cyfx/11897.html

(0)
上一篇 2023-05-12 03:54:45
下一篇 2023-05-12 03:55:48

相关推荐

  • 打破“围墙”学实战:浙江高校创业学院引双创升级

      不仅如此,许多高校还会定期举办创业大赛,这也成为学生创业项目孵化的途径之一。例如浙江工业大学每个月28号都有创业大赛,获得青睐的优秀项目,可以入驻杭州未来科技城,不仅有了孵化场地,并且获得机构投资。   “专业教师在校内设立工作室,教师既承担教学业务、又承担指导学生创业,还与学生同创业。”义乌工商职院创业学院院长王晓明说,该校创业学院就建立了一支由创业教…

    创业分享 2023-05-27
    8300
  • 如果另一半出轨了可以原谅吗?

     还记得动画片《加菲猫》中一个事情: 加菲猫无意间走丢了,还被卖到了一个宠物店。它非常痛苦,担心主人会思念它成伤。在一个清晨,主人乔恩却径直走进了这家宠物店。他还一眼就看到了加菲,于是,他再一次把加菲带回了家,一切好似从前,一家团聚,其乐融融。可是故事的结尾处,只懂吃和睡的加菲猫,却说出一句令人泪流满面的话。它说:”我永远不会去问乔恩,…

    创业分享 2023-05-13
    4800
  • 创业策划师证书怎么报名 怎么培训在哪培训 在哪报名

    首页 > 教育文化 > 正文 创业策划师证书怎么报名 怎么培训在哪培训 在哪报名 来源网络 发布时间:2019-08-23 要培养大学生自主创业意识。大学生要想在毕业之后比较顺利的进行创业,就要在大学阶段树立创业理想,坚信创业理想能够实现,从而为这个理想的实现而不断的奋斗。高校需对学生进行创业培训,让他们在社会实践、创业实践等活动过程中将所学的知…

    创业分享 2023-05-12
    9500
  • “专题团体辅导工作坊”之:“挖掘创业源动…

    问政 > 上海海洋大学 招募令|“专题团体辅导工作坊”之:“挖掘创业源动… 上海海洋大学 2018-10-21 20:40   来源:澎湃新闻 问政 字号 本文原标题:《招募令|“专题团体辅导工作坊”之:“挖掘创业源动力”招学员啦》 “挖掘创业源动力”学员招募令 你还在为创业无门发愁吗?! 还觉得创业对你来说遥遥无期吗?…

    2023-05-15
    5900
  • 台湾创业项目在上海集中路演

      吕勇逵还介绍,慧高光创园这一海峡两岸青年创业基地,目前已吸引16家台资企业入驻,占到园区入驻企业三分之一左右。   台湾CareLabc管理咨询有限公司投资总监廖靖怡带来的项目关注大陆养老市场。廖靖怡希望找到相关的资源战略合作者,共同探索“以养代医、活力养老”的养老服务模式。   “不少台湾企业有来大陆发展的意愿。但相对来讲,台湾中小企业对开拓大陆市场缺…

    创业分享 2023-05-23
    6600

发表回复

登录后才能评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信