一文總結GaussDB通訊原理知識

2022-01-09 22:36:05 字數 2827 閱讀 7529

摘要:從發展歷程到通訊模型設計,到你了解一下gaussdb通訊原理知識。
方法:採用libpq通訊庫實現cn和dn之間的連線,cn負責計算,dn僅進行資料儲存。

缺點:隨著計算任務的不斷增大,cn計算出現瓶頸,且白白浪費dn的計算能力。

方法:提出分布式執行框架,將計算下推到dn上執行,dn不僅作為儲存同時承擔計算任務。由於每個dn只儲存有一部分資料,因此dn間也需要進行通訊,採用stream執行緒tcp直連,每個連線都需要乙個tcp埠。

缺點:隨著集群規模的增加,dn之間的連線數不斷增加,在大併發場景下需要大量的tcp埠,而實際情況是由於單機tcp埠只有65535個,tcp埠數嚴重限制了資料庫的集群規模和併發規模。

方法:結合sctp協議的多流優點,dn間的通訊採用sctp通訊庫架構,使用邏輯連線來代替物理連線,用來解決dn之間連線太多的問題。

缺點:sctp協議本身存在的核心bug,通訊報錯。

方法:tcp**通訊庫。

缺點:cn和dn之間的物理連線數也會暴漲。

方法:cn和dn之間也採用邏輯連線實現,即cn多流。

問題1:dn間是查詢結果的通訊還是原始資料的通訊?

解:既有查詢結果,也有原始資料;dn之間的資料交流是hash之後,各個dn根據所需獲取。

問題2:連線池上的cn、dn是否存在交集,即poola中的dn在poolb中也存在?

解:不存在。

問題3:cn和cn的連線是做什麼的?為什麼設計連線池連線cn上的pg執行緒?cn上為什麼有多個pg執行緒,有什麼用途?

解:cn和cn之間連線是為了資料同步等,包括建表之後的資訊交匯。cn上的pg執行緒也是為了使用者查詢建立。

問題4:dn上為什麼有多個pg執行緒,有什麼用途?

解:乙個查詢操作就是建立乙個新的pg執行緒。

問題5:如何理解gsql客戶端退出時,只退出pg執行緒和agent**執行緒,而取到的slot連線會還回database pool?

解:slot連線退回到pooler,下次連線可以直接獲取,若不存在,則重新建立。

問題6:dn間的tcp連線數:c = (h * d * q * s)* d,為什麼最後乘以d,而不是(d - 1)/ 2 ? 此外,這個公式是否存在高重複,每次查詢都要建立dn間的通訊,而不考慮重複性?dn間的通訊線程數量是否有限制?

解:資料是雙向通訊,但執行運算元是單向的,所以不能除以2。數量有限制,但可以調整。

執行計畫需要使用多個執行緒進行執行,包括1個cn執行緒和每個dn上3個執行緒t1-t3。每個dn節點都有3個執行緒是因為資料是分布到每個dn上的,在執行查詢過程中,查詢的每個階段每個dn都要參與。自下而上是資料流,自上而下是控制流。具體執行過程如下:

問題7:dn上是否執行查詢操作?dn廣播的資料是否屬於同乙個資料表?每個dn都廣播資料,那最後所有dn的資料是否相同?圖中t2傳送給所有dn的t1?、

解:執行,dn上存的資料是表的幾分之幾,不是整個表,也不是乙個表的部分,是所有表的一部分,這樣做是為了併發。dn資料不相同,因為各取所需。

tcp**在現有的邏輯連線、**分發、quota流控等實現的基礎上,將資料通道從sctp協議替換成tcp協議,tcp**邏輯連線的實現基於head+data的資料報收發模型,在head中寫入邏輯連線id及後續data的長度。

問題8:單機tcp只有65535個埠,sctp呢?tcp多流和tcp在埠上的區別?tcp的三次握手是否依舊?

sctp是基於訊息流傳輸,資料收發的最小單位是訊息包(chunk),乙個sctp連線(association)同時可以支援多個流(stream),每個流包含一系列使用者所需的訊息資料(chunk)。而tcp協議本身只能支援乙個流,因此我們需要在這乙個流中區分不同邏輯連線的資料,通過在tcp報文的head中寫入邏輯連線id及後續data的長度來區分,這樣雖然tcp只有乙個資料報組成,但每個資料報包含多個塊,實現了tcp的多流。同時傳送時需保證整包原子傳送。

問題9:如何多流?是多個通道同時傳送head+data嗎?

解:乙個流傳送完整的資料。多流是併發。

tcp**通訊庫的傳送端實現,producera和producerb分別給dn1傳送資料,為保證傳送端head+data傳送的完整性,producera首先需要對單個物理連加鎖,此時producerb處於等鎖狀態,producera將資料完整傳送到本地協議棧後返回,並釋放鎖,producerb獲得鎖後傳送資料。節點數越多衝突越少。

問題10:加鎖等待是否影響效率?sctp的實現也是如此?

解:不影響,因為有快取buffer。

問題11:資料丟失,永遠無法達到head怎麼辦?一直快取?

解:不會丟失,tcp協議***。

在v1r8c00版本中,cn和dn之間的鏈結使用libcomm通訊庫,即兩個節點間僅存在一條物理通道,在該物理通道上使用邏輯連線通道實現並行通訊。

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

一文解讀HTTPS 原理

隨著 https 建站的成本下降,現在大部分的 都已經開始用上 https 協議。大家都知道 https 比 http 安全,也聽說過與 https 協議相關的概念有 ssl 非對稱加密 ca證書等,但對於以下靈魂三拷問可能就答不上了 1.為什麼用了 https 就是安全的?2.https 的底層原...

一文總結HTTP快取

快取是乙個很大的話題,本文只是講述http快取。http 頭資訊控制快取 大致分為兩種 強快取和協商快取。強快取如果命中快取不需要和伺服器端發生互動,而協商快取不管是否命中都要和伺服器端發生互動,強制快取的優先順序高於協商快取。兩類快取規則的不同,強制快取如果生效,不需要再和伺服器發生互動,而對比快...

一文看懂CDN加速原理

隨著網際網路的發展,使用者在使用網路時對 的瀏覽速度和效果愈加重視,但由於網民數量激增,網路訪問路徑過長,從 而使使用者的訪問質量受到嚴重影響。特別是當使用者與 之間的鏈路被突發的大流量資料擁塞時,對於異地網際網路使用者急速增加的地區來說,訪問質量不良更是乙個 急待解決的問題。很多時候,大家都在談c...