首页 > 编程知识 正文

分布式的任务结果汇总,轻量级分布式定时任务

时间:2023-05-03 18:32:31 阅读:13101 作者:582

1 )什么是分布式定时任务

2 )为什么要采用分散定时任务;

3 )如何设计实现分布式定时任务;

4 )当前流行的分布式时间任务框架;

1 .什么是分散定时任务:

首先,我们需要理解计划任务这个概念。 计划任务是指在计划时间运行的程序或周期性运行的程序。 我们最常见的是Linux上的“‘crontab’和Windows上的“计划任务”。

那么,什么是分布式调度任务? 个人认为,这是一种将分布式不可靠的调度任务嵌入统一的平台中,实现集群管理调度和分布式配置的调度任务管理方式。 称为分布式定时任务。

2、为什么要采用分散定时任务:

单点任务的缺点:

功能比较简单,交互性差,任务部署效率低,开发和维护成本比较高,不能很好地满足各系统定时任务的管理和控制,尤其在多系统环境下更为突出;

许多任务是独立部署的,可用性较低

任务跟踪和警告很难实现。

分布式计划任务的优点:

通过以集群方式进行管理调度,大幅降低了开发和维护成本

分布式配置可确保系统的高可用性、可扩展性和负载平衡,并提高容错能力。

通过控制台部署和管理计划任务,灵活高效

这两个任务都持久化在数据库中,避免了停机和数据丢失带来的风险,同时具有完整的任务失败重做机制和详细的任务跟踪和警告策略。

3 )如何设计和实现分布式调度任务:

3.1分时方案

严格划分时段,计划任务交替运行,主系统停机后备用系统仍在运行,但处理初期有所拖延。

缺点:周期延长了。

untitled.png

3.2 HA高可用性方案:

正常情况下,主系统工作,备份系统等待,心跳检测发现主系统出现故障的备份系统已启动。

缺点:单个系统不能平衡负载,只能垂直扩展,也就是硬件级升级,不能水平扩展。

untitled1.png

3.3多心跳方式:

采用多路心跳进行服务级别、流程级别的IP和端口级别的心跳检查。 正常情况下主系统启动,备用系统待机,心跳检查主系统发生故障,备用系统启动,再次检测到主系统启动时,将执行权返回主系统。

缺点:开发复杂,要求程序稳健性。

untitled2.png

3.4任务切断方案:

A、B两台服务器必须同时运行,启动必须有前后。 谁先启动谁先锁定,其他服务器只能等待。 他们同时监视排他锁定,一旦发现锁定被解除,其他服务就会先将其抢走,在其执行、执行之前进行排他锁定。

优点:可以进一步扩展多服务器。

缺点:开发复杂,要求程序稳健性,有时会出现无法释放锁定的问题。

untitled4.png

3.5任务轮询或任务轮询优先队列方案

每个服务器首次启动时加入队列

每次执行任务时,首先判断自己是否是当前可执行的任务,如果是,则执行;

如果不是当前正在执行的任务,请检查自己是否在队列中,如果在,则将其挤出,如果不在队列中,则输入队列。

untitled5.png

综上所述,3.5方案才是首选,可扩展性强,开发复杂度不高。 那么,这个方案所需的技术原理是什么呢? 那是分布式互斥锁和队列。

3.6原理:

分布式互斥:

排他锁也称为排他锁,用于同时管理多个进程和多个进程,一个进程或线程同时只能操作一个功能。 进程,将线程中的锁定扩展到internet上,锁定在一个节点上运行的进程或线程,然后解锁操作。 这将控制节点上进程或线程的并发。 下图:

untitled7.png

两台服务器正在执行计划任务。 其中,serverA的T2进行解锁操作,其他程序在解锁之前无法运行。 那么,如果serverA在锁定时停机该怎么办? 会一直变成别的锁定状态吗? 在中,可以为每个锁定设置超时阈值,并在超时后自动解除锁定。 避免停机时释放锁定。 另外,考虑到命名空间的问题,主要是防止同名的锁定发生并被覆盖。

