0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

简单介绍GaussDB网络调度涉及的调度算法

OSC开源社区 来源:OSCHINA 社区 2023-03-13 10:13 次阅读

一、常见的调度算法

QoS(Quality of Service)即服务质量,是一种调度控制机制,是网络设计和运维的重要技术。在带宽资源有限情况下,针对不同用户 / 业务采用不同的调度策略,为任务提供端到端的服务质量保证。

QoS 本身并不会拓展带宽,提升网络吞吐量,相反设计不合理的调度反而有可能降低整体吞吐量。QoS 的一个关键点是允许不平等的网络调度,降低时延要求低、性能和抖动不敏感的业务调度优先级,优先调度时延要求高、带宽要求一般不高的业务。

调度器是实现 QoS 的关键,调度器根据优先级和带宽配比进行业务调度。调度器的输入是要提供服务的数据包队列,输出是完成调度输出的一个个数据包。调度算法是调度器的核心,设计调度算法要充分考虑业务场景和用户需求,没有万能的调度算法,只有合适的调度算法。常见的调度算法有很多,这里我们只简单介绍 GaussDB 网络调度涉及的调度算法:

1.FIFO 调度

FIFO (First In Forst Out) 调度使用的是 FCFS 策略,是一种不考虑 QoS 的调度算法。FIFO 调度不进行报文分类,所有业务共用一个队列,按照请求进入队列顺序进行调度。如下图所示,三种不同业务的请求全部加入到一个队列中,按照 FIFO 的规则进行调度。

0313051c-bfbf-11ed-bfe3-dac502259ad0.png

FIFO 调度实现简单、开销小,但是 FIFO 不区分请求类型、不考虑 QoS,对时延、抖动敏感的业务不友好,无法保证关键业务服务质量。

2.SP 调度

SP (Strict Priority) 严格优先级调度严格按照队列优先级进行调度,只有在高优先级队列中请求全部调度完成的情况下,才会考虑调度低优先级队列中的请求。如下图所示,三种不同业务分别对应三种不同优先级的队列:高优队列、中优队列和低优队列。不同业务的请求分别加入到相应优先级队列中,调度时优先调度高优队列请求,高优队列中请求调度完成后,依次调度中优和低优队列请求。

032df976-bfbf-11ed-bfe3-dac502259ad0.png

SP 调度算法的实现比较简单,优点是可以保证关键业务可以优先调度到,可以最大限度的降低网络延迟和抖动;缺点是网络拥塞,高优先级队列中一直有请求时,会导致低优先级队列中请求一直调度不到,出现 “饿死” 的情况。

3.RR 调度

RR (Round Robin) 轮询调度通常采用分时机制,为每个队列分配一个时间片或调度时刻。RR 调度按照固定顺序循环调度每一个队列中的请求,每次调度相同数量(一般是 1 个)的请求,且在调度过程中不考虑任何优先级。算法较为简单且容易实现,同时不会产生 “饿死” 问题。如下图所示,RR 调度轮询调度队列 1/2/3 中的请求,每次调度一个队列中的一个请求,直到请求调度完成。

03455e7c-bfbf-11ed-bfe3-dac502259ad0.png

RR 调度假设所有队列的优先级和带宽需求都是相同的,调度时不考虑包长、队列时延和带宽需求。队列包长差异比较大时,可能导致不同队列实际占用带宽差异巨大,同时因为不考虑时延和带宽需求,导致无法做到对网络流量的精准隔离和调度。

4.WRR 调度

轮询调度保证了各队列在请求调度时的公平性,但是无法满足个性化的调度需求。WRR (Weighted Round Robin) 加权轮询调度在轮询的基础上为队列增加权重,每个队列设置一个计数器,根据权重初始化计数器初始值,每调度一个报文,计数器减 1。权重越大,每次轮询调度次数越多,能调度的包数量也就越多。如下图所示,三个队列权重分别是 31,每一轮调度的包数量比例就是 31。

035e7510-bfbf-11ed-bfe3-dac502259ad0.png

