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 協議預設每服務每提供者每消費者使用單一長連線,如果資料量較大,可以使用多個連線。
<為防止被大量連線撐掛,可在服務提供方限制tcp最大接收連線數,以實現服務提供方自我保護。dubbo:service
connections
="1"
/>
<
dubbo:reference
connections
="1"
/>
<dubbo.properties 配置:dubbo:protocol
name
="dubbo"
accepts
="1000"
/>
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服務暴露協議 小資料大併發使用...