摘要:本文主要介绍GaussDB(DWS)网络流控能力,并对其管控效果进行验证。

本文分享自华为云社区《GaussDB(DWS)网络流控与管控效果》,作者:门前一棵葡萄树。

上一篇博文GaussDB(DWS)网络调度与隔离管控能力,我们详细介绍了GaussDB网络调度逻辑,并简单介绍了如何应用网络隔离管控能力。本篇博文主要介绍GaussDB(DWS)网络流控能力,并对其管控效果进行验证。

一、网络过载影响分析

网络过载对性能的影响主要体现在两方面:

  1. 网络调度对性能的影响,性能影响原因分析与GaussDB网络调度详见博客:GaussDB(DWS)网络调度与隔离管控能力
  2. TCP缓存对性能的影响,本篇博客主要分析TCP缓存对性能的影响,并介绍GaussDB如何通过流控实现对TCP缓存的控制。

众所周知,TCP是一种面向连接的可靠的传输协议,为了保证数据传输的可靠,发送方发送的每一个数据包,接收方都需要向发送方回复一个应答,如果发送失败,则进行重传。上述机制保证了数据传输的可靠性,但是缺点也是比较明显的:发送方每发送一个数据包都需要等待接收方确认,接收方确认接收后再发送下一个数据包,两次发送之间的时间间隔取决于数据包收发时延和接收端处理能力,这个时间间隔越大,通信效率越低。为了解决这个问题,TCP引入了窗口的概念,所谓的窗口其实是操作系统开辟缓存空间用于收发数据包缓存,以提高通信效率,提升网络吞吐量,详细原理可参考TCP滑动窗口机制。

TCP缓存解决了TCP协议通信效率低的问题,但是网络过载情况下,TCP缓存一般比较高,这就导致高优业务发送数据包时,需要等待缓存区中数据全部发送完成后,才能发送高优业务的数据包,这个等待时间,我们称之为发送时延。显而易见,网络带宽不变的情况下,TCP缓存越大,发送时延也就越大。

假设网络带宽1GB,TCP缓存中有2MB数据,则TCP缓存中数据全部发送出去的时间 = 2/1024*1000 = 1.95ms,考虑到接收方数据处理和应答时延,实际发送时延在2~4ms之间。如果高优作业每发送一个数据包都需要等待2~4ms的话,这个时间累积起来还是非常恐怖的。

实验室环境下,构造网络过载场景,测试TCP缓存对业务性能的影响,测试环境配置如下:

使用大表broadcast作为背景压力,两个表简单关联作为正常业务进行测试,测试数据如下:

注:为了更直观地体现TCP缓存对性能的影响,我们使用相对无背景压力增加的执行时间作为性能裂化指标。

背景压力测试过程中TCP缓存持续高达2MB以上,从上述测试数据看,单纯的网络调度无法彻底解决网络过载对业务性能的影响。其他环境参数不变,测试TCP缓存对性能的影响:

从上述测试数据以及TCP缓存默认配置的测试数据看,无论是否进行网络管控,都是TCP缓存越大,性能越差。到这里我们基本可以确定,网络过载场景下应用网络调度后,TCP缓存是性能影响的关键点,但是直接调整TCP缓存区配置会影响到网络整体吞吐量和通信延迟,因此需要采用其他技术控制TCP缓存大小在一定范围内。

二、GaussDB网络流控

2.1 网络限流算法

限流是保护系统稳定的三把利器(限流、缓存、降级)之一。限流可以是限制并发,也可以是限制资源使用;可以保护自己,也可以保护别人。数据库混合负载场景下,限流可以防止低优业务占用过多资源,预防资源过载,保证高优业务性能不受大幅影响。常见的限流算法有计数限流、漏桶算法和令牌桶算法:

  1. 计数限流:通过对一个限流周期内的请求数量进行限制,实现限流的目的。在一个限流周期内,可以限制请求不超限,但是在两个限流周期的相邻时间,存在临界问题,可能出现瞬时流量超限的情况。
  2. 漏桶限流:按照固定速率消费请求,限制单位时间内可以发送的请求量;请求先放入桶(队列)中,漏桶按照固定速率出水,可以防止突发流量。
  3. 令牌桶限流:服务提供者按照固定速率向令牌桶中加入令牌,令牌总量达到阈值则不再添加;请求消费时从令牌桶中获取一定数量令牌,如果令牌不足,则触发拒绝策略,令牌桶允许短时突发流量。