当所有队列权重值都是 1 时,WRR 调度退化为 RR 调度。WRR 的优点是可以按比例调度各个队列的请求,适应性更强,但是由于调度时没有考虑包长,还是按照请求个数进行调度,在请求长度变化时无法保证各队列按照设置比例占用带宽,而用户一般关心和感知到的是带宽。此外队列请求长度不一致时,WRR 调度对请求长度较小的队列带来不公平性。

5.DWRR 调度

为了解决队列请求长度不一致带来的不公平性,DWRR (Deficit Weighted Round Robin) 差分加权轮询调度在 WRR 基础上,基于请求长度而非请求个数设置权值,按照权重和请求长度进行调度。DWRR 为每个队列设置一个计数器,计数器初始化为 weight * MTU,每次调度计数器减去请求长度。具体算法逻辑如下:

初始化队列计数器 DC = weight * MTU;

调度器轮询非空队列,如果队列 DC <= 0,则跳过轮询下一个队列;

调度队列请求,计数器 DC = DC - request_len;

所有队列 DC < 0 或无请求调度时,DC = DC + weight * MTU。

0371bdd2-bfbf-11ed-bfe3-dac502259ad0.png

DWRR 调度克服了请求长度变化带来的不公平性,提供了更为精准的带宽分配。但是队列数量较大或者 MTU 设置较大时,调度器完成一轮调度的时间可能比较长,这样可能会引发较大的传输时延抖动,此外 DWRR 调度无法满足高优队列优先调度的需求。

6. SP+DWRR 调度

SP 调度可能出现 “饿死” 问题,同时不能实现带宽按比例调度;而 DWRR 调度可以实现带宽的按比例调度,同时解决了 “饿死” 问题,但是无法满足高优业务优先调度的需求。因此结合 SP 调度和 DWRR 调度的优点,实现 SP+DWRR 的调度。调度时优先保证 SP 调度,在高优队列无请求调度时,才尝试调度低优队列请求。如下图所示,SP 调度高优队列、低优队列和普通队列,队列优先级为:高优队列 > 普通队列 > 低优队列。

0384c2a6-bfbf-11ed-bfe3-dac502259ad0.jpg

队列 1/2/3 按照配置权重值进行 DWRR 调度,高优队列、低优队列和普通队列间按照 SP 算法进行调度。高优队列无请求调度时,尝试调用普通队列组内的请求,在普通队列组内所有队列均无请求时,才调度低优队列请求。

二、 GaussDB 网络调度

1. 网络调度实现

GaussDB 目前采用的 FIFO 调度机制,该调度机制无法满足用户的网络隔离需求和 QoS 需求,同时 FIFO 调度可能带来比较严重的抖动。抖动来自两方面:一方面是不同业务争取同一队列引发的入列时延损耗,另一方面是队列内请求数量变化带来的调度时延变化。因此为了满足用户个性化的网络隔离需求和 QoS 需求,设计实现 GaussDB 网络调度。 GaussDB 的网络调度有三层需求:

不同资源池间的网络隔离和带宽配比需求;

高优业务的优先调度需求;

网络欠佳 SQL 的降级需求。

考虑到以上需求,我们采用 SP+DWRR 调度算法设计实现 GaussDB 的网络调度,同时考虑到队列数量变化及 MTU 设置带来的时延影响,对 DWRR 调度进行改进,每次获取最优队列进行调度(性能损耗较大,但是可以优化改进)。 设计实现三种优先级队列:高优队列、普通队列和低优队列。三种队列优先级顺序为:高优队列 > 普通队列 > 低优队列。三类队列调度的业务类型如下:

高优队列用于调度超户和不需管控查询的网络请求;

普通队列用于调度正常需要管控的查询的网络请求,普通队列间按照 DWRR 算法进行请求调度;

低优队列用于调度降级查询的网络请求。

0399cfe8-bfbf-11ed-bfe3-dac502259ad0.jpg

