本文分享自华为云社区《GaussDB(DWS)网络调度与阻隔管控能力》,作者:门前一棵葡萄树。

一、常见的调度算法

QoS(Quality of Service)即服务质量,是一种调度控制机制,是网络规划运维的重要技能。在带宽资源有限状况下,针对不同用户/事务选用不同的调度战略,为使命供给端到端的服务质量确保。QoS自身并不会拓宽带宽,提升网络吞吐量,相反规划不合理的调度反而有或许下降整体吞吐量。QoS的一个要害点是允许不平等的网络调度,下降时延要求低、功能和颤动不灵敏的事务调度优先级,优先调度时延要求高、带宽要求一般不高的事务。

调度器是完结QoS的要害,调度器根据优先级和带宽配比进行事务调度。调度器的输入是要供给服务的数据包行列,输出是完结调度输出的一个个数据包。调度算法是调度器的核心,规划调度算法要充分考虑事务场景和用户需求,没有万能的调度算法,只要合适的调度算法。常见的调度算法有很多,这儿咱们只简略介绍GaussDB网络调度触及的调度算法:

1. FIFO调度

FIFO(First In Forst Out)调度使用的是FCFS战略,是一种不考虑QoS的调度算法。FIFO调度不进行报文分类,一切事务共用一个行列,依照恳求进入行列次序进行调度。如下图所示,三种不同事务的恳求全部加入到一个行列中,依照FIFO的规矩进行调度。

GaussDB(DWS)网络调度与隔离管控能力

FIFO调度完结简略、开销小,可是FIFO不区分恳求类型、不考虑QoS,对时延、颤动灵敏的事务不友好,无法确保要害事务服务质量。

2. SP调度

SP(Strict Priority)严格优先级调度严格依照行列优先级进行调度,只要在高优先级行列中恳求全部调度完结的状况下,才会考虑调度低优先级行列中的恳求。如下图所示,三种不同事务别离对应三种不同优先级的行列:高优行列、中优行列和低优行列。不同事务的恳求别离加入到相应优先级行列中,调度时优先调度高优行列恳求,高优行列中恳求调度完结后,顺次调度中优和低优行列恳求。

GaussDB(DWS)网络调度与隔离管控能力

SP调度算法的完结比较简略,长处是能够确保要害事务能够优先调度到,能够最大极限的下降网络延迟和颤动;缺陷是网络拥塞,高优先级行列中一向有恳求时,会导致低优先级行列中恳求一向调度不到,呈现“饿死”的状况。

3. RR调度

RR(Round Robin)轮询调度一般选用分时机制,为每个行列分配一个时刻片或调度时刻。RR调度依照固定次序循环调度每一个行列中的恳求,每次调度相同数量(一般是1个)的恳求,且在调度过程中不考虑任何优先级。算法较为简略且简单完结,一起不会发生“饿死”问题。如下图所示,RR调度轮询调度行列1/2/3中的恳求,每次调度一个行列中的一个恳求,直到恳求调度完结。

GaussDB(DWS)网络调度与隔离管控能力

RR调度假定一切行列的优先级和带宽需求都是相同的,调度时不考虑包长、行列时延和带宽需求。行列包长差异比较大时,或许导致不同行列实际占用带宽差异巨大,一起由于不考虑时延和带宽需求,导致无法做到对网络流量的精准阻隔和调度。

4. WRR调度

轮询调度确保了各行列在恳求调度时的公平性,可是无法满足个性化的调度需求。WRR(Weighted Round Robin)加权轮询调度在轮询的基础上为行列添加权重,每个行列设置一个计数器,根据权重初始化计数器初始值,每调度一个报文,计数器减1。权重越大,每次轮询调度次数越多,能调度的包数量也就越多。如下图所示,三个行列权重别离是3:2:1,每一轮调度的包数量份额便是3:2:1。

GaussDB(DWS)网络调度与隔离管控能力

当一切行列权重值都是1时,WRR调度退化为RR调度。WRR的长处是能够按份额调度各个行列的恳求,适应性更强,可是由于调度时没有考虑包长,还是依照恳求个数进行调度,在恳求长度改变时无法确保各行列依照设置份额占用带宽,而用户一般关怀和感知到的是带宽。此外行列恳求长度不一致时,WRR调度对恳求长度较小的行列带来不公平性。

5. DWRR调度

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

  1. 初始化行列计数器DC = weight * MTU;
  2. 调度器轮询非空行列,假如行列DC <= 0,则越过轮询下一个行列;
  3. 调度行列恳求,计数器DC = DC – request_len;
  4. 一切行列DC < 0或无恳求调度时,DC = DC + weight * MTU。

GaussDB(DWS)网络调度与隔离管控能力

DWRR调度克服了恳求长度改变带来的不公平性,供给了更为精准的带宽分配。可是行列数量较大或者MTU设置较大时,调度器完结一轮调度的时刻或许比较长,这样或许会引发较大的传输时延颤动,此外DWRR调度无法满足高优行列优先调度的需求。

5. SP+DWRR调度

SP调度或许呈现“饿死”问题,一起不能完结带宽按份额调度;而DWRR调度能够完结带宽的按份额调度,一起解决了“饿死”问题,可是无法满足高优事务优先调度的需求。因而结合SP调度和DWRR调度的长处,完结SP+DWRR的调度。调度时优先确保SP调度,在高优行列无恳求调度时,才测验调度低优行列恳求。如下图所示,SP调度高优行列、低优行列和一般行列,行列优先级为:高优行列 > 一般行列 > 低优行列。

GaussDB(DWS)网络调度与隔离管控能力

行列1/2/3依照装备权重值进行DWRR调度,高优行列、低优行列和一般行列间依照SP算法进行调度。高优行列无恳求调度时,测验调用一般行列组内的恳求,在一般行列组内一切行列均无恳求时,才调度低优行列恳求。

二、 GaussDB网络调度

1. 网络调度完结

GaussDB目前选用的FIFO调度机制,该调度机制无法满足用户的网络阻隔需求和QoS需求,一起FIFO调度或许带来比较严重的颤动。颤动来自两方面:一方面是不同事务争夺同一行列引发的入列时延损耗,另一方面是行列内恳求数量改变带来的调度时延改变。因而为了满足用户个性化的网络阻隔需求和QoS需求,规划完结GaussDB网络调度。

GaussDB的网络调度有三层需求:

  1. 不同资源池间的网络阻隔和带宽配比需求;
  2. 高优事务的优先调度需求;
  3. 网络欠佳SQL的降级需求。

考虑到以上需求,咱们选用SP+DWRR调度算法规划完结GaussDB的网络调度,一起考虑到行列数量改变及MTU设置带来的时延影响,对DWRR调度进行改进,每次获取最优行列进行调度(功能损耗较大,可是能够优化改进)。

规划完结三种优先级行列:高优行列、一般行列和低优行列。三种行列优先级次序为:高优行列 > 一般行列 > 低优行列。三类行列调度的事务类型如下:

  1. 高优行列用于调度超户和不需管控查询的网络恳求;
  2. 一般行列用于调度正常需求管控的查询的网络恳求,一般行列间依照DWRR算法进行恳求调度;
  3. 低优行列用于调度降级查询的网络恳求。

GaussDB(DWS)网络调度与隔离管控能力

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会依照4:2:1的份额进行网络恳求调度。网络拥塞,三个行列都有调度不完的恳求状况下,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;

经过资源池网络监控视图能够直观地观察到资源池网络阻隔作用,一起对资源池带宽权重装备优化装备进行辅导。

点击关注,第一时刻了解华为云新鲜技能~