Dubbo是一個經常使用的分佈式服務框架,前端
- 它致力於提供高性能、透明化的RPC遠程服務方案。
- 學習Dubbo有助於提升企業級應用的開發效率,以及可經過簡單的配置就能夠實現負載均衡,提升服務的效率。

單一應用階段(ORM爲主):java
- 對於訪問流量小的網站或系統,只須要單一的應用架構便可,也就是隻須要一個應用就能將全部的功能都彙集到一塊兒,
- 減小部署的成本,這個時候,用於簡化增刪改查工做量的數據庫訪問框架(ORM對象關係映射框架,如Hibernate、MyBatis),會提升開發的效率。
垂直應用架構(MVC爲主):nginx
- 當訪問量稍微增大之後,單一的應用架構就不能知足系統的平常需求,
- 咱們須要將系統之間耦合度較低的模塊拆分出來,來減小代碼的冗餘,提升效率。
- 此時,用於提高前端頁面訪問效率的Web框架應運而生(如Struts、SpringMVC),
- 與以前的ORM框架結合起來,共同造成了MVC架構的Web應用體系。
分佈式服務架構(RPC爲主):web
- 當應用愈來愈多,應用和應用之間不斷的交互,
- 此時就須要將核心的業務抽取出來,提供獨立的服務,造成穩定的服務中心,使前端能夠適應多變的市場需求。
- 此時,使用分佈式服務框架是一個關鍵,而咱們的Dubbo就是一個分佈式服務框架。
流動計算架構(SOA爲主):redis
- 當提供的服務愈來愈多,咱們就須要一箇中心,來對不一樣服務的負載進行評估,實時的調配資源,提升集羣的應用率。
- 此時,資源的調度和治理中心就是關鍵。而Duboo支持了完整的RPC調用的支持,以及服務治理中心相關的功能。
Dubbo介紹:算法
- Dubbo是一個分佈式服務框架,致力於提升性能和透明化的RPC遠程服務調用方案,以及SOA服務治理方案。
- 與Dubbo同類型的框架還有Apache的Thrift、Hessian,Java原生的RMI,WebService,以及淘寶的HSF,京東的JSF。
- Apache的Thrift對多語言的支持比較好,可是負載均衡和SOA的治理這一塊比較缺少。
- 而Hessian和WebService都是傳統的HTTP調用框架,因爲HTTP調用時使用的可能是短鏈接形式,大部分資源都被浪費在服務器的IO上。
- Java的RMI只支持Java語言,並且性能比較通常。
- 淘寶的HSF和京東的JSF都沒有開源,
- 那麼在開源框架中,Dubbo是一個比較優秀的分佈式服務框架。
- Dubbo的線上版本比較穩定,社區文檔多,運維方案比較成熟(admin控制檯和monte監控平臺)。
- Duboo支持拓展,目前,國內有許多家大型生產型應用互聯網公司使用了Dubbo框架
Dubbo涉及的知識spring
- 遠程調用:RMI、hassion、webService、thrift
- Dubbo都會在底層真正調用的時候,使用這些框架來作遠程調用。
- 通訊交互:HTTP、mina、netty
- 序列化:hessian二、java、json
- 容器:jetty、spring
- Dubbo在容器方面支持像jetty這樣的輕量級容器,或者spring這樣的IOC容器。
- 多線程:異步,線程池
- 負載均衡:zookeeper、redis
- Dubbo大部分使用zookeeper來實現負載均衡。
使用Dubbo能夠作什麼數據庫
- 做爲對內提供服務應用的容器
- 開發不少業務處理的應用,而後使用Duboo這種容器來提供服務。
- 拆分複雜Web應用到服務器容器
- 把大量的邏輯放置在服務提供的應用之中,使Web應用調用服務容器。
- 應用負載均衡協調
- 使用Duboo來實現軟件的負載均衡和協調,這樣不只簡化了配置,還大大簡化了服務器的利用率。
- 應用服務治理
- 除了負載均衡,還能夠作服務的降級、調用統計以及依賴關係的計算等等。
- 使用這些功能咱們能夠很清晰瞭解一個應用的依賴關係,以及不一樣應用調用的負載狀況,
- 咱們根據這些負載,來分配和計算,以增長對應的機器。

Dubbo架構

Provider: 暴露服務的服務提供方。
Consumer: 調用遠程服務的服務消費方。
Registry: 服務註冊與發現的註冊中心。
Monitor: 統計服務的調用次數和調用時間的監控中心。json
調用流程
0.服務容器負責啓動,加載,運行服務提供者。
1.服務提供者在啓動時,向註冊中心註冊本身提供的服務。
2.服務消費者在啓動時,向註冊中心訂閱本身所需的服務。
3.註冊中心返回服務提供者地址列表給消費者,若是有變動,註冊中心將基於長鏈接推送變動數據給消費者。
4.服務消費者,從提供者地址列表中,基於軟負載均衡算法,選一臺提供者進行調用,若是調用失敗,再選另外一臺調用。
5.服務消費者和提供者,在內存中累計調用次數和調用時間,定時每分鐘發送一次統計數據到監控中心服務器
Dubbo註冊中心
- 對於服務提供方,它須要發佈服務,並且因爲應用系統的複雜性,服務的數量、類型也不斷膨脹;
- 對於服務消費方,它最關心如何獲取到它所須要的服務,而面對複雜的應用系統,須要管理大量的服務調用。
- 並且,對於服務提供方和服務消費方來講,他們還有可能兼具這兩種角色,即既須要提供服務,有須要消費服務。
- 經過將服務統一管理起來,能夠有效地優化內部應用對服務發佈/使用的流程和管理。
- 服務註冊中心能夠經過特定協議來完成服務對外的統一。
Dubbo提供的註冊中心有以下幾種類型可供選擇:
- Multicast註冊中心
- Zookeeper註冊中心
- Redis註冊中心
- Simple註冊中心
Dubbo優缺點
優勢:
- 透明化的遠程方法調用
- 像調用本地方法同樣調用遠程方法;
- 只需簡單配置,沒有任何API侵入。
- 軟負載均衡及容錯機制
- 服務註冊中心自動註冊 & 配置管理
- 不須要寫死服務提供者地址,註冊中心基於接口名自動查詢提供者ip。
- 使用相似zookeeper等分佈式協調服務做爲服務註冊中心,能夠將絕大部分項目配置移入zookeeper集羣。
- 服務接口監控與治理
- Dubbo-admin與Dubbo-monitor提供了完善的服務接口管理與監控功能,
- 針對不一樣應用的不一樣接口,能夠進行 多版本,多協議,多註冊中心管理。
缺點: