Dubbo 連線模型及其原因

2021-10-11 20:09:46 字數 1098 閱讀 9012

dubbo的四個角色,服務提供者,服務消費者,註冊中心,監控中心。

provider consumer registry之間兩兩連線而且都是長連線,consumer provider與monitor之間的連線是短連線。為什麼是這樣的連線模型?

答:consumer provider之間為什麼是長連線的?

consumer provider之間的連線是單一長連線。為什麼這麼設計呢?首先我們需要明白,兩個程序之間可以建立多個連線,因為乙個程序可以繫結多個埠。那麼,兩程序之間通訊,單一連線與多連線有什麼不同呢,不同點在於多連線的情況下,客戶端程序可以向服務端產生更大的瞬時資料量,極限情況下,乙個consumer就可以將乙個provider的網絡卡壓滿。而單一連線呢,資料傳送必須排隊,假設乙個連線最大的資料流量是7m/s,乙個千兆網絡卡的provider可以同時向20個消費者提供服務。缺點就是可能最佳速度不如多連線。結合事實情況,往往消費者的數量要比服務提供者的數量多,所以採用的是單一連線。那麼為什麼是長連線呢?避免高併發情況下,頻繁的建立銷毀連線,浪費效能。

consumer registry之間為什麼是長連線的?

目前的理解是這樣的,當註冊中心的資料發生發動時需要通知consumer,比如新的p上線,如果r與c之間沒有長連線,那麼r就無法確認c的生命狀態,那麼它對於notify失敗的狀況時懵逼的。

provider registry之間為什麼是長連線的?

按理說,c與p之間採用了長連線,那麼通過心跳,一旦有p下線,c是可以察覺到的,那麼註冊中心為什麼還和p之間進行長連線呢?對於已有p,c,註冊中心通過與p長連線,監測p,然後通知對應的c,這樣看起來確實有點多餘。但是如果後面有新的c上線了呢,註冊中心需要將最新的p節點情況告訴新來的c,所以註冊中心還是需要與p保持長連線來監活的。

consumer provider與monitor之間為什麼是短連線?

c與p通過filter在記憶體中記錄呼叫相關的資料,每分鐘匯報給monitor,時間間隔較長所以是短連線。

Dubbo執行緒模型

下面我們要看一下預設情況下的執行緒模型 首先明確乙個基本概念 io執行緒和業務執行緒的區別 dubbo預設採用的是長鏈結的方式,即預設情況下乙個consumer和乙個provider之間只會建立一條鏈結,這種情況下io執行緒的工作就是編碼和解碼資料,監聽具體的資料請求,直接通過channel發布資料...

堆疊溢位及其原因

在乙個程式中,分配給堆疊的記憶體是有一定限度的。由於c語言系列沒有內建檢查機制來確保複製到緩衝區的資料不得大於緩衝區的大小,因此當這個資料足夠大的時候,將會溢位緩衝區的範圍。堆疊溢位就是不顧堆疊中分配的區域性資料塊大小,向該資料塊寫入了過多的資料,導致資料越界,結果覆蓋了別的資料。堆疊溢位時會有意想...

Dubbo(八)執行緒模型

dubbo有兩種執行緒池,第一種是i o執行緒池,第二種是業務執行緒池。i o執行緒池主要是收包發包,接收新的連線,業務執行緒則是執行我們的業務 呼叫介面的實現類 i o執行緒數預設是cpu的個數 1,業務執行緒數預設是200。與其他半同步半非同步的模型相似,dubbo的業務執行緒池也配備了佇列,不...