GaussDB 基于 DWRR 实现的网络隔离属于配额共享的资源隔离,区别于限流的网络隔离,该隔离方案在保障资源池间网络隔离和带宽占比的前提下,可以最大化地利用网络带宽,有效降低网络隔离对网络吞吐量的影响。GaussDB 配额共享的网络隔离有两层含义:

共享:所有资源池间网络资源共享,网络空闲时,按需调度;

配额:网络调度繁忙情况下,按照配置权重比例进行调度。

基于 SP 调度机制实现的网络降级有以下优点:

超户业务或正常业务有网络请求时,优先调度超户和正常业务的网络请求,保障超户和正常业务的 QoS;

网络空闲,超户和正常业务调度无请求调度时,降级查询可以按需占用空闲时间进行网络调度。

SP 调度可能出现 “饿死” 情况,因此一般情况下,用户在设计网络隔离方案时,不建议有资源池不设置网络管控参数(带宽权重)。此外网络欠佳 SQL 降级后如果出现 “饿死” 情况,一般说明网络带宽资源紧张,需要进行错峰调度或配置并发管控。

2. 网络隔离应用

考虑一个比较简单的客户场景:用户自定义两个资源池 rp1 和 rp2,两个资源池带宽权重分别配置为 4 和 2,同时配置默认资源池带宽权重值为 1。

ALTER RESOURCE POOL rp1 WITH(WEIGHT=4);

ALTER RESOURCE POOL rp2 WITH(WEIGHT=2);

ALTER RESOURCE POOL default_pool WITH(WEIGHT=1);

配置完成后,在三个队列都有请求的情况下,rp1、rp2 和 default_pool 会按照 41 的比例进行网络请求调度。网络拥塞,三个队列都有调度不完的请求情况下,rp1 占用 4/7 的带宽,rp2 占用 2/7 的带宽,default_pool 占用 1/7 的带宽。在有队列无请求情况下,其他有请求的队列按照权重配比抢占网络带宽。

设置查询运行超过 20min,且网络带宽占用超过 512MB 时降级:

CREATE EXCEPT RULE bandwidth_rule1 WITH(bandwidth=512, ELAPSEDTIME=1200, action='penalty');

设置查询运行超过 30min,且网络带宽占用超过 1GB 时降级:

CREATE EXCEPT RULE bandwidth_rule2 WITH(bandwidth=1024, ELAPSEDTIME=1800, action='abort');

资源池关联异常规则:

ALTER RESOURCE POOL rp1 WITH(EXCEPT_RULE='bandwidth_rule1, bandwidth_rule2');

关联资源池 rp1 的用户执行的查询,如果运行时间超过 20min,且占用带宽超过 512MB 时查询即被降级,降级后该查询网络请求由低优队列调度,为了防止报文错乱,降级不可恢复;如果运行时间超过 30min,且占用带宽超过 1GB 时查询即被查杀。

资源池监控视图集成了网络收发速率监控,可以通过查询资源池监控对各资源池网络收发流量进行监控:

查询当前 CN/DN 上网络收发速率:

SELECT rpname,send_speed,recv_speed FROM gs_respool_resource_info;

查询所有 CN/DN 上网络收发速率:

SELECT nodename,rpname,send_speed,recv_speed FROM pgxc_respool_resource_info order by 1,2;

通过资源池网络监控视图可以直观地观察到资源池网络隔离效果,同时对资源池带宽权重配置优化配置进行指导。






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • QoS
    QoS
    +关注

    关注

    1

    文章

    136

    浏览量

    44782
  • fifo
    +关注

    关注

    3

    文章

    388

    浏览量

    43662
  • 调度器
    +关注

    关注

    0

    文章

    98

    浏览量

    5245
  • FCFS
    +关注

    关注

    0

    文章

    2

    浏览量

    1239

原文标题:详解数仓的网络调度与隔离管控能力

