分布式定时任务框架选型
为什么我们需要定时任务
我们先思考下面几个业务场景的解决方案:支付系统每天凌晨1点跑批,进行一天清算,每月1号进行上个月清算电商整点抢购,商品价格8点整开始优惠12306购票系统,超过30分钟没有成功支付订单的,进行回收处理商品成功发货后,需要向客户发送短信提醒
类似的业务场景非常多,我们怎么解决?
很多业务场景需要我们某一特定的时刻去做某件任务,定时任务解决的就是这种业务场景。一般来说,系统可以使用消息传递代替部分定时任务,两者有很多相似之处,可以相互替换场景。
如,上面发货成功发短信通知客户的业务场景,我们可以在发货成功后发送MQ消息到队列,然后去消费mq消息,发送短信。
但在某些场景下不能互换:a)时间驱动事件驱动:内部系统一般可以通过时间来驱动,但涉及到外部系统,则只能使用时间驱动。如怕取外部网站价格,每小时爬一次
b)批量处理逐条处理:批量处理堆积的数据更加高效,在不需要实时性的情况下比消息中间件更有优势。而且有的业务逻辑只能批量处理。如移动每个月结算我们的话费
c)实时性非实时性:消息中间件能够做到实时处理数据,但是有些情况下并不需要实时,比如:vip升级
d)系统内部系统解耦:定时任务调度一般是在系统内部,而消息中间件可用于两个系统间
有哪些定时任务的框架单机timer:是一个定时器类,通过该类可以为指定的定时任务进行配置。TimerTask类是一个定时任务类,该类实现了Runnable接口,缺点异常未检查会中止线程ScheduledExecutorService:相对延迟或者周期作为定时任务调度,缺点没有绝对的日期或者时间spring定时框架:配置简单功能较多,如果系统使用单机的话可以优先考虑spring定时器分布式Quartz:Java事实上的定时任务标准。但Quartz关注点在于定时任务而非数据,并无一套根据数据处理而定制化的流程。虽然Quartz可以基于数据库实现作业的高可用,但缺少分布式并行调度的功能TBSchedule:阿里早期开源的分布式任务调度系统。代码略陈旧,使用timer而非线程池执行任务调度。众所周知,timer在处理异常状况时是有缺陷的。而且TBSchedule作业类型较为单一,只能是获取处理数据一种模式。还有就是文档缺失比较严重elasticjob:当当开发的弹性分布式任务调度系统,功能丰富强大,采用zookeeper实现分布式协调,实现任务高可用以及分片,目前是版本2。15,并且可以支持云开发。Saturn:是唯品会自主研发的分布式的定时任务的调度平台,基于当当的elasticjob版本1开发,并且可以很好的部署到docker容器上。xxljob:是大众点评员工徐雪里于2015年发布的分布式任务调度平台,是一个轻量级分布式任务调度框架,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。
分布式任务调度系统对比
参与对比的可选系统方案:elasticjob(以下简称EJob)与xxxjob(以下简称XJob)项目背景及社区力量
XJob:大众点评公司下员工许雪里、贡献者3人;github有2470star、1015forkQQ讨论群6个有登记在使用的超过40家公司文档齐全EJob:当当网开源,贡献者17人;github有2524star、1015forkQQ讨论群个、源码讨论群个有登记在使用的超过50家公司文档齐全有明确的发展计划支持集群部署
XJob:集群部署唯一要求为:保证每个集群节点配置(db和登陆账号等)保持一致。调度中心通过db配置区分不同集群。
执行器支持集群部署,提升调度系统可用性,同时提升任务处理能力。集群部署唯一要求为:保证集群中每个执行器的配置项xxl。job。admin。addresses调度中心地址保持一致,执行器根据该配置进行执行器自动注册等操作。
EJob:重写Quartz基于数据库的分布式功能,改用Zookeeper实现注册中心
作业注册中心:基于Zookeeper和其客户端Curator实现的全局作业注册控制中心。用于注册,控制和协调分布式作业执行。多节点部署时任务不能重复执行
XJob:使用Quartz基于数据库的分布式功能
EJob:将任务拆分为n个任务项后,各个服务器分别执行各自分配到的任务项。一旦有新的服务器加入集群,或现有服务器下线,elasticjob将在保留本次任务执行不变的情况下,下次任务开始前触发任务重分片。日志可追溯
XJob:支持,有日志查询界面
EJob:可通过事件订阅的方式处理调度过程的重要事件,用于查询、统计和监控。ElasticJob目前提供了基于关系型数据库两种事件订阅方式记录事件。
监控告警
XJob:调度失败时,将会触发失败报警,如发送报警邮件。
任务调度失败时邮件通知的邮箱地址,支持配置多邮箱地址,配置多个邮箱地址时用逗号分隔
EJob:通过事件订阅方式可自行实现
作业运行状态监控、监听作业服务器存活、监听近期数据处理成功、数据流类型作业(可通过监听近期数据处理成功数判断作业流量是否正常,如果小于作业正常处理的阀值,可选择报警。)、监听近期数据处理失败(可通过监听近期数据处理失败数判断作业处理结果,如果大于0,可选择报警。)弹性扩容缩容
XJob:使用Quartz基于数据库的分布式功能,服务器超出一定数量会给数据库造成一定的压力
EJob:通过zk实现各服务的注册、控制及协调支持并行调度
XJob:调度系统多线程(默认10个线程)触发调度运行,确保调度精确执行,不被堵塞。
EJob:采用任务分片方式实现。将一个任务拆分为n个独立的任务项,由分布式的服务器并行执行各自分配到的分片项。高可用策略
XJob:调度中心通过DB锁保证集群分布式调度的一致性,一次任务调度只会触发一次执行;
EJob:调度器的高可用是通过运行几个指向同一个ZooKeeper集群的ElasticJobCloudScheduler实例来实现的。ZooKeeper用于在当前主ElasticJobCloudScheduler实例失败的情况下执行领导者选举。通过至少两个调度器实例来构成集群,集群中只有一个调度器实例提供服务,其他实例处于待命状态。当该实例失败时,集群会选举剩余实例中的一个来继续提供服务。失败处理策略
XJob:调度失败时的处理策略,策略包括:失败告警(默认)、失败重试;
EJob:弹性扩容缩容在下次作业运行前重分片,但本次作业执行的过程中,下线的服务器所分配的作业将不会重新被分配。失效转移功能可以在本次作业运行中用空闲服务器抓取孤儿作业分片执行。同样失效转移功能也会牺牲部分性能。
动态分片策略
XJob:分片广播任务以执行器为维度进行分片,支持动态扩容执行器集群从而动态增加分片数量,协同进行业务处理;在进行大数据量业务操作时可显著提升任务处理能力和速度。
执行器集群部署时,任务路由策略选择分片广播情况下,一次任务调度将会广播触发对应集群中所有执行器执行一次任务,同时传递分片参数;可根据分片参数开发分片任务;
EJob:支持多种分片策略,可自定义分片策略默认包含三种分片策略:基于平均分配算法的分片策略、作业名的哈希值奇偶数决定IP升降序算法的分片策略、根据作业名的哈希值对Job实例列表进行轮转的分片策略,支持自定义分片策略
elasticjob的分片是通过zookeeper来实现的。分片的分片由主节点分配,如下三种情况都会触发主节点上的分片算法执行:a、新的Job实例加入集群b、现有的Job实例下线(如果下线的是leader节点,那么先选举然后触发分片算法的执行)c、主节点选举和quartz框架对比调用API的的方式操作任务,不人性化;需要持久化业务QuartzJobBean到底层数据表中,系统侵入性相当严重。调度逻辑和QuartzJobBean耦合在同一个项目中,这将导致一个问题,在调度任务数量逐渐增多,同时调度任务逻辑逐渐加重的情况加,此时调度系统的性能将大大受限于业务;Quartz关注点在于定时任务而非数据,并无一套根据数据处理而定制化的流程。虽然Quartz可以基于数据库实现作业的高可用,但缺少分布式并行调度的功能。另外,搜索公众号python人工智能技术后台回复大礼包,获取一份惊喜礼包。综合对比
总结和结论
共同点:
EJob和Xjob都有广泛的用户基础和完整的技术文档,都能满足定时任务的基本功能需求。
不同点:
XJob侧重的业务实现的简单和管理的方便,学习成本简单,失败策略和路由策略丰富。推荐使用在用户基数相对少,服务器数量在一定范围内的情景下使用。
EJob关注的是数据,增加了弹性扩容和数据分片的思路,以便于更大限度的利用分布式服务器的资源。但是学习成本相对高些,推荐在数据量庞大,且部署服务器数量较多时使用。
附定时任务的其他方案
发货后超过10天未收货时系统自动确认收货的多种实现方式:每天定时半夜筛选第二天可以自动确认收货的订单,然后第二天每10分钟执行一次确认收货开销不会太大吧时间也相对精确
自动确认收货这个状态如果仅仅是让客户端看的话,等用户下一次上线的时间,做一次运算就可以了。
延迟和定时消息投递
ActiveMQ提供了一种broker端消息定时调度机制。适用于:1、不希望消息马上被broker投递出去,而是想要消息60秒以后发给消费者,2、想让消息没隔一定时间投递一次,一共投递指定的次数
RabbitMQ可以针对Queue和Message设置xmessagett,来控制消息的生存时间,如果超时,则消息变为deadletter。利用DLX,当消息在一个队列中变成死信后,它能被重新publish到另一个Exchange。这时候消息就可以重新被消费。
豪债教父许荣茂世茂暴雷作者刘星志编辑赵晋杰来源盒饭财经(ID:daxiongfan)世茂集团董事长许荣茂最近一次出现在公众视野,是在2018年央视春晚,许荣茂与时任故……
2023年新能源车前瞻,大众和比亚迪均有新作,护卫舰07领衔今年车企可谓是背腹受敌,疫情影响、零部件紧缺等因素影响,致使新车发布计划被打乱,很多新车都推迟到2023年发布,所以在2023年将会不少重磅新车型进入市场。如今距离2023年还……
7款花呢西装穿法,告别无趣贵妇风,玩出优雅西装新花样提起花呢西装,立刻就能想到香奈儿的经典香风款。一件简单的短款修身西装,却能将职业女性的优雅与干练充分展现出来。深受已故香奈儿当家人老佛爷青睐的周迅,就是我心中花呢西装的经典形象……
超级英雄们的飞行原理钢铁侠、战争机器、钢骨、奥创、猎鹰利用动量守恒和动能,即m1v1m2v2m1v1。m2v2。12mv2和火箭推进器原理一样是能量转换红女巫、奇异博士现在的科学……
美极了!来杨浦公园邂逅红色花海一出生就开花花开完才长叶花叶永不相见TA就是彼岸花伴着秋风飒飒彼岸花的花瓣渐染红在杨浦公园内成片绽放彼岸花学名红花石蒜属于石蒜科……
摄影穷三代是什么意思?买了索尼A7M4只是开始,又增购了这些大家好,我是晓飞影!一个数码爱好者,也喜欢在众多平行领域探究摸索,让生活多一点乐趣。当初加价1500元买了A7M4后,用到现在是非常满意,除了相机外,陆续增购了一些……
走近甘南青稞姐姐变身记图为3月下旬,尕旦木草接受中新网记者专访。戴文昌摄中新网兰州3月30日电(史静静田鹏鹤)3月下旬的甘肃甘南藏族自治州天气依然微凉,尕旦木草和伙伴们在工作室围绕青稞电商销售……
它是藏在身边祛湿大王,每天坚持吃,不仅排湿气还消肿利水春天一到,有没有总是觉得身体疲倦和浑身乏力,或许这正是春天湿困。主要是因为潮湿天气会让身体累积湿气,出现湿重。在中医角度来说,脾胃负责祛湿,若脾胃虚弱,湿邪无法祛掉,人便会感到……
毛衣半裙王炸组合,有品位的女性都这么穿秋冬的浪漫和温暖寄托于毛衣与半裙之中,一件软糯的毛衣代表的是温暖,一件飘逸的半裙代表的是浪漫,风吹过裙角,微扬的裙摆彰显的是女性独有的魅力,懂得搭配毛衣和半裙这套look的女孩……
没想到房产要被快手搅动了越来越多互联网企业开始将目光盯向房地产特别是今年为什么是今年,因为今年行业里日子都很难而此时此刻的房地产,也需要探索新的互联网模式当然盯上不仅是因为地产……
微型逆变器行业研究报告渗透率持续提升,国产微逆扬帆远航(报告出品方作者:国泰君安证券,庞钧文,周淼顺,石岩)1。光伏进入平价新周期,需求具有长期持续性1。1。光伏平价需求增长,产业链产能加速释放碳达峰强化能源目标,新能……
陈妍希新造型被赞美得惊人,造型师晒出生图,网友终于开窍了这个国庆假期,不少明星都分享了自己度假方式,陈妍希也不例外。10月7日,陈妍希踩着国庆假期的尾巴,晒出两张随拍陈妍希发文称:开心就是你选择了开心!珍惜拥有的,开心就很简单……