调度系统揭秘(下):调度算法与架构设计

文章目录

  • 一、调度算法
    • 1.1、广度优先:
    • 1.2、深度优先
    • 1.3、总结
        • 广度优先搜索(BFS)
        • 深度优先搜索(DFS)
  • 二、架构设计
    • 2.1、Master/Slave架构
      • 优劣分析
    • 2.2、Leader架构
      • 优劣分析
    • 2.3、总结

一、调度算法

在调度系统中,调度算法常见是以下两种:

  1. 广度优先
  2. 深度优先

1.1、广度优先:

广度优先搜索算法按照任务之间的依赖关系进行逐级遍历,先执行所有直接前置任务,再执行所有直接后继任务,以此类推,直到所有的任务都被遍历和执行完成。其特点如下:

  1. 执行顺序合理:广度优先搜索保证所有任务都会按照其执行顺序被执行,从而能够保证任务之间的依赖关系得到满足。
  2. 适合处理大量的任务:由于广度优先搜索采用逐层遍历的方式,因此能够高效地处理大量的任务,提高作业的执行效率。
  3. 消耗较多的资源:由于需要保存每个任务的前置和后继关系,因此广度优先搜索可能会占用较多的内存和计算资源。
  4. 不适合处理复杂的依赖关系:当任务之间存在复杂的依赖关系时,使用广度优先搜索可能会导致调度效率降低

示例:
在这里插入图片描述

  1. 这里的广度优先是指先优先将下一梯队任务放置在任务队列中,而并非指B、C任务必须全部执行完毕后才可以运行D、E、F,如果B先运行结束可以直接调度D任务。
  2. 由于B、C任务的执行时间各不相同又互不关联,例如B任务执行3秒,C任务执行30秒,此时如果阻塞B的下游任务意义不大
  3. 由于J 依赖G、H;正确的执行应该是G、H都执行完毕后再执行J,否则会执行两次J任务;故此处应加一层业务判断:先执行完毕的任务应先判断下游任务是否还依赖其他上游,若其他上游任务没有运行完毕则不触发下游任务,由其他上游任务运行成功后再触发J(此处建议使用责任链模式,在判断是否需要调度下游任务时只有通过责任链中的各种规则后方可调度)

广度优先适用于按照“层次”优先级依次调度任务,批量数据处理等;例如BI中表的依赖关系:上图中的D表依赖B表数据,只有当B表数据更新后才可触发J任务

1.2、深度优先

深度优先搜索算法按照某一个任务开始,一直往下执行该任务的后继任务,直到该任务的所有后继任务都被执行完毕,然后再回溯到该任务的前置任务再依次执行其后继任务,以此类推,直到所有的任务都被遍历和执行完成。其特点如下:

  1. 消耗较少的资源:由于深度优先搜索只需要保存当前调度路径上的部分信息,因此相对于广度优先搜索来说,它消耗的内存和计算资源较少。
  2. 不保证任务的执行顺序:深度优先搜索不保证任务按照其执行顺序被执行,可能会导致任务之间的依赖关系得不到满足。

示例:
在这里插入图片描述

  1. 关于H、G节点是否要触发两次任务J需要根据业务需求而定,可以通过增加一层业务判断从而只调用一次任务J
  2. 当B分支全部执行完毕后会回溯到A节点从而触发C分支的全部任务

深度优先搜索适合处理任务之间的依赖关系比较复杂、数量较多的作业,或者不要求保证任务按照其执行顺序被执行的场景。

1.3、总结

广度优先搜索(BFS)

广度优先搜索按照任务之间的依赖关系逐级遍历,先执行所有直接前置任务,再执行所有直接后继任务。其特点如下:

  1. 执行顺序合理:保证所有任务按照其执行顺序执行,满足任务之间的依赖关系。
  2. 适合处理大量任务:采用逐层遍历方式,高效处理大量任务,提高作业执行效率。
  3. 消耗较多资源:需要保存每个任务的前置和后继关系,占用较多内存和计算资源。
  4. 不适合处理复杂依赖关系:复杂依赖关系可能导致调度效率降低。

广度优先适用于按“层次”优先级依次调度任务,适合批量数据处理等场景。例如在BI系统中,表的依赖关系决定了数据更新触发的顺序。

