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

使用Quartz基于数据库的分布式功能,为保证系统"轻量级"并且降低学习部署成本,没有采用Zookeeper作为注册中心,采用DB方式进行任务注册发现

Elastic-job

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

Saturn:

同Elastic-job 

4.4 日志可追溯

xxl-job: 

支持,有日志查询界面

Elastic-job: 

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

Staturn: 

支持日志查看,同时支持jstack和gc log备份到executor日志目录(executor版本大于3.0.0)

4.5 监控告警

xxl-job: 

任务调度失败时邮件通知的邮箱地址,支持配置多邮箱地址,配置多个邮箱地址时用逗号分隔

Elastic-job: 

通过事件订阅方式可自行实现

作业运行状态监控、监听作业服务器存活、监听近期数据处理成功、数据流类型作业(可通过监听近期数据处理成功数判断作业流量是否正常,如果小于作业正常处理的阀值,可选择报警。)、监听近期数据处理失败(可通过监听近期数据处理失败数判断作业处理结果,如果大于0,可选择报警。)

Staturn: 

支持,需要自己接口实现在executor(SaturnSystemErrorGroup.java以及AbstractSaturnJob.java的实现)

4.6 弹性扩容缩容

xxl-job: 

使用Quartz基于数据库的分布式功能,服务器超出一定数量会给数据库造成一定的压力,一旦有新执行器机器上线或者下线,下次调度时将会重新分配任务;

Elastic-job: 

通过zk实现各服务的注册、控制及协调,以下是弹性分布的实现:

第一台服务器上线触发主服务器选举。主服务器一旦下线,则重新触发选举,选举过程中阻塞,只有主服务器选举完成,才会执行其他任务。

某作业服务器上线时会自动将服务器信息注册到注册中心,下线时会自动更新服务器状态。

主节点选举,服务器上下线,分片总数变更均更新重新分片标记。

定时任务触发时,如需重新分片,则通过主服务器分片,分片过程中阻塞,分片结束后才可执行任务。如分片过程中主服务器下线,则先选举主服务器,再分片。

通过上一项说明可知,为了维持作业运行时的稳定性,运行过程中只会标记分片状态,不会重新分片。分片仅可能发生在下次任务触发前。

每次分片都会按服务器IP排序,保证分片结果不会产生较大波动。

实现失效转移功能,在某台服务器执行完毕后主动抓取未分配的分片,并且在某台服务器下线后主动寻找可用的服务器执行任务。

Staturn: 

同上

4.7 支持并行调度

xxl-job: 

执行器集群部署时,任务路由策略选择"分片广播"情况下,一次任务调度将会广播触发集群中所有执行器执行一次任务,可根据分片参数处理分片任务

Elastic-job:: 

采用任务分片方式实现。将一个任务拆分为n个独立的任务项,由分布式的服务器并行执行各自分配到的分片项。

Staturn: 

采用任务分片方式实现。将一个任务拆分为n个独立的任务项,由分布式的服务器并行执行各自分配到的分片项。

4.8 高可用策略

xxl-job: 

调度中心HA

通过DB锁保证集群分布式调度的一致性, 一次任务调度只会触发一次执行;

执行器支持集群部署,提升调度系统可用性,同时提升任务处理能力。

执行器集群部署时,几点要求和建议:

执行器回调地址(xxl.job.admin.addresses)需要保持一致;执行器根据该配置进行执行器自动注册等操作。

同一个执行器集群内AppName(xxl.job.executor.appname)需要保持一致;调度中心根据该配置动态发现不同集群的在线执行器列表

Elastic-job

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

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