常用協議 dubbo (預設)

2022-06-29 01:00:15 字數 3056 閱讀 8453

dubbo://

dubbo 預設協議採用單一長連線和 nio 非同步通訊,適合於小資料量大併發的服務呼叫,以及服務消費者機器數遠大於服務提供者機器數的情況。

特性

預設協議,使用基於 mina 1.1.7 和 hessian 3.2.1 的 tbremoting 互動。

約束

資料通訊

情況結果

a->b

類a多一種 屬性(或者說類b少一種 屬性)

不拋異常,a多的那 個屬性的值,b沒有, 其他正常

a->b

列舉a多一種 列舉(或者說b少一種 列舉),a使用多 出來的列舉進行傳輸

拋異常a->b

列舉a多一種 列舉(或者說b少一種 列舉),a不使用 多出來的列舉進行傳輸

不拋異常,b正常接 收資料

a->b

a和b的屬性 名相同,但型別不相同

拋異常a->b

serialid 不相同

正常傳輸

介面增加方法,對客戶端無影響,如果該方法不是客戶端需要的,客戶端不需要重新部署。輸入引數和結果集中增加屬性,對客戶端無影響,如果客戶端並不需要新屬性,不用重新部署。

輸入引數和結果集屬性名變化,對客戶端序列化無影響,但是如果客戶端不重新部署,不管輸入還是輸出,屬性名變化的屬性值是獲取不到的。

總結:伺服器端和客戶端對領域物件並不需要完全一致,而是按照最大匹配原則。

配置

配置協議:

<

dubbo:protocol

name

="dubbo"

port

="20880"

/>

設定預設協議:

<

dubbo:provider

protocol

="dubbo"

/>

設定服務協議:

<

dubbo:service

protocol

="dubbo"

/>

多埠:

<

dubbo:protocol

id="dubbo1"

name

="dubbo"

port

="20880"

/>

<

dubbo:protocol

id="dubbo2"

name

="dubbo"

port

="20881"

/>

配置協議選項:

<

dubbo:protocol

name

=「dubbo」

port

=「9090」

server

=「netty」

client

=「netty」

codec

=「dubbo」

serialization

=「hessian2」

charset

=「utf-8」

threadpool

=「fixed」

threads

=「100」

queues

=「0」

iothreads

=「9」

buffer

=「8192」

accepts

=「1000」

payload

=「8388608」

/>

多連線配置:

dubbo 協議預設每服務每提供者每消費者使用單一長連線,如果資料量較大,可以使用多個連線。

<

dubbo:service

connections

="1"

/>

<

dubbo:reference

connections

="1"

/>

為防止被大量連線撐掛,可在服務提供方限制tcp最大接收連線數,以實現服務提供方自我保護。

<

dubbo:protocol

name

="dubbo"

accepts

="1000"

/>

dubbo.properties 配置:

dubbo.service.protocol=dubbo
常見問題為什麼要消費者比提供者個數多?因 dubbo 協議採用單一長連線,假設網路為千兆網絡卡 3,根據測試經驗資料每條連線最多只能壓滿 7mbyte(不同的環境可能不一樣,供參考),理論上 1 個服務提供者需要 20 個服務消費者才能壓滿網絡卡。

為什麼不能傳大包?

因 dubbo 協議採用單一長連線,如果每次請求的資料報大小為 500kbyte,假設網路為千兆網絡卡 3,每條連線最大 7mbyte(不同的環境可能不一樣,供參考),單個服務提供者的 tps(每秒處理事務數)最大為:128mbyte / 500kbyte = 262。單個消費者呼叫單個服務提供者的 tps(每秒處理事務數)最大為:7mbyte / 500kbyte = 14。如果能接受,可以考慮使用,否則網路將成為瓶頸。

為什麼採用非同步單一長連線?

因為服務的現狀大都是服務提供者少,通常只有幾台機器,而服務的消費者多,可能整個**都在訪問該服務,比如 morgan 的提供者只有 6 臺提供者,卻有上百臺消費者,每天有 1.5 億次呼叫,如果採用常規的 hessian 服務,服務提供者很容易就被壓跨,通過單一連線,保證單一消費者不會壓死提供者,長連線,減少連線握手驗證等,並使用非同步 io,復用執行緒池,防止 c10k 問題。

Dubbo技術選型之 dubbo 協議

dubbo 協議參考手冊 dubbo 預設協議採用單一長連線和 nio 非同步通訊,適合於小資料量大併發的服務呼叫,以及服務消費者機器數遠大於服務提供者機器數的情況。預設協議,使用基於 mina1.1.7和 hessian3.2.1的 tbremoting 互動。資料通訊 情況結果 a b 類a多一...

Dubbo之旅 擴充套件協議

在實際工作中運用 dubbo 的時候,以上系列的文章基本上能夠滿足專案的基本需求,當然 對於一些特殊的需求 dubbo 可以對其進行擴充套件 dubbo 擁有者豐富的擴充套件內容 這次主要將會帶領大家去感受一下 dubbo 的協議擴充套件和註冊中心擴充套件 首先要說的是協議擴充套件.為什麼要擴充套件...

Dubbo多協議支援

除了dubbo服務暴露協議dubbo協議外,dubbo框架還支援另外8種服務暴露協議 rmi協議 hessian協議 http協議 webservice協議 thrift協議 memcached協議 redis協議 rest協議。但在實際生產中,使用最多的就是dubbo服務暴露協議 小資料大併發使用...