分布式定时任务框架选型,写得太好了!

作者:技术大发2022.03.08 07:38浏览量:400

简介:分布式定时任务框架选型

文心大模型4.5及X1 正式发布

百度智能云千帆全面支持文心大模型4.5 API调用,文心大模型X1即将上线

立即体验

作者:joni@efbiz.org
来源:
http://www.expectfly.com/2017/08/15/分布式定时任务方案技术选型/
为什么我们需要定时任务

我们先思考下面几个业务场景的解决方案:

支付系统每天凌晨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作业类型较为单一,只能是获取/处理数据一种模式。还有就是文档缺失比较严重
elastic-job:当当开发的弹性分布式任务调度系统,功能丰富强大,采用zookeeper实现分布式协调,实现任务高可用以及分片,目前是版本2.15,并且可以支持云开发,这个我写了系列教程了,在Java技术栈公从号可以搜索阅读。
Saturn:是唯品会自主研发的分布式的定时任务的调度平台,基于当当的elastic-job 版本1开发,并且可以很好的部署到docker容器上。
xxl-job: 是大众点评员工徐雪里于2015年发布的分布式任务调度平台,是一个轻量级分布式任务调度框架,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。
分布式任务调度系统对比

参与对比的可选系统方案:elastic——job (以下简称E-Job)与 xxx-job(以下简称X-Job)
项目背景及社区力量

X-Job : 大众点评公司下员工许雪里、贡献者 3人; github有2470star、1015fork | QQ讨论群6个 | 有登记在使用的超过40家公司 | 文档齐全E-Job : 当当网开源,贡献者17人; github有2524star、1015fork | QQ讨论群1个、源码讨论群1个 | 有登记在使用的超过50家公司 | 文档齐全 | 有明确的发展计划

支持集群部署

X-Job : 集群部署唯一要求为:保证每个集群节点配置(db和登陆账号等)保持一致。调度中心通过db配置区分不同集群。

执行器支持集群部署,提升调度系统可用性,同时提升任务处理能力。集群部署唯一要求为:保证集群中每个执行器的配置项 “xxl.job.admin.addresses/调度中心地址” 保持一致,执行器根据该配置进行执行器自动注册等操作。
E-Job : 重写Quartz基于数据库的分布式功能,改用Zookeeper实现注册中心

作业注册中心:基于Zookeeper和其客户端Curator实现的全局作业注册控制中心。用于注册,控制和协调分布式作业执行。2021 最新 Java 面试题出炉!(带全部答案)
多节点部署时任务不能重复执行

X-Job : 使用Quartz基于数据库的分布式功能

E-Job  : 将任务拆分为n个任务项后,各个服务器分别执行各自分配到的任务项。一旦有新的服务器加入集群,或现有服务器下线,elastic-job将在保留本次任务执行不变的情况下,下次任务开始前触发任务重分片。

日志可追溯

X-Job : 支持,有日志查询界面

E-Job : 可通过事件订阅的方式处理调度过程的重要事件,用于查询、统计和监控。Elastic-Job目前提供了基于关系型数据库两种事件订阅方式记录事件。

相关文章推荐

发表评论

图片