GaussDB(DWS)网络流控与管控效果

Posted 华为云开发者社区

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GaussDB(DWS)网络流控与管控效果相关的知识,希望对你有一定的参考价值。

摘要:本文主要介绍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)云原生数仓技术解析

摘要:本文主要介绍GaussDB(DWS)云原生数仓架构、产品能力,帮助开发者快速了解GaussDB(DWS)云原生数仓相关信息与能力。

本文分享自华为云社区《直播回顾 | GaussDB(DWS)云原生数仓技术解析》,作者:胡辣汤。

在本期《GaussDB(DWS)云原生数仓技术解析》的主题直播中,我们邀请到华为云EI DTSE技术布道师/华为云数仓GaussDB(DWS)云原生首席SE 王传廷,针对GaussDB(DWS)云原生数仓架构、产品能力,与开发者和伙伴朋友们展开交流互动,帮助开发者快速了解GaussDB(DWS)云原生数仓相关信息与能力。

数仓需求变化及技术架构演进

云计算时代,数据仓库的需求和技术架构也在不断地发生变化。数仓需求主要分为两类场景:

  • 公有云场景,主要是指用户直接购买的公有云厂商的云服务。公有云用户的需求更多关注在产品成本、扩容灵活弹性、数据共享。
  • 线下部署场景,这类场景可能是用户购买的硬件部署了一个软件,也可能是用户在机房搭建了内部私有云环境。线下部署场景主要需求是:系统稳定、负载之间有较好的隔离能力、数据共享、弹性。

数仓技术架构演进由最初Shared Storage共享存储到Shared Nothing分布式计算架构再到现在的存算分离架构。

  • 存算分离架构特点:存储类似shared storage,计算类似shared nothing,每个节点只处理自己分片的数据。
  • 存算分离架构优点:计算存储分层扩展,计算节点扩容无需数据重分布,速度快,灵活;存储节点按需扩容,无限容量;计算节点之间无需协调机制,只需保证计算节点只处理自己分片的数据。

GaussDB(DWS)云原生数仓架构解析

华为云GaussDB(DWS)历经12年技术演进,2011年开始技术预研,2014年首次上市,通过不停地迭代和演进,从2017年开始大规模商用,当前全球已累积1700+大客户。针对数仓发展趋势,GaussDB(DWS)也在不断地演进,2022年推出实时数仓、IoT数仓,应对实时数据的接入,满足实时计算场景需求。2023年即将发布的云原生数仓,支持存算管三层分离、湖仓一体、数智融合,具备优异性能和极致弹性能力。

GaussDB(DWS)云原生数仓产品能力

一、极致弹性

GaussDB(DWS)云原生数仓极致弹性,具备管理层、计算层、存储层三层分离独立灵活伸缩,一数多用、按需配置优势。

存算管三层分离:存储层,支持私有格式和开放格式,开放格式主要支持ORC/Parquet/Hudi等大数据生态的主流格式。私有格式是GaussDB(DWS)的存储格式,数据存储在OBS上,在私有格式上具备更好的性能。计算层,我们抽象了Virtual Warehouse概念(简称VW),也叫逻辑集群。VW是一组计算单元,可以灵活地添加或者释放,数据不属于任何一个VW,仅仅只是绑定关系。管理层是指将集群管理查询优化与GaussDB(DWS)数据节点和GTM层体现出来。

一数多用:数据存储在OBS上,任意逻辑集群均可承载读写负载,多逻辑集群间共享数据,无需拷贝,提供跨逻辑集群建的实时和近实时两种数据共享方式。

按需配置:通过逻辑集群隔离不同业务,性能稳定,业务承载量或并发量线性扩展,可以进行读写分离或多读多写。

二、湖仓一体

之前使用大数据写数据,需要创建外表,指定外表字段,并与大数据字段对应,需要访问多少张表,就创建多少张表,当外表数量只有一两张时维护也比较容易,外表越来越多时,维护成本也随之增加,如果数据湖中字段发生了变化,外表也需要更改。GaussDB(DWS)云原生数仓在湖仓一体方面做了能力增强,降低维护成本。在这里我们引入新的概念External Schema。我们通过创建一个 External Schema的形式,自动对接Hive Metastore元数据管理,直接访问数据湖的数据表定义,不再需要创建外表,提升体验,降低维护代价。

同时我们支持外表和内表进行融合查询,混合查询数据湖和数仓内任意数据,查询一步到位输出到数仓内/数据湖,无需额外数据中转拷贝,数据湖享受数仓的极致查询性能。

三、数智融合

打通数据仓库与AI生产线,通过OBS共享开放格式数据,为AI生产线提供强劲的数据处理能力和灵活的供数方式。提供SQL语法,在数据分析过程中提供驱动AI训练、应用AI推理的能力。直接调用部署的推理服务端点,灵活性好;将模型二进制部署为UDF,性能好。

四、优异性能

存算分离后,我们通过三个方面保证数仓性能,分别是:缓存、近数据计算(计算下推)、IO调度。

  • 缓存:将热数据优先缓存到本地,本地磁盘缓存空间够用的情况下,可以体验到和本地表一样的性能。GaussDB(DWS)在每个计算节点自带磁盘缓存,可以将OBS的数据缓存到本地,提升性能。
  • 近数据计算:将冷数据优先计算下推到存储层,降低读取数据量。
  • IO调度:充分利用云存储带宽优势,弥补其相较传统MPP的高延迟劣势;单查询充分利用资源,为并发查询提供稳定、可预测的性能保证;多级资源池灵活配置。

欢迎感兴趣的开发者观看直播回放,了解详细信息。更多关于GaussDB(DWS)产品技术解析、云原生数仓产品新特性的介绍,请关注GaussDB(DWS)论坛,直播安排将第一时间发布在GaussDB(DWS)论坛热门活动版块。

论坛链接:https://bbs.huaweicloud.com/forum/forum-598-1.html

 

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

以上是关于GaussDB(DWS)网络流控与管控效果的主要内容,如果未能解决你的问题,请参考以下文章

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

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

详解GaussDB(DWS)的CPU资源隔离管控能力

详解数仓的网络调度与隔离管控能力

详解数仓的网络调度与隔离管控能力

Flink从入门到精通100篇(二十二)- Flink应用实战案例:如何实现网络流控与反压机制