深度优先搜索(DFS)

深度优先搜索从某个任务开始,一直执行其后继任务,直到该任务的所有后继任务都执行完毕,再回溯到前置任务,依次类推,直到所有任务遍历和执行完成。其特点如下:

  1. 消耗较少资源:只需保存当前调度路径上的部分信息,相对于BFS,内存和计算资源消耗较少。
  2. 不保证任务执行顺序:可能导致任务依赖关系得不到满足,任务执行顺序无法保证。

深度优先适合处理任务依赖关系复杂、数量较多的作业,或不要求任务按执行顺序执行的场景。

综述

广度优先搜索适用于任务之间依赖关系简单、需要按顺序执行的场景,适合批量数据处理。深度优先搜索适用于任务依赖关系复杂、数量较多,或不要求按顺序执行的场景。在实际应用中,选择合适的调度算法需要根据任务的具体特点和需求综合考虑。

二、架构设计

调度系统在服务架构设计上一般分为以下两种:

  1. Master/Slave架构
  2. Leader架构

2.1、Master/Slave架构

Master/Slave架构是一种常见的调度系统架构,其中主节点(Master)负责任务的调度和监控,从节点(Slave)负责任务的执行。以下是常见的Master/Slave架构设计:
在这里插入图片描述

  1. manager节点负责任务分配、元数据管理、worker宕机重试以及对外提供接口能力等,而worker节点主要负责任务执行
  2. manager节点和worker节点都可以布置多活,通过nacos对外提供服务和负载均衡
  3. manager、worker服务均不保留元数据信息,元数据存储在数据库中,只有manager服务可以操作元数据
  4. manager通过redis队列向下分发待执行任务,worker节点抢占redis队列中的任务并执行,该设计实现任务分配的均衡,确保每个Worker节点的任务负载均衡,同时通过Redis队列下发任务可以提高系统的可扩展性,轻松地扩展到多个Worker节点,从而提高系统的可扩展性和吞吐量,最后该设计可以实现任务的异步执行。
  5. manager与worker节点可以进行通讯,实现worker心跳及任务执行状态更新等操作,从而保证任务的可靠性

优劣分析

优点:

  1. 可扩展性好:Master/Slave架构可以轻松地扩展到多个从节点,以满足系统的可扩展性需求。
  2. 高可用性:Master/Slave架构可以实现多活从而保证高可用性。
  3. 任务调度和监控功能强大:Master节点负责任务的调度和监控,可以实现更加灵活的任务调度和监控功能。
  4. 任务分配均衡:Master/Slave架构可以实现任务分配均衡,确保每个从节点的任务负载均衡。

缺点:

  1. 通信延迟:Master/Slave架构中,从节点需要不断地向主节点汇报任务执行情况,这可能会导致通信延迟问题。
  2. 系统复杂度:Master/Slave架构中,需要管理和维护多个从节点,这可能会增加系统的复杂度和维护成本。
  3. 部署复杂:Master/Slave架构中,若要实现最低级别的高可靠、高可用性,最少需要4个服务,即:双master、双slave

2.2、Leader架构

下图中的Leader架构和传统Leader架构有所不同,传统Leader架构中Leader节点只负责任务的调度和监控,Follower节点负责执行;而下图架构中无论是Leader节点还是Follower节点都可以进行任务调度和任务执行,唯一区别在于Leader节点多了一项节点存活监听功能,负责将宕机节点的任务从新调度。

在这里插入图片描述

  1. Leader选举可以通过抢占redis锁竞选,竞选失败的节点成为follower并且会轮询抢占,直到leader节点宕机后再参与竞选
  2. Leader节点和Follower节点都可以进行任务分配和执行,两种服务皆不保留元数据,元数据存储至数据库中
  3. Leader、Follower节点都可对外提供接口能力,通过Nacos实现服务发现和负载均衡
  4. Leader节点相较于Follower节点多了一项节点监听功能,所有节点都会注册到redis-节点注册列表,并会心跳更新各自节点的时间戳,leader节点定时轮询访问节点注册列表,当发现某个节点更新时间超过阈值便认定该节点宕机,通过访问数据库将其正在运行中的任务重新分配到redis任务队列中重试
  5. 在数据库任务实例表中应有负责运行该任务服务唯一ID的标识字段,用于节点宕机后Leader可以根据节点注册列表中的服务ID与任务实例表中的服务标识字段进行匹配,将其未运行成功的任务再次调度,实现高可靠性

