GaussDB(DWS)網路流控與管控效果

華為雲開發者聯盟發表於2023-05-05
摘要:本文主要介紹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快取對業務效能的影響,測試環境配置如下:

GaussDB(DWS)網路流控與管控效果

使用大表broadcast作為背景壓力,兩個表簡單關聯作為正常業務進行測試,測試資料如下:

GaussDB(DWS)網路流控與管控效果

注:為了更直觀地體現TCP快取對效能的影響,我們使用相對無背景壓力增加的執行時間作為效能裂化指標。

背景壓力測試過程中TCP快取持續高達2MB以上,從上述測試資料看,單純的網路排程無法徹底解決網路過載對業務效能的影響。其他環境引數不變,測試TCP快取對效能的影響:

GaussDB(DWS)網路流控與管控效果

從上述測試資料以及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執行完成時間。
GaussDB(DWS)網路流控與管控效果

從效能測試資料可以看出:

  • 不進行網路管控,網路過載情況下,業務效能裂化明顯,其中10個背景壓力下裂化達55倍。
  • 不進行網路管控情況下,網路背景壓力越大,業務效能越差。
  • 背景壓力降級後,不同背景壓力情況下,業務效能變化不明顯。
  • 背景壓力降級後,業務效能裂化基本可控,不再大幅裂化。

背景壓力降級後,業務效能還是有劣化,主要原因是流控只能降低TCP快取,而不能完全消除,想要完全消除背景壓力對業務效能的影響,可以配合使用終止異常規則,在識別網路欠佳SQL後將其終止。

從測試驗證效果看,降級異常規則配合低優佇列網路流控,可以有效控制背景壓力對業務效能的影響,保證網路欠佳SQL不會導致高優業務效能大幅劣化。

參考:

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

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

 

點選關注,第一時間瞭解華為雲新鮮技術~

相關文章