1. 程式人生 > >Dubbo(概念篇):Dubbo 詳解,架構演變及優缺點

Dubbo(概念篇):Dubbo 詳解,架構演變及優缺點

架構演變

單一應用框架(ORM)

當網站流量很小時,只需一個應用,將所有功能如下單支付等都部署在一起,以減少部署節點和成本
缺點:單一的系統架構,使得在開發過程中,佔用的資源越來越多,而且隨著流量的增加越來越難以維護。

垂直應用框架(MVC)

垂直應用架構解決了單一應用架構所面臨的擴容問題,流量能夠分散到各個子系統當中,且系統的體積可控,一定程度上降低了開發人員之間協同以及維護的成本,提升了開發效率
缺點:但是在垂直架構中相同邏輯程式碼需要不斷的複製,不能複用

分散式應用架構(RPC)

當垂直應用越來越多,應用之間互動不可避免,將核心業務抽取出來,作為獨立的服務,逐漸形成穩定的服務中心。

流動計算架構(SOA)

隨著服務化的進一步發展,服務越來越多,服務之間的呼叫和依賴關係也越來越複雜,誕生了面向服務的架構體系(SOA),也因此衍生出了一系列相應的技術,如對服務提供、服務呼叫、連線處理、通訊協議、序列化方式、服務發現、服務路由、日誌輸出等行為進行封裝的服務框架。

總結

  • 單一應用架構
    當網站流量很小時,只需一個應用,將所有功能都部署在一起,以減少部署節點和成本。
    此時,用於簡化增刪改查工作量的 資料訪問框架(ORM) 是關鍵。
  • 垂直應用架構
    當訪問量逐漸增大,單一應用增加機器帶來的加速度越來越小,將應用拆成互不相干的幾個應用,以提升效率。
    此時,用於加速前端頁面開發的 Web框架(MVC) 是關鍵。
  • 分散式服務架構
    當垂直應用越來越多,應用之間互動不可避免,將核心業務抽取出來,作為獨立的服務,逐漸形成穩定的服務中心,使前端應用能更快速的響應多變的市場需求。
    此時,用於提高業務複用及整合的 分散式服務框架(RPC) 是關鍵。
  • 流動計算架構
    當服務越來越多,容量的評估,小服務資源的浪費等問題逐漸顯現,此時需增加一個排程中心基於訪問壓力實時管理叢集容量,提高叢集利用率。
    此時,用於提高機器利用率的 資源排程和治理中心(SOA) 是關鍵。

Dubbo

簡介

Dubbo是一個分散式服務框架,擁有高效能和透明化的RPC遠端服務呼叫方案以及SOA服務治理方案。

Dubbo 是阿里巴巴公司一個開源的高效能服務框架,致力於提供高效能和透明化的 RPC 遠端服務呼叫方案,以及 SOA 服務治理方案,使得應用可通過高效能 RPC 實現服務的輸出、輸入功能和 Spring 框架無縫整合。Dubbo 包含遠端通訊

叢集容錯自動發現三個核心部分。

它提供透明化的遠端方法呼叫,實現像呼叫本地方法一樣呼叫遠端方法,只需簡單配置,沒有任何 API 侵入。同時它具備軟負載均衡及容錯機制,可在內網替代 F5 等硬體負載均衡器,降低成本,減少單點。它可以實現服務自動註冊與發現,不再需要寫死服務提供方地址,註冊中心基於介面名查詢服務提供者的 IP 地址,並且能夠平滑新增或刪除服務提供者。

2011 年末,阿里巴巴在 GitHub 上開源了基於 Java 的分散式服務治理框架 Dubbo,之後它成為了國內該類開源專案的佼佼者,許多開發者對其表示青睞。同時,先後有不少公司在實踐中基於 Dubbo 進行分散式系統架構。目前在 GitHub 上,它的 fork、star 數均已破萬。

核心功能

  • 遠端通訊,提供對多種基於長連線的 NIO 框架抽象封裝,包括多種執行緒模型,序列化,以及“請求-響應”模式的資訊交換方式。

  • 叢集容錯,提供基於介面方法的透明遠端過程呼叫,包括多協議支援,以及軟負載均衡,失敗容錯,地址路由,動態配置等叢集支援。

  • 自動發現,基於註冊中心目錄服務,使服務消費方能動態的查詢服務提供方,使地址透明,使服務提供方可以平滑增加或減少機器

五大元件關係

服務提供(Provider): 暴露服務的服務提供方(提供者)。
服務消費(Consumer): 呼叫遠端服務的服務消費方(消費者)。
服務註冊中心(Registry): 服務註冊與發現的註冊中心。
監控平臺(Monitor): 統計服務的呼叫次數和呼叫時間的監控中心。

  1. 服務提供者 - 啟動時在指定埠上暴露服務,並將服務地址和埠註冊到註冊中心上

  2. 服務消費者 - 啟動時向註冊中心訂閱自己感興趣的服務,以便獲得服務提供方的地址列表

  3. 註冊中心 - 負責服務的註冊和發現,負責儲存服務提供方上報的地址資訊,並向服務消費方推送

  4. 監控中心 - 負責收集服務提供方和消費方的執行狀態,比如服務呼叫次數、延遲等,用於監控

  5. 執行容器 - 負責服務提供方的初始化、載入以及執行的生命週期管理

