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

文章目录

  • 一、调度算法
    • 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架构。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.hmallox勒索病毒:全面防御策略

引言 近年来,随着网络技术的飞速发展,勒索病毒成为网络安全领域的一大威胁,其中.hmallox勒索病毒以其高度的隐蔽性和破坏性,尤为引人注目。这种病毒通过加密用户计算机中的重要文件,并以支付赎金作为解密条件&#xff…

MyBatis中二级缓存的配置与实现原理

大家好,我是王有志,一个分享硬核 Java 技术的金融摸鱼侠,欢迎大家加入 Java 人自己的交流群“共同富裕的 Java 人”。 上一篇文章《MyBatis中一级缓存的配置与实现原理》中,我们已经掌握了 MyBatis 一级缓存的配置(虽然…

vue3实现echarts——小demo

版本&#xff1a; 效果&#xff1a; 代码&#xff1a; <template><div class"middle-box"><div class"box-title">检验排名TOP10</div><div class"box-echart" id"chart1" :loading"loading1"&…

Linux操作系统中逻辑卷的缩减

流程&#xff1a;第一步先是要缩减逻辑卷的文件系统。 第二步就是要去缩减逻辑卷的物理边界。 注意事项&#xff1a; 1.逻辑卷要处于卸载状态&#xff0c; 2.建议先备份数据 3.在缩减逻辑卷的时候&#xff0c;要注意xfs文件系统的逻辑卷是不支持直接进行缩减的。 4.在缩减…

Linux:DHCP服务配置

目录 一、DHCP概述以及DHCP的好处 1.1、概述 1.2、DHCP的好处 二、DHCP的模式与分配方式 2.1、模式 2.2、DHCP的分配方式 三、DHCP工作原理 四、安装DHCP服务 五、DHCP局部配置并且测试 5.1、subnet 网段声明 5.2、客户机预留指定的固定ip地址 一、DHCP概述以及DHCP…

下载nvm 管理多个node版本并切换

nvm管理多个node版本并切换 安装nvm时不能安装任何node版本&#xff08;先删除node再安装nvm&#xff09;&#xff0c;保证系统无任何node.js残留 1. 卸载node 控制面板中卸载nodejs 删除以下文件夹&#xff1a; C:\Program Files (x86)\Nodejs C:\Program Files\Nodejs C…

MybatisX插件的简单使用教程

搜索mybatis 开始生成 module path&#xff1a;当前项目 base package:生成的包名&#xff0c;建议先独立生成一个&#xff0c;和你原本的项目分开 encoding&#xff1a;编码&#xff0c;建议UTF-8 class name strategy&#xff1a;命名选择 推荐选择camel&#xff1a;驼峰命…

Go:hello world

开启转职->Go开发工程师 下面是我的第一个go的程序 在上面的程序介绍&#xff1a; 1、package main 第一行代码package main定义了包名。必须在源文件中非注释的第一行指明这个文件属于哪个包&#xff0c;如&#xff1a;package main。package main表示一个可独立执行的程…

spRAG框架学习小结

spRAG是什么 spRAG是一个针对非结构化数据的检索引擎。它特别擅长处理对密集文本的复杂查询&#xff0c;比如财务报告、法律文件和学术论文。有两种关键方法用于提高性能&#xff0c;超越了普通的RAG系统&#xff1a; 自动上下文&#xff08;AutoContext&#xff09;&#xff…

µCOS-III 任务同步机制-任务信号量

1. 什么是任务信号量 任务信号量是一种用于任务间同步和通信的计数器&#xff0c;通常用于解决任务间的竞争条件和资源共享问题。在C/OS-III中&#xff0c;任务信号量提供了二进制信号量和计数信号量两种类型&#xff1a; 二进制信号量&#xff1a;只能取值0或1&#xff0c;适…

Debezium报错处理系列之第109篇:解决升级日志解析jar包重启集群出现的字段类型和值不匹配的错误

Debezium报错处理系列之第109篇:解决升级日志解析jar包重启集群出现的字段类型和值不匹配的错误 一、完整报错二、错误原因三、解决方法Debezium从入门到精通系列之:研究Debezium技术遇到的各种错误解决方法汇总: Debezium从入门到精通系列之:百篇系列文章汇总之研究Debezi…

传统IO和NIO文件拷贝过程

参考&#xff1a;https://blog.csdn.net/weixin_57323780/article/details/130250582

昇思25天学习打卡营第9天|ResNet50图像分类

一、Resnet残差网络模型 构建残差网络结构;Building BlockBottleneck 残差结构由两个分支构成&#xff1a;一个主分支 &#x1d439;(&#x1d465;)&#xff0c;一个shortcuts&#xff08;图中弧线表示,&#x1d465;&#xff09;。 得到残差网络结构:&#x1d439;(&#x…

SpringMVC常见的注解

一、Spring MVC Spring Web MVC是基于ServletAPI构建的原始web 框架&#xff0c;一开始就包含在Spring 框架中&#xff0c;通常被称为“Spring MVC”。 1.MVC 是什么&#xff1f; MVC(Model、View、Controller&#xff09;是软件工程中的一种软件架构设计模型。它把软件系统分…

STM32-输入捕获IC和编码器接口

本内容基于江协科技STM32视频学习之后整理而得。 文章目录 1. 输入捕获IC1.1 输入捕获IC简介1.2 频率测量1.3 输入捕获通道1.4 主从触发模式1.5 输入捕获基本结构1.6 PWMI基本结构 2. 输入捕获库函数及代码2.1 输入捕获库函数2.2 6-6 输入捕获模式测频率2.2.1 硬件连接2.2.2 硬…

2024暑假集训

Day1——枚举 Day2——测试 Day3——贪心 Day4、5——测试 ——————————————————————————————————————————— Day3T7&Day5T7:没思路 Day3T8:不知道怎么排序筛选 Day5T5:没有算法难度&#xff0c;但是不知道怎么处理2队奶牛的情…

什么牌子的头戴式蓝牙耳机好性价比高?

说起性价比高的头戴式蓝牙耳机,就不得不提倍思H1s,作为倍思最新推出的新款,在各项功能上都实现了不错的升级,二字开头的价格,配置却毫不含糊, 倍思H1s的音质表现堪称一流。它采用了40mm天然生物纤维振膜,这种振膜柔韧而有弹性,能够显著提升低音的量感。无论是深沉的低音还是清…

数据跨境法案:美国篇上

近年来随着全球数字化的加速发展&#xff0c;数据已成为国家竞争力的重要基石。在这样的背景下&#xff0c;中国软件和技术出海的场景日益丰富。本系列邀请到在跨境数据方面的研究人员针对海外的数据跨境政策进行解读。 本期将针对美国对数据跨境流动的态度和政策进行阐释。过…

非比较排序 计数排序

1.核心思路 首先要找出max 和 min&#xff0c;最大值 - 最小值 1&#xff0c;就可以计算出数据在什么范围然后创建计数数组大小&#xff0c;a[i] - min 在数组的相对位置计数 通过自然序列排序然后把计数好的值&#xff0c;按照顺序依次放回原数组即可 动图解释&#xff0c;其…

Linux—网络设置

目录 一、ifconfig——查看网络配置 1、查看网络接口信息 1.1、查看所有网络接口 1.2、查看具体的网络接口 2、修改网络配置 3、添加网络接口 4、禁用/激活网卡 二、hostname——查看主机名称 1、查看主机名称 2、临时修改主机名称 3、永久修改主机名称 4、查看本…