2.2 网络流控实现

GaussDB网络流控主要用于防止网络欠佳SQL引发网络持续过载,预防TCP缓存持续飙高,引发网络发送延迟过大,进而导致高优业务网络请求不能及时发送,影响高优业务性能。对于正常业务并发过大导致的TCP缓存飙高,建议采用查询调度限制并发的方法进行解决。网络欠佳SQL的网络流控基于网络调度中的低优队列设计实现,采用类漏桶算法实现。

新增GUC参数low_priority_bandwidth(默认值:256MB)用于限制低优队列可以占用的网络带宽。这个参数有两层含义(假设采用默认配置):

  • 低优队列网络传输速率不超过256MB/s。
  • 1ms内允许传输的数据量不超过256KB(256MB/s≈256KB/ms),保证TCP缓存中低优队列数据不超过256KB,防止低优队列导致TCP缓存过高导致高优业务性能大幅劣化。

低优队列网络带宽的设置需要充分考虑网络环境和集群部署情况,设置过大可能起不到网络流控效果,设置过小可能导致低优业务性能下降过大。例如10GE网络,3节点12DN环境,低优队列网络带宽不应高于256MB,在此基础上低优队列带宽配置越低,限流效果越好,对高优业务性能影响也就越小;低优队列网络带宽配置接近网络上限情况下,网络欠佳SQL并发越大,限流效果越差,例如10GE网络,3节点12DN环境,低优队列限流256MB情况下,大表broadcast并发15个以上时,网络限流效果开始下降。

2.3 流控效果验证

测试环境配置:

  • 网卡:10GE
  • CPU:72核
  • 内存:350GB
  • 集群:3节点12DN,每个节点4个DN
  • low_priority_bandwidth:256

设置异常规则对查询运行超过1min,且网络带宽占用超过128MB(单DN,5s平均传输速率)的作业执行降级操作:

CREATE EXCEPT RULE bandwidth_rule1 WITH(bandwidth=128, ELAPSEDTIME=60, action='penalty');

创建资源池rp1,关联上述异常规则:

CREATE RESOURCE POOL rp1 WITH(EXCEPT_RULE='bandwidth_rule1');

创建用户user1关联资源池rp1:

CREATE USER user1 RESOURCE POOL 'rp1' PASSWORD 'xxxxxxxx';

用户user1执行查询满足“运行时间超过1min,且占用带宽超过128MB”规则时,查询被降级,降级后该查询网络请求由低优队列调度。

使用user1执行以下测试验证网络限流效果:

  • 创建示例表并导入数据
// 背景压力SQL使用的表
CREATE TABLE wt1(c1 int, c2 int, b1 char(1000), b2 char(7000)) distribute by hash(c1);
CREATE TABLE wt2(c1 int, c2 int, b1 char(1000), b2 char(7000)) distribute by hash(c1);
INSERT INTO wt1 select generate_series(1,10000), generate_series(1,10000),repeat('a',900), repeat('b',6888);
INSERT INTO wt2 select * from wt1;
INSERT INTO wt1 select * from wt1; // 连续执行多次,导入3GB以上数据
// 高优业务SQL使用的表
CREATE TABLE wt3(c1 int, c2 int, b1 char(1000), b2 char(7000)) distribute by hash(c1);
CREATE TABLE wt4(c1 int, c2 int, b1 char(1000), b2 char(7000)) distribute by hash(c1);
INSERT INTO wt3 select generate_series(1,10000), generate_series(1,10000),repeat('a',900), repeat('b',6888);
INSERT INTO wt4 select * from wt3;
  • 使用以下SQL作为背景压力