队列:

在上面的基础上,为了执行任务而排队。

untitled8.png

从上图可以看出,在TaskQueue中,矩阵的状况、运行是自上而下的。 当然,这个顺序可以自己设定规则。 只需要先发出的远程就可以了。 此外,任务队列还必须至少创建两个节点。 他们必须按照主从结构原则,主节点实时与从节点同步数据,确保主节点不可用,从节点可以替代。 当然,这里可能更好,因为可以使用循环方法,也可以添加数据异步,以便所有节点都可以从主节点切换,或者根据运行情况进行分配

难度也有所提高,但是大大增加了高可用性。

3.7 总结:

最后,我们要根据我们实际的情况,需要提供数据库和缓存方面的一些配套服务,这里就不做详解;

这样我们整体的一个分布式定时任务平台就可以实现了,就可以保证计划任务的分布式运行。

4,当前比较流行的分布式定时任务框架:

4.1 Quartz:

Quartz是Java领域最著名的开源任务调度工具。Quartz提供了极为广泛的特性如持久化任务,集群和分布式任务

特点:

完全由Java写成,同时可以很方便的和java的另外一个框架spring集成;

强大的调度功能:支持丰富多样的调度方法,可以满足各种常规及特殊需求;

灵活的应用方式:支持任务和调度的多种组合方式,支持调度数据的多种存储方式;

分布式和集群能力,负载均衡和高可用性;

4.2 Elastic-job:

Elastic-Job是ddframe中dd-job的作业模块中分离出来的分布式弹性作业框架。去掉了和dd-job中的监控和ddframe接入规范部分。该项目基于成熟的开源产品Quartz和 Zookeeper及其客户端Curator进行二次开发

特点:

定时任务:基于成熟的定时任务作业框架Quartz cron表达式执行定时任务;

作业注册中心:基于Zookeeper和其客户端Curator实现全局作业注册控制中心。用于注册,控制和协调分布式作业执行。

作业分片:将要给任务分片成多个小任务项到多服务器上同时执行;

弹性扩容缩容:运行中的作业服务器崩溃,或新增N台作业服务器,作业框架将在下次作业执行前重新分片,不影响当前作业执行;

支持多种作业执行模式:支持OneOff,Perpetual和SequenecePerpetual三种作业模式;

失效转移:运行中的作业服务器崩溃不会导致重新分片,只会在下次作业启动时分片。启用失效转移功能可以在本次作业执行过程中,监测其他作业服务器空闲,抓取未完成的孤儿分片项 执行;

运行时状态收集:监控作业运行时状态,统计最近一段时间处理的数据成功和失败数量,记录作业上次运行开始时间,结束时间和下次运行时间;

作业停止,恢复和禁用:用于操作作业启动和停止,并可以禁止某作业运行,一般在上线时常用;

被错过执行的作业重触发:自动记录错过执行的作业,并在上次作业完成后自动触发。

多线程快速处理数据:使用多线程处理抓取到的数据,提升吞吐量;

幂等性:重复作业任务项判定,不重复执行已运行的作业任务项;

容错处理:作业服务器和Zookeeper服务器通信失败后则立即停止作业运行,防止作业注册中心将失效的分片分项配给其他作业服务器,而当前作业服务器任在执行任务,导致重复执行。

Spring支持:支持Spring容器,自定义命名空间,支持占位符;

运维平台:提供了运维平台,可以管理作业和注册中心。

从以上可以看出Elastic-job是在Quartz的基础上又做了一次全面的升级,做了配套的周边基础服务工作,完全成为了一个成熟的分布式定时任务框架。后面会分别介绍Quartz和 Elastic-job的详细原理和具体的使用方法。

关于quartz分布式定时任务,可以参考:

分布式定时任务(二)

分布式定时任务(三)

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。