优劣分析

优点:

  1. 可扩展性好:Leader架构可以轻松地扩展到多个从节点,以满足系统的可扩展性需求。
  2. 部署简单:若要实现最低级别的高可靠、高可用性,之需要2个服务即可实现。

缺点:

  1. 监控开销:Leader架构中,leader节点需要定期轮询节点注册列表,从节点需要定期汇报心跳,增加网络和系统计算开销
  2. 性能瓶颈:Leader架构中,由于每个节点都负责任务分配及任务执行,对单个服务可能存在压力过大、性能等问题。

2.3、总结

Master/Slave架构和Leader架构各有优缺点。在选择调度系统架构时,需要根据具体的应用场景和需求综合考虑。如果系统需要强大的任务调度和监控功能,以及高可用性和可扩展性,可以选择Master/Slave架构;如果系统需要更简化的部署和动态的任务调度,可以选择Leader架构。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/779550.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【】AI八股-神经网络相关

Deep-Learning-Interview-Book/docs/深度学习.md at master amusi/Deep-Learning-Interview-Book GitHub 网上相关总结: 小菜鸡写一写基础深度学习的问题(复制大佬的,自己复习用) - 知乎 (zhihu.com) CV面试问题准备持续更新贴 …

本安防爆手机:危险环境下的安全通信解决方案

在石油化工、煤矿、天然气等危险环境中,通信安全是保障工作人员生命安全和生产顺利进行的关键。防爆智能手机作为专为这些环境设计的通信工具,提供了全方位的安全通信解决方案。 防爆设计与材料: 防爆智能手机采用特殊的防爆结构和材料&…

机械硬盘故障分析及损坏处理(坏道屏蔽)

机械硬盘故障分析: 1、加电后没有声音就是电机不转,是电路问题,更换电路板解决。 2、加电后电机转,有连续敲击声音,或有异响,磁头损坏或机械故障。 3、加电后电机转,运行正常,BIOS无…

建立数据通路(一)

指令周期(Instruction Cycle) 指令种类 Fetch(取得指令) 也就是从PC寄存器里找到对应的指令地址,根据指令地址从内存里把具体的指令,加载到指令寄存器中然后把PC寄存器自增,好在未来执行下一条指令 Decode(指令译码) 也就是根据指令寄存器里…

Apache Seata新特性支持 -- undo_log压缩

本文来自 Apache Seata官方文档,欢迎访问官网,查看更多深度文章。 本文来自 Apache Seata官方文档,欢迎访问官网,查看更多深度文章。 Apache Seata新特性支持 – undo_log压缩 Seata新特性支持 – undo_log压缩 现状 & 痛点…

类与对像(1)

好几个月没有写了,差了好多,这些天补回来吧。 接下来,让我们正式步入C与C语言开始不同的地方。 我对类的理解:类是对于具有相同或相似属性的数据集合。 类的关键词:class,public,protected&a…

2024年加密货币市场展望:L1、L2、LSD、Web3 和 GameFi 板块的全面分析与预测

随着区块链技术的快速发展,加密货币市场在2024年继续展现出蓬勃的生机和创新的潜力。本文将深入分析L1、L2、LSD、Web3和GameFi这五大板块的发展趋势和预测,帮助投资者和爱好者更好地理解和把握市场机遇。 一、L1:基础层协议的持续进化 L1&a…

python自动化办公之cryptography加密解密

目录 用到的库 实现效果 代码部分 1、加密2024.txt文件 2、解密2024.txt文件 用到的库 cryptography 实现效果 加密文件和解密文件 代码部分 1、加密2024.txt文件 # 加密 from cryptography.fernet import Fernet # 生成加密密钥 keyFernet.generate_key() cipher_s…

K8S 部署 EFK