select count(1) from (select /*+ broadcast(wt1)*/ wt1.c1,wt1.c2 from wt1, wt2 where wt1.c2 = wt2.c2);
  • 使用以下SQL作为高优业务进行性能测试验证
select count(1) from (select /*+ broadcast(wt3)*/ wt3.c1,wt3.c2 from wt3, wt4 where wt3.c2 = wt4.c2);
  • 测试不同网络背景压力情况下(并行不同数量的背景压力SQL),分别测试无网络管控和背景压力降级的性能数据,记录SQL执行完成时间。

从性能测试数据可以看出:

  • 不进行网络管控,网络过载情况下,业务性能裂化明显,其中10个背景压力下裂化达55倍。
  • 不进行网络管控情况下,网络背景压力越大,业务性能越差。
  • 背景压力降级后,不同背景压力情况下,业务性能变化不明显。
  • 背景压力降级后,业务性能裂化基本可控,不再大幅裂化。

背景压力降级后,业务性能还是有劣化,主要原因是流控只能降低TCP缓存,而不能完全消除,想要完全消除背景压力对业务性能的影响,可以配合使用终止异常规则,在识别网络欠佳SQL后将其终止。

从测试验证效果看,降级异常规则配合低优队列网络流控,可以有效控制背景压力对业务性能的影响,保证网络欠佳SQL不会导致高优业务性能大幅劣化。

参考:

https://www.cnblogs.com/niumoo/p/16007224.html

https://xie.infoq.cn/article/4a0acdd12a0f6dd4a53e0472c

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

GaussDB(DWS)网络流控与管控效果的更多相关文章

  1. 一文详解GaussDB(DWS) 的并发管控和内存管控

    摘要:DWS的负载管理分为两层,第一层为cn的全局并发控制,第二层为资源池级别的并发控制. 本文分享自华为云社区<GaussDB(DWS) 并发管控&内存管控>,作者: fight ...

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

    摘要:调度算法是调度器的核心,设计调度算法要充分考虑业务场景和用户需求,没有万能的调度算法,只有合适的调度算法. 本文分享自华为云社区<GaussDB(DWS)网络调度与隔离管控能力>,作 ...

  3. 【数仓运维实践】关于GaussDB(DWS)单SQL磁盘空间管控

    摘要:本文主要讲解数仓运维中遇到单SQL磁盘空间管控问题的解析和方案. 本文分享自华为云社区<GaussDB(DWS)运维 -- 单SQL磁盘空间管控>,作者: 譡里个檔. [问题描述] ...

  4. GaussDB(DWS)应用实践丨负载管理与作业排队处理方法

    摘要:本文用来总结一些GaussDB(DWS)在实际应用过程中,可能出现的各种作业排队的情况,以及出现排队时,我们应该怎么去判断是否正常,调整一些参数,让资源分配与负载管理更符合当前的业务:或者在作业 ...

  5. 细说GaussDB(DWS)复杂多样的资源负载管理手段

    摘要:对于如此多的管控功能,管控起来实际的效果到底如何,本篇文章就基于当前最新版本,进行效果实测,并进行一定的分析说明. 本文分享自华为云社区<GaussDB(DWS) 资源负载管理:并发管控以 ...

  6. 咱们从头到尾讲一次 Flink 网络流控和反压剖析

    本文根据 Apache Flink 系列直播整理而成,由 Apache Flink Contributor.OPPO 大数据平台研发负责人张俊老师分享.主要内容如下: 网络流控的概念与背景 TCP的流 ...

  7. 十八般武艺玩转GaussDB(DWS)性能调优(三):好味道表定义

    摘要:表结构设计是数据库建模的一个关键环节,表定义好坏直接决定了集群的有效容量以及业务查询性能,本文从产品架构.功能实现以及业务特征的角度阐述在GaussDB(DWS)的中表定义时需要关注的一些关键因 ...

  8. 十八般武艺玩转GaussDB(DWS)性能调优:SQL改写

    摘要:本文将系统介绍在GaussDB(DWS)系统中影响性能的坏味道SQL及SQL模式,帮助大家能够从原理层面尽快识别这些坏味道SQL,在调优过程中及时发现问题,进行整改. 数据库的应用中,充斥着坏味 ...

  9. WP开发笔记——控件倾斜效果

    创建一个基本的 Windows Phone 应用程序并添加 TiltEffect 类文件. 添加要倾斜的控件的分类. 全局应用 IsTiltEnabled 依赖项属性,以便为所有的指定控件提供倾斜功能 ...

  10. Windows Phone 的控件倾斜效果

    原文:Windows Phone 的控件倾斜效果 Windows Phone 7的系统设置里,按钮都有一个点击倾斜的效果,但自己添加的控件就没有.但微软提供了这个效果的代码:TiltEffect MS ...

