Dubbo基礎介紹 原

Dubbo是一個常用的分佈式服務框架,

  • 它致力於提供高性能、透明化的RPC遠程服務方案。
  • 學習Dubbo有助於提高企業級應用的開發效率,以及可通過簡單的配置就可以實現負載均衡提高服務的效率

單一應用階段(ORM爲主):

  • 對於訪問流量小的網站或系統,只需要單一的應用架構即可,也就是只需要一個應用就能將所有的功能都聚集到一起,
  • 減少部署的成本,這個時候,用於簡化增刪改查工作量的數據庫訪問框架(ORM對象關係映射框架,如Hibernate、MyBatis),會提高開發的效率。

垂直應用架構(MVC爲主):

  • 當訪問量稍微增大以後,單一的應用架構就不能滿足系統的日常需求,
  • 我們需要將系統之間耦合度較低的模塊拆分出來,來減少代碼的冗餘,提高效率。
  • 此時,用於提升前端頁面訪問效率的Web框架應運而生(如Struts、SpringMVC)
  • 與之前的ORM框架結合起來,共同形成了MVC架構的Web應用體系。

分佈式服務架構(RPC爲主):

  • 當應用越來越多,應用和應用之間不斷的交互,
  • 此時就需要將核心的業務抽取出來,提供獨立的服務,形成穩定的服務中心,使前端可以適應多變的市場需求。
  • 此時,使用分佈式服務框架是一個關鍵,而我們的Dubbo就是一個分佈式服務框架

流動計算架構(SOA爲主):

  • 當提供的服務越來越多,我們就需要一箇中心,來對不同服務的負載進行評估,實時的調配資源,提高集羣的應用率。
  • 此時,資源的調度和治理中心就是關鍵。而Duboo支持了完整的RPC調用的支持,以及服務治理中心相關的功能

Dubbo介紹

  • Dubbo是一個分佈式服務框架,致力於提高性能透明化的RPC遠程服務調用方案,以及SOA服務治理方案
  • 與Dubbo同類型的框架還有Apache的Thrift、Hessian,Java原生的RMIWebService,以及淘寶的HSF,京東的JSF。
    • Apache的Thrift對多語言的支持比較好,但是負載均衡和SOA的治理這一塊比較缺乏。
    • 而Hessian和WebService都是傳統的HTTP調用框架,由於HTTP調用時使用的多是短連接形式,大部分資源都被浪費在服務器的IO上。
    • Java的RMI只支持Java語言,而且性能比較一般
    • 淘寶的HSF和京東的JSF都沒有開源
    • 那麼在開源框架中,Dubbo是一個比較優秀的分佈式服務框架
  • Dubbo的線上版本比較穩定,社區文檔多,運維方案比較成熟(admin控制檯和monte監控平臺)。
  • Duboo支持拓展,目前,國內有許多家大型生產型應用互聯網公司使用了Dubbo框架

Dubbo涉及的知識

  • 遠程調用:RMI、hassion、webService、thrift
    • Dubbo都會在底層真正調用的時候,使用這些框架來做遠程調用。
  • 通信交互:HTTP、mina、netty
    • mina與netty都是NIO的框架。
  • 序列化:hessian2、java、json
    • Dubbo默認使用hessian2
  • 容器:jetty、spring
    • Dubbo在容器方面支持像jetty這樣的輕量級容器,或者spring這樣的IOC容器。
  • 多線程:異步,線程池
    • Dubbo涉及了異步的調用和線程池的管理。
  • 負載均衡:zookeeper、redis
    • Dubbo大部分使用zookeeper來實現負載均衡。

使用Dubbo可以做什麼

  • 作爲對內提供服務應用的容器
    • 開發很多業務處理的應用,然後使用Duboo這種容器來提供服務。
  • 拆分複雜Web應用到服務器容器
    • 把大量的邏輯放置在服務提供的應用之中,使Web應用調用服務容器。
  • 應用負載均衡協調
    • 使用Duboo來實現軟件的負載均衡和協調,這樣不僅簡化了配置,還大大簡化了服務器的利用率。
  • 應用服務治理
    • 除了負載均衡,還可以做服務的降級、調用統計以及依賴關係的計算等等。
    • 使用這些功能我們可以很清晰瞭解一個應用的依賴關係,以及不同應用調用的負載情況,
    • 我們根據這些負載,來分配和計算,以增加對應的機器。

Dubbo架構

Provider: 暴露服務的服務提供方。 
Consumer: 調用遠程服務的服務消費方。 
Registry: 服務註冊與發現的註冊中心。 
Monitor: 統計服務的調用次數和調用時間的監控中心。

調用流程 
0.服務容器負責啓動,加載,運行服務提供者。 
1.服務提供者在啓動時,向註冊中心註冊自己提供的服務。 
2.服務消費者在啓動時,向註冊中心訂閱自己所需的服務。 
3.註冊中心返回服務提供者地址列表給消費者,如果有變更,註冊中心將基於長連接推送變更數據給消費者。 
4.服務消費者,從提供者地址列表中,基於軟負載均衡算法,選一臺提供者進行調用,如果調用失敗,再選另一臺調用。 
5.服務消費者和提供者,在內存中累計調用次數和調用時間,定時每分鐘發送一次統計數據到監控中心

Dubbo註冊中心

  • 對於服務提供方,它需要發佈服務,而且由於應用系統的複雜性,服務的數量、類型也不斷膨脹; 
  • 對於服務消費方,它最關心如何獲取到它所需要的服務,而面對複雜的應用系統,需要管理大量的服務調用。 
  • 而且,對於服務提供方和服務消費方來說,他們還有可能兼具這兩種角色,即既需要提供服務,有需要消費服務。
  • 通過將服務統一管理起來,可以有效地優化內部應用對服務發佈/使用的流程和管理。
  • 服務註冊中心可以通過特定協議來完成服務對外的統一。

Dubbo提供的註冊中心有如下幾種類型可供選擇:

  • Multicast註冊中心
  • Zookeeper註冊中心
  • Redis註冊中心
  • Simple註冊中心

Dubbo優缺點

優點:

  1. 透明化的遠程方法調用 
    • 像調用本地方法一樣調用遠程方法;
    • 只需簡單配置,沒有任何API侵入。
  2. 軟負載均衡及容錯機制 
    • 可在內網替代nginx lvs等硬件負載均衡器。
  3. 服務註冊中心自動註冊 & 配置管理 
    • 不需要寫死服務提供者地址,註冊中心基於接口名自動查詢提供者ip。 
    • 使用類似zookeeper等分佈式協調服務作爲服務註冊中心,可以將絕大部分項目配置移入zookeeper集羣。
  4. 服務接口監控與治理 
    • Dubbo-admin與Dubbo-monitor提供了完善的服務接口管理與監控功能,
    • 針對不同應用的不同接口,可以進行 多版本,多協議,多註冊中心管理。

缺點:

  • 只支持JAVA語言

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章