百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

JAVA架构师之路-教你如何去实现一个分布式定时任务

ccwgpt 2024-10-16 08:07 35 浏览 0 评论

什么是分布式定时任务

首先,我们要了解计划任务这个概念,计划任务是指由计划的定时运行或者周期性运行的程序。我们最常见的就是Linux的‘crontab’和Windows的‘计划任务’。

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

为什么要采用分布式定时任务

单点定时任务的缺点:

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

许多任务都是单机部署,可用性差;

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

分布式定时任务的优势:

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

分布式部署,保证了系统的高可用性,伸缩性,负载均衡,提高了容错;

可以通过控制台部署和管理定时任务,方便灵活高效;

任务都可以持久化到数据库,避免了宕机和数据丢失带来的隐患,同时有完善的任务失败重做机制和详细的任务跟踪及告警策略。

怎么样设计和实现一个分布式定时任务

分时方案

严格划分时间片,交替运行计划任务,当主系统宕机后,备用系统仍然工作,但是处理初期被拉长了。

缺点:周期延长了。


untitled.png

HA高可用方案:

正常情况下主系统工作,备用系统守候,心跳检测发现主系统出现故障备用系统启动。

缺点:单一系统,不能做负载均衡,只能垂直扩展,也就是硬件层面的升级,无法做水平扩展。

untitled1.png

多路心跳方案:

采用多路心跳,做服务级,进程级的,IP和端口级别的心跳检测,正常情况是主系统工作,备用系统守候,心跳检测主系统出现故障,备用系统启动,当再次检测到主系统工作,则将执行权交回主系统。

缺点:开发比较复杂,程序健壮性要求高。


任务抢占方案

A,B两台服务器同时工作,启动需要存在一前一后,谁先启动谁率先加锁,其他服务器只能等待,他们同时对互斥锁进行监控,一旦发现锁被释放,其他服务那个先抢到,那个运行,运行前加排他锁。

优点:可以进一步实现多服务器横向扩展。

缺点:开发复杂,程序健壮性要求高,有时候会出现不释放锁的问题。


任务轮询或任务轮询+抢占排队方案

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

每次任务运行首先判断自己是否是当前可运行任务,如果是便运行;

如果不是当前运行的任务,检查自己是否在队列中,如果在,便推出,如果不在队列中,便键入队列。


通过以上这些方案,可以看出3.5的方案才是优先选择的,扩展性好,开发复杂度不是很高。那么这种方案需要的需要的技术原理是什么呢,那就是分布式互斥锁和队列。

原理:

分布式互斥锁:

互斥锁也叫排他锁,用于并发时管理多进程和多进程同一时刻只能有一个进程或者线程操作一个功能。我们将进程,线程中的锁延伸到互联网上,实现对一个节点运行的进程或线程加 锁,解锁操作。这样便能控制节点上的进程或线程的并发。如下图:

有两台服务器运行定时任务,其中serverA的T2做了加锁操作,其他程序必须等它释放锁了才能运行。 那么如果serverA在加锁的过程中,出现宕机怎么办,是否会一直处于别锁状态。那么我们可以在每个锁都设置一个超时阈值,一旦超时便自动解锁。这样就不会因为宕机导致锁一直不被释 放。另外我们还要考虑命名空间的问题,主要是防止出现同名锁,导致被覆盖。

队列:

在上面的基础上,排队运行任务。

从上图中可以看出,TaskQueue中排队情况,运行是自上而下的,当然这个顺序可以自己设置规则,只需要先进先出的远程即可。另外,Task Queue我们需要做至少两个节点,他们遵循主 从结构的原则,主节点需要实时向从节点同步数据,保证在主节点不可用,从节点可以替代。当然,这里可以使用权重轮询的方式,加上数据异步同步,让所有节点都可以做主从的切换, 根据运行状况来分配,可能会更好,但是这样开发难度也有所提高,但是大大增加了高可用性。

为什么某些人会一直比你优秀,是因为他本身就很优秀还一直在持续努力变得更优秀,而你是不是还在满足于现状内心在窃喜!

合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

如何一起学习,有没有免费资料?

欢迎工作一到五年的 Java 的工程师朋友们加入的 Java 架构开发:770590461

本群提供免费的学习指导架构资料以及免费的解答

不懂得问题都可以在本群提出来之后还会有职业生涯规划以及面试指导







相关推荐

MoE模型已成新风口,AI基础设施竞速升级

机器之心报道编辑:Panda因为基准测试成绩与实际表现相差较大,近期开源的Llama4系列模型正陷入争议的漩涡之中,但有一点却毫无疑问:MoE(混合专家)定然是未来AI大模型的主流范式之一。...