部署階段

  • 服務提供者在指定埠暴露服務,並向註冊中心註冊服務資訊。

  • 服務消費者向註冊中心發起服務地址列表的訂閱。

執行階段

  • 註冊中心向服務消費者推送地址列表資訊。

  • 服務消費者收到地址列表後,從其中選取一個向目標服務發起呼叫。

  • 呼叫過程服務消費者和服務提供者的執行狀態上報給監控中心。

呼叫流程

  • 服務提供方在啟動時候會註冊自己提供的服務到服務註冊中心。

  • 服務消費方在啟動時候會去服務註冊中心訂閱自己需要的服務,然後服務註冊中心非同步把消費方需要的服務介面的提供者的地址列表返回給服務消費方,服務消費方根據路由規則和設定的負載均衡演算法選擇一個服務提供者 ip 進行呼叫。

  • 監控平臺主要用來統計服務的呼叫次數和呼叫耗時,服務消費者和提供者,在記憶體中累計呼叫次數和呼叫耗時,並定時每分鐘傳送一次統計資料到監控中心,監控中心則使用資料繪製圖表來顯示,監控平臺不是分散式系統必須的,但是這些資料有助於系統運維和調優。服務提供者和消費者可以直接配置監控平臺的地址,也可以通過服務註冊中心來獲取。

  • 管理控制檯主要提供路由規則,動態配置,服務降級,訪問控制,權重調整,負載均衡,等管理功能。管理控制檯直接與服務註冊中心打交道,從服務註冊中心獲取所有註冊的服務和消費方法;並且可以通過管理臺介面設定服務消費端的路由規則,動態配置等資訊並註冊到服務管理臺,這些資訊會被通知到服務消費端。管理控制檯也不是分散式系統必備的元件,但是有了他我們可以對服務進行很好的治理和監控。

服務註冊中心

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

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

  • Redis註冊中心。
  • Dubbo簡易註冊中心。
  • Multicast註冊中心, 廣播受到網路結構的影響,一般本地不想搭註冊中心的話使用這種呼叫。
  • Zookeeper註冊中心, 推薦叢集中部署奇數個節點,由於zookeeper掛掉一半的機器叢集就不可用,所以部署4臺和3臺的叢集都是在掛掉2臺後叢集不可用。

Dubbo 特點

Dubbo 架構具有以下幾個特點,分別是連通性、健壯性、伸縮性、以及向未來架構的升級性。

連通性

  • 註冊中心負責服務地址的註冊與查詢,相當於目錄服務,服務提供者和消費者只在啟動時與註冊中心互動,註冊中心不轉發請求,壓力較小

  • 監控中心負責統計各服務呼叫次數,呼叫時間等,統計先在記憶體彙總後每分鐘一次傳送到監控中心伺服器,並以報表展示

  • 服務提供者向註冊中心註冊其提供的服務,並彙報呼叫時間到監控中心,此時間不包含網路開銷

  • 服務消費者向註冊中心獲取服務提供者地址列表,並根據負載演算法直接呼叫提供者,同時彙報呼叫時間到監控中心,此時間包含網路開銷

  • 註冊中心,服務提供者,服務消費者三者之間均為長連線,監控中心除外

  • 註冊中心通過長連線感知服務提供者的存在,服務提供者宕機,註冊中心將立即推送事件通知消費者

  • 註冊中心和監控中心全部宕機,不影響已執行的提供者和消費者,消費者在本地快取了提供者列表

  • 註冊中心和監控中心都是可選的,服務消費者可以直連服務提供者

健壯性

  • 監控中心宕掉不影響使用,只是丟失部分取樣資料

  • 資料庫宕掉後,註冊中心仍能通過快取提供服務列表查詢,但不能註冊新服務

  • 註冊中心對等叢集,任意一臺宕掉後,將自動切換到另一臺

  • 註冊中心全部宕掉後,服務提供者和服務消費者仍能通過本地快取通訊

  • 服務提供者無狀態,任意一臺宕掉後,不影響使用

  • 服務提供者全部宕掉後,服務消費者應用將無法使用,並無限次重連等待服務提供者恢復

伸縮性

  • 註冊中心為對等叢集,可動態增加機器部署例項,所有客戶端將自動發現新的註冊中心

  • 服務提供者無狀態,可動態增加機器部署例項,註冊中心將推送新的服務提供者資訊給消費者

升級性

當服務叢集規模進一步擴大,帶動IT治理結構進一步升級,需要實現動態部署,進行流動計算,現有分散式服務架構不會帶來阻力。

下圖是未來可能的一種架構:

節點角色說明

Deployer

自動部署服務的本地代理

Repository

倉庫用於儲存服務應用釋出包

Scheduler

排程中心基於訪問壓力自動增減服務提供者

Admin

統一管理控制檯

Registry

服務註冊與發現的註冊中心

Monitor

統計服務的呼叫次數和呼叫時間的監控中心

Dubbo 優缺點

優點

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

缺點

  • 目前只支援JAVA語言