随机推荐

  1. vue3学习大全(1)

    # vue3.0 Vue3.0 在北京时间2020年9月19 日凌晨,发布了 3.0 版本,代号:*One Piece* ## 1.新特性 Vue 3 中一些需要关注的新功能包括: - [组合式 AP ...

  2. Mysql 行号+分组行号+取Top记录 SQL

    Mysql 行号+分组行号+取Top记录 SQL select * from ( SELECT (@rowNum := @rowNum + 1) as rowNum -- 全量行号 , a.col1 ...

  3. You need to run build with JDK or have tools.jar on the classpath.If this occures during eclipse build make sure you run eclipse under JDK as well 错误

    我打开项目报错是这样的  pom.xml jdk配置什么的都是好的    但是还是报错 解决错误 : 1.打开你eclipse的根目录,找到eclipse.ini  这个文件夹打开 2.打开是这个样子 ...

  4. Oracle-账户被锁:The account is locked

    Oracle-账户被锁:The account is locked cmd-->sqlplus--> 管理员登录:system@ORCL 密码:1 然后输入:alter user kjb( ...

  5. goujian

    第二章的内容先对第一张来说更偏向于技术性,在团队合作中,如何保证自己所负责模块的质量的稳定,这就对自身的技术和一些良好的代码书写习惯有一定的要求.这里除了之前接触的代码的整齐(段落划分),变量值和文件 ...

  6. RPA的市场需求

    最基本的RPA软件机器人定义:机器人通过记录员工在电脑桌面上的操作行为,将业务处理规则和操作行为记录下来,并模拟人的方式在电脑上自动执行一系列特定的工作流程.采用RPA软件机器人解决方案,快速实施,快 ...

  7. 使用nsis美化安装向导后,安装时实现浏览器自定义协议打开

    1. electron官方提供api,支持向注册表中写入协议,可通过浏览器打开 app.setAsDefaultProtocolClient('open-electron') 问题:1. 因为该方法时 ...

  8. 灵感宝盒图谱全新改版!代码实验室开启报名丨RTE NG-Lab 双周报

    前言 RTE NG-Lab 计划已经推出一段时间了,计划目前包含灵感宝盒(Idea Box).代码实验室(Code Lab).独立开发者孵化器(NGLab Incubator)三个项目.我们希望借助这 ...

  9. 声网Agora发布教育信息化解决方案 助力教育公平提效

    4月23日-25日,由中国教育装备行业协会主办的第79届教育装备展在厦门国际会展中心举办.作为赋能教育信息化的实时互动PaaS服务商,声网Agora应邀参会.展会现场,声网展示了基于实时音视频互动能力 ...

  10. vue 和 react 的区别有哪些

    vue 和 react 有什么区别呢?下面从这 4 个角度来说一说! (1)从编程范式的角度讲 在 vue-loader.vue-template-compiler 的支持下,vue 可以采用 SFC ...