文章出处:【微信号:OSC开源社区,微信公众号:OSC开源社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    详解Kernel2.6调度算法

    Kernel2.6调度算法仍然是基于优先级的调度,它的算法复杂度为O(1),也就是说是调度器的开销是恒定的,与系统当前的负载没有关系。
    发表于 08-07 06:52

    粒子群算法城镇能源优化调度问题

    粒子群算法城镇能源优化调度问题,一、简介1 粒子群算法的概念粒子群优化算法(PSO:Particle swarm optimization) 是一种进化计算技术(evolutionar
    发表于 07-07 06:04

    调度器的原理及其任务调度代码实现

    一、介绍调度器是常用的一种编程框架,也是操作系统的拆分多任务的核心,比如单片机的裸机程序框架,网络协议栈的框架如can网关、485网关等等,使用场合比较多,是做稳定产品比较常用的编程技术二、原理1
    发表于 02-17 07:07

    编译器优化的静态调度介绍

    方法,在实际应用中,存在各种基于该方法的改进方案。关于LLVM编译器中的表调度算法,可以先自行阅读其源码,更多相关介绍,敬请期待。  结语  本文简单
    发表于 03-17 17:07

    热工过程网络控制系统的调度算法研究

    调度策略是网络控制系统中的一个重要问题。本文分析了常见调度算法的基本特点,并根据热工自动控制系统的要求提出了一个基于紧急度指标(EI)的动态优先权
    发表于 01-08 21:00 6次下载

    网络控制系统中混合调度算法的研究

    网络控制系统的性能与信息调度有关,而以往的调度算法大多把时间属性作为确立优先级的依据,无法反映出消息的重要性。该文在最大误差优先算法的基础上
    发表于 04-07 08:48 17次下载

    基于DiffServ模型的调度算法

    区分服务(DiffServ)模型中不同队列调度算法网络性能有不同的影响。该文介绍了DiffServ实现模型,分析比较了目前4种典型队列调度
    发表于 04-13 09:29 14次下载

    基于Crossbar的高性能输入排队调度算法对比分析

    讨论了高速交换技术中排队调度策略主要输入排队调度算法。从高速网络发展研究的角度出发,基于Crossbar交换结构的高性能输入排队调度
    发表于 04-19 19:11 14次下载

    网格任务调度算法研究

    网格任务调度算法是影响网格成功与否的关键技术之一。本文总结了网格计算系统的体系结构和特征,分析了网格任务调度算法的基本原理和性能指标,并对各种调度
    发表于 08-14 10:27 10次下载

    动态调度算法(DSA)

    动态调度算法动态调度算法(DSA)包括2 个方面:动态调度协议(DSP)和利用非实时间隔重发控制数据。
    发表于 03-30 10:30 1767次阅读
    动态<b class='flag-5'>调度</b><b class='flag-5'>算法</b>(DSA)

    改进的Min-Min网格任务调度算法

    在网格环境中,如何对任务进行高效调度是当前研究的热点问题。目前Min-Min调度算法是一个简单、快速、有效的算法,但它很难满足网格任务对服务
    发表于 07-06 15:09 21次下载

    基于组合指派编码模型的节点调度算法

    针对感知半径异构无线传感器网络(WSN)中的节点调度问题,提出了一种基于组合指派编码模型的分布式节点调度算法。首先确定最大可能的组个数;然后基于两跳簇概念进行分布式分簇;最后对每个簇中
    发表于 02-09 14:59 0次下载

    从零开始入门 K8s | 调度器的调度流程和算法介绍

    Kubernetes 作为当下最流行的容器自动化运维平台,以声明式实现了灵活的容器编排,本文以 v1.16 版本为基础详细介绍了 K8s 的基本调度框架、流程,以及主要的过滤器、Score 算法实现
    发表于 03-09 17:04 1181次阅读

    电梯调度算法有哪些?

    的特征,它是一种最简单的电梯调度算法。 它根据乘客请求乘坐电梯的先后次序进行调度。此算法的优点是公平、
    的头像 发表于 12-31 11:29 5934次阅读

    什么是调度?为什么要调度

    什么是调度?按照某种调度算法,从进程的ready队列中选择进程给CPU。
    的头像 发表于 06-15 15:18 8533次阅读
    什么是<b class='flag-5'>调度</b>?为什么要<b class='flag-5'>调度</b>?