繼續上一篇寫了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的重點優點,大概爲一下幾個方面
優點:
- 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進行處理。