Meta Spatial SDK重大改进:重塑Horizon OS应用开发格局

由文心大模型生成的文章摘要Meta持续深耕SpatialSDK技术生态,提供开自去年9月正式推出以来,Meta持续深耕其SpatialSDK技术生态,通过一系列重大迭代与功能增强,不断革新H...

"上云"到底是个啥?用"租房"给你讲明白IaaS/PaaS/SaaS的区别

半夜三点被机房报警电话惊醒,顶着黑眼圈排查服务器故障——这是十年前互联网公司运维的日常。而现在,程序员小王正敷着面膜刷剧,因为公司的系统全"搬"到了云上。"部署到云上"...

php宝塔搭建部署thinkphp机械设备响应式企业网站php源码

大家好啊,欢迎来到web测评。本期给大家带来一套php开发的机械设备响应式企业网站php源码,上次是谁要的系统项目啊,帮你找到了,还说不会搭建,让我帮忙录制一期教程,趁着今天有空,简单的录制测试了一下...

php宝塔搭建实战多端壁纸小程序源码一(wordpress后台安装篇)

大家好啊,我是测评君,欢迎来到web测评。本期给大家带来一套php开发的多端壁纸类型的小程序源码,后台是使用wordpress集成的,前端是使用uniapp开发的。今天先给大家分享后台怎么在宝塔里部署...

PHP 30 岁生日:语言和生态系统比以往任何时候都更强大

PHP8与30年前推出的不起眼的工具集截然不同,这得益于Laravel等现代框架和FrankenPHP等新工具。本月是PHP向世界发布的30周年纪念日。为了了解PHP多年来...

六种流行语言(C、C++、Python、JavaScript、PHP、Java)对比

有些人会说语言学到最后不都差不多吗?其实可以这样讲,也可以不这样讲。虽然每种语言的表达能力大部分是重合的,只是语法表现形式不一样,但是由于历史发展的原因,每种语言形成了自己的支撑环境,所以都有其主要的...

把喜欢的前端模版加上后台,小白速成课,不懂代码玩建站(下)

不懂代码,缺乏专业知识,同时又不满足于上淘宝购买建站系统?本文教你如何速成建站,如何将喜欢的html前端模版整合后台变成一套完整的网站程序!如果你熟练掌握这些技巧,一天可以搭建一个成熟的网站。本文的(...

php宝塔搭建实战小霸王站群池管理系统php源码

大家好啊,欢迎来到web测评。本期给大家带来一套php开发小霸王站群池管理系统php源码,上次是谁要的系统项目啊,帮你找到了,还说不会搭建,让我帮忙录制一期教程,趁着今天有空,简单的录制测试了一下,部...

从需求到上线:PHP+Uniapp校园圈子系统源码的架构设计与性能优化

一、需求分析与架构设计1.核心功能需求用户体系:支持手机号/微信登录、多角色权限(学生、教师、管理员)。圈子管理:支持创建/加入兴趣圈子(如学术、电竞)、标签分类、动态发布与审核。实时互动:点赞、评...

修改ZBLOG后台地址如此重要(zblog使用)

修改后台地址往往是很多网站新手们容易忽略的一个问题,但其实在一些大型网站中,网站后台地址如果能够被普通网民找到的话,严格意义上来说应该可以被称之为一个漏洞。今天要说的是个人博客程序Z-BlogPHP...

让PHP和Node.js同框共舞:解密php-node的革命性玩法!

你有没有想过,PHP和Node.js有朝一日能在一个进程里握手言和?不是“后端服务调用后端服务”,也不是“前端请求后端接口”,而是——直接共享内存、互传变量、同步执行逻辑。听起来像是幻想,但今天...

大牙PHP加密:为您的PHP代码安全穿上坚不可摧的“铠甲”

在数字化时代,PHP作为广泛应用的后端开发语言,其代码安全性直接关系到企业的核心利益。然而,源码泄露、恶意篡改等问题频发,如何有效保护PHP代码?大牙PHP加密应运而生,以专业级加密技术为开发者筑起安...

PHP正走向末路,加速死去(php r)

万物有开始就有结束。而如今PHP也步入了暮年。在这个时代,长盛不衰的唯一方法就是无可取代。一门技术如非必不可少,就会被慢慢遗忘。PHP不仅可有可无,而且会加剧开发工作的复杂性。与之相比,许多现代语...

vue怎么和后端php配合(vue怎么和后端对接计算案例)

Vue和后端PHP可以通过HTTP请求进行配合。首先,前端Vue可以使用axios库或者Vue自带的$http对象来发送HTTP请求到后端PHP接口。通过axios库发送POST、GET、PUT等请求...

取消回复欢迎 发表评论: