dubbo的深入學習(2)
繼續上一篇寫了dubbo深入學習(1),主要介紹了dubbo是什麼、這一篇主要是寫dubbo能幹什麼?
2.dubbo能幹什麼?
當在小規模的服務的時候,應用通過RMI(遠端方法呼叫)和Hessian9(Hessian是一個輕量級的remoting onhttp工具,使用簡單的方法
提供了RMI的功能。)等工具,將一些服務進行簡單的暴露,然後配置一些相關的URL地址進行呼叫,通過F5等硬體進行負載均衡的調
配就能達到我們的業務需求,但是,當我們的伺服器越來越多的時候,如果還是通過配置URL的話,那樣數量就是一個大問題,而且
如果在程式碼中配置的話,一個出錯了,整個程式都執行出錯,同時F5硬體負載均衡器的單點壓力也很大,那麼在這個時候,dubbo就
出現了,dubbo提供一個服務註冊中心,可以動態的註冊和發現服務,讓服務的位置透明瞭,消費者去獲取了服務提供方的地址,實
現軟負載均衡,這樣就降低了F5硬體負載均衡器的以來,當然也減少了一些成本,而且dubbo的Monitor提供了對消費者和提供者之間
的一些資料記錄,記錄了呼叫的次數,呼叫的時間等等一些資訊,管理者可以根據次數和時間等資訊判斷是否應該增加伺服器臺數,
增加了對風險的控制。此外Dubbo通過長連線(長連線:不發:rst包,不進行四次握手,等待在同域名下繼續用這個通道傳輸資料)
減少握手,通過NIO及執行緒池在單連線上併發拼包處理訊息,通過二進位制流壓縮資料,比常規HTTP等短連線協議更快。
其實簡單來說就可以概括為:
1.透明化的遠端方法呼叫,就像呼叫本地方法一樣呼叫遠端方法,只需簡單配置,沒有任何API侵入。
2.軟負載均衡及容錯機制,可在內網替代F5等硬體負載均衡器,降低成本,減少單點。
3. 服務自動註冊與發現,不再需要寫死服務提供方地址,註冊中心基於介面名查詢服務提供者的IP地址,並且能夠平滑新增或刪除服務提供者。
在這裡呢,我在學習dubbo的時候我的導師給我說了幾個dubbo的重點優點,大概為一下幾個方面
優點:
1.在dubbo RPC中,同時支援多種序列化方式 序列化對於遠端呼叫的響應速度,網路頻寬消耗等起著重要的作用,是提高分散式系統性能的關鍵因素之一,目前有一下四中序列化方式- dubbo序列化:阿里尚未開發成熟的高效java序列化實現,阿里不建議在生產環境使用它
- hessian2序列化:hessian是一種跨語言的高效二進位制序列化方式。但這裡實際不是原生的hessian2序列化,而是 阿里修改過的hessian lite,它是dubbo RPC預設啟用的序列化方式
- json序列化:目前有兩種實現,一種是採用的阿里的fastjson庫,另一種是採用dubbo中自己實現的簡單json庫, 但其實現都不是特別成熟,而且json這種文字序列化效能一般不如上面兩種二進位制序列化。
- java序列化:主要是採用JDK自帶的Java序列化實現,效能很不理想。
基於NIO的非阻塞實現並行呼叫,客戶端不需要啟動多執行緒即可完成並行呼叫多個遠端服務,相對多執行緒開銷較小
3. 一個支援非同步呼叫的RPC框架
非同步IO。當代碼需要執行一個耗時的IO操作時,它只發出IO指令,並不等待IO結果,然後就去執行其他程式碼了。一段時間後,
當IO返回結果時,再通知CPU進行處理。