散布式定时任务是指将定时任务散布在多个节点上履行的任务。这类技术可以提高任务的可靠性和效力,由于它可以在多个节点上同时运行,从而避免了单点故障。在游戏开发中,散布式定时任务通经常使用于履行一些周期性的任务,例如清算玩家数据、更新排行榜等。这些任务可能需要在服务器集群的不同节点上进行,因此使用散布式定时任务可以有效地管理这些任务。散布式定时任务还可以帮助优化系统的性能和响应时间,由于它们可以在多个节点上并行处理要求,从而减少等待时间和系统压力。

分布式定时任务java-分布式定时任务

实时任务和定时任务优缺点

把分散的,可靠性差的计划任务纳入统一的平台,并实现集群管理调度和分布式部署的一种定时任务的管理方式。叫做分布式定时任务。

是由当当网基于quartz 二次开发之后的分布式调度解决方案 , 由两个相对独立的子项目Elastic-Job-Lite和Elastic-Job-Cloud组成 。

一、.为什么要使用elasticjob

1. 可动态修改任务执行时间, 解决quartz 修改配置需重启系统问题. 可运维.

2: 可通过调整分片的方式, 动态调整任务执行线程的数量. 动态改变任务吞吐量.

3: Lite-Job 一台机器能起一个实例, 多台机器分别起实例同时执行, 解决quartz 单机执行问题, 可扩展.

二、elasticjob原理

底层执行仍然采用quartz,执行过程中会对数据进行取膜。取膜结果与当前服务器拥有的分片做比较,相等则执行,否则不予执行。

单机多分片情形job触发时会new多个线程执行(每个线程的分片数不同)

多机多分片情形job触发时会先去zookeeper节点下的leader节点检测看是否有sharding目录下的necssary节点,有则会重新执行分片。分片策略参考如下。

三、分片策略

1.AverageAllocationJobShardingStrategy

基于平均分配算法的分片策略,也是默认的分片策略。

如果分片不能整除,则不能整除的多余分片将依次追加到序号小的服务器。如

如果有3台服务器,分成9片,则每台服务器分到的分片是1=[0,1,2], 2=[3,4,5], 3=[6,7,8]

如果有3台服务器,分成8片,则每台服务器分到的分片是1=[0,1,6], 2=[2,3,7], 3=[4,5]

如果有3台服务器,分成10片,则每台服务器分到的分片是1=[0,1,2,9], 2=[3,4,5], 3=[6,7,8]

2.OdevitySortByNameJobShardingStrategy

根据作业名的哈希值奇偶数决定IP升降序算法的分片策略。

作业名的哈希值为奇数则IP升序,作业名的哈希值为偶数则IP降序。

用于不同的作业平均分配负载至不同的服务器。

AverageAllocationJobShardingStrategy的缺点是,一旦分片数小于作业服务器数,作业将永远分配至IP地址靠前的服务器,导致IP地址靠后的服务器空闲。而OdevitySortByNameJobShardingStrategy则可以根据作业名称重新分配服务器负载。如

如果有3台服务器,分成2片,作业名称的哈希值为奇数,则每台服务器分到的分片是1=[0], 2=, 3=[]

如果有3台服务器,分成2片,作业名称的哈希值为偶数,则每台服务器分到的分片是3=[0], 2=, 1=[]

3.RotateServerByNameJobShardingStrategy

根据作业名的哈希值对服务器列表进行轮转的分片策略。

四、处理方式

1、SimpleJob类型处理方式

意为简单实现,未经任何封装的类型。需实现SimpleJob接口。该接口仅提供单一方法用于覆盖,此方法将定时执行。与Quartz原生接口相似,但提供了弹性扩缩容和分片等功能。

2、DataflowJob类型作业

流式处理类型作业

即使实现了DataflowJob接口 默认也是不开启流式作业。

何为流式? 就是fetchData后List,调用processData时候,传整个list。执行后再去fetch,如果还有符合条件的继续processData。

非流式只有时间片到了才触发执行。

还有一点, fetch的List, 会遍历list,每条记录作为task扔到线程中,processData(List),每次处理的都是一条数据。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。