分布式定时任务调度系统技术解决方案(xxl-job、Elastic-job、Saturn)

保险人管系统每月工资结算,平安有150万代理人,如何快速的进行工资结算(数据运算型)

保险短信开门红/电商双十一 1000w+短信发送(短时汇聚型)

工作中业务场景非常多,所涉及到的场景也各不相同,这使得我们定时任务系统应该集管理、调度、任务分配、监控预警为一体的综合调度系统,如何打造一套健壮的、适应不同场景的系统,技术选型尤其重要。

针对以上场景我们需要我们的分布式任务系统具备以下能力:

    1.支持多种作业类型(shell作业/Java作业)

    2.支持作业HA,负载均衡和失败转移

    3.支持弹性扩容(应对开门红以及促销活动)

    4.支持Job Timeout 处理

    5.支持统一监控和告警

    6.支持作业统一配置

    7.支持资源隔离和作业隔离

2.定时任务调度的特点

任务调度就是设点某一时间点自动触发的任务,该任务可以在时间规律上去循环执行。一般的技术quartz、spring task、java.util.Timer,这几种如果在单一机器上跑其实问题不大,但是如果一旦应用于集群环境做分布式部署,就会带来一个致命的问题,那就是重复执行,当然解决方案有,但是必须依赖数据库,将任务执行状态持久化下来。

特点:

时间驱动:系统一般可以通过时间来驱动,定时定点定次。

批量处理:批量处理堆积的数据更加高效,在不需要实时性的情况下比消息中间件更有优势。而且有的业务逻辑只能批量处理。如对账批处理、资金管理系统回盘、部分银行的报盘前的制盘

非实时性:定时任务不要求实时性,一般不用于C端用户的交互,更多的用于业务数据的处理

隔离性/专一性:可以跟其他系统分离,只关注业务数据的处理,不影响用户的操作和用户系统的性能。

基本原理:

分布式定时任务调度系统技术解决方案(xxl-job、Elastic-job、Saturn)

3.开源定时任务框架

Quartz:Java事实上的定时任务标准。但Quartz关注点在于定时任务而非数据,并无一套根据数据处理而定制化的流程。虽然Quartz可以基于数据库实现作业的高可用,但缺少分布式并行调度的功能。

TBSchedule:阿里早期开源的分布式任务调度系统。代码略陈旧,使用timer而非线程池执行任务调度。众所周知,timer在处理异常状况时是有缺陷的。而且TBSchedule作业类型较为单一,只能是获取/处理数据一种模式。还有就是文档缺失比较严重。

Elastic-job:当当开发的弹性分布式任务调度系统,功能丰富强大,采用zookeeper实现分布式协调,实现任务高可用以及分片,目前是版本2.15,并且可以支持云开发,目前是版本2.15,现在已经不在更新。

Saturn:是唯品会自主研发的分布式的定时任务的调度平台,Saturn (任务调度系统)是唯品会开源的一个分布式任务调度平台,取代传统的Linux Cron/Spring Batch Job的方式,做到全域统一配置,统一监控,任务高可用以及分片并发处理。Saturn是在当当开源的Elastic Job基础上,结合各方需求和我们的实践见解改良而成,最新发布版本V3.3.1(2019年1月18日),最新测试版本V3.3.3.1。使用案例 唯品会、酷狗音乐、新网银行、海融易、航美在线、量富征信 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzgsjz.html