安装说明 系统版本为 Centos7.9 内核版本为 6.3.5-1.el7 K8S版本为 v1.26.14 ES官网 开始安装 本次安装使用官方ECK方式部署 EFK,部署的是当前的最新版本。 在 Kubernetes 集群中部署 ECK 安装自定义资源 如果能打开这个网址的话直接用这个命令安装,打不开的话…

创建一个不带框架的javaweb工程

点击新建 选择Maven,然后在Archetype里面选择 webapp选项(注意这里需要配置好Maven的环境 如果没配好Maven引入依赖的时候会引不进来) 如果Maven配置之后就会显示配置成功 然后我们要配置tomacat的依赖 jde选择默认 然后点击部署 选择工件&a…

高阶算法班从入门到精通之路课程

本课程旨在帮助学员深入理解算法与数据结构的核心概念,从而掌握高级算法设计与分析技能。每集课程内容精心设计,涵盖了常用数据结构、经典算法及其应用场景等方面的深度讲解,同时通过大量实例演练,帮助学员提升解决实际编程难题的…

2000-2022年地级市数字经济指数(含控制变量)

2000-2022年地级市数字经济指数(含控制变量) 目录 数字经济对区域经济发展的影响实证研究 一、引言 二、文献综述 三、数据来源与变量说明 四、实证模型 五、程序代码与运行结果 数字经济对区域经济发展的影响实证研究 摘要: 本文旨在…

【分布式计算框架 MapReduce】高级编程—搜索日志数据分析

目录 一、对于 sogou_500w_utf 数据,使用 MapReduce 编程模型完成对以下数据的分析任务 1. 统计 2011-12-30 日搜索记录,每个时间段的搜索次数 (1)运行截图 (2) 源代码 2. 统计 2011-12-30 日 3 点至 …

C++类与对象

1. stack声明与定义 引入构造器实现 自定义 栈大小 // constructor构造器 // 1. 与类名相同,无返回值,被系统生成对象时自动调用,用于初始化 // 2. 可以有参数,构造器的重载,默认参数,重载和默认参数不同…

2024阿里国际春招笔试

第一题 0 解题思路: 数据范围很大,肯定得找规律。 当n1时,0,1,结果为0 当n2时,00,01,10,11,结果为1 当n3时,000,001,010&a…

38 IO流

目录 C语言的输入和输出流是什么CIO流stringstream的简单介绍 1. C语言的输入与输出 C语言中我们用到的最频繁的输出方式是scanf和printf,scanf:从标准输入设备(键盘)读取数据,并将值存在变量中。printf:…

Linux 系统管理4——账号管理

一、用户账号管理 1、用户账号概述 &#xff08;1&#xff09;用户账号的常见分类&#xff1a; 1>超级用户&#xff1a;root uid0 gid0 权限最大。 2>普通用户&#xff1a;uid>500 做一般权限的系统管理&#xff0c;权限有限。 3>程序用户&#xff1a;1<uid&l…

昇思25天学习打卡营第12天 | LLM原理和实践:MindNLP ChatGLM-6B StreamChat

1. MindNLP ChatGLM-6B StreamChat 本案例基于MindNLP和ChatGLM-6B实现一个聊天应用。 ChatGLM-6B应该是国内第一个发布的可以在消费级显卡上进行推理部署的国产开源大模型&#xff0c;2023年3月就发布了。我在23年6月份的时候就在自己的笔记本电脑上部署测试过&#xff0c;当…

2024年江苏省研究生数学建模科研创新实践大赛C题气象数据高精度融合技术研究论文和代码分析

经过不懈的努力&#xff0c; 2024年江苏省研究生数学建模科研创新实践大赛C题气象数据高精度融合技术研究论文和代码已完成&#xff0c;代码为C题全部问题的代码&#xff0c;论文包括摘要、问题重述、问题分析、模型假设、符号说明、模型的建立和求解&#xff08;问题1模型的建…

绝区壹--LLM的构建模块

前言 语言是人类交流的本质&#xff0c;大型语言模型 (LLM) 凭借其出色的理解和生成类似人类的文本的能力&#xff0c;彻底改变了我们与语言互动和利用语言的方式。深入研究 LLM 的构建块&#xff08;向量、标记和嵌入&#xff09;&#xff0c;揭示了使这些模型能够以前所未有…