淺談服務治理、微服務與Service Mesh:Dubbo的前世今生

本文將為大家介紹當下最流行的服務治理、微服務等相關內容,從服務治理、SOA、微服務到最新的服務網格(Service Mesh)進行綜合介紹和分析。易商阜極自2017年開始積極引進微服務的理念,并運用于多個項目實踐中,為項目升級改造帶來了顯著效果。本文將以Dubbo為例,向大家介紹SOA、服務治理等概念,以及Dubbo的基礎知識和最新發展情況。

SOA與服務治理

SOA(面向服務的體系結構)概念由來已久,在10多年前便開始進入到我們廣大軟件開發者的視線中。SOA是一種粗粒度、松耦合服務架構,服務之間通過簡單、精確定義接口進行通訊,不涉及底層編程接口和通訊模型。SOA可以看作是B/S模型、Web Service技術之后的自然延伸。

服務治理,也稱為SOA治理,是指用來管理SOA的采用和實現的過程。以下是在2006年時IBM對于服務治理要點的總結:

  • 服務定義(服務的范圍、接口和邊界)
  • 服務部署生命周期(各個生命周期階段)
  • 服務版本治理(包括兼容性)
  • 服務遷移(啟用和退役)
  • 服務注冊中心(依賴關系)
  • 服務消息模型(規范數據模型)
  • 服務監視(進行問題確定)
  • 服務所有權(企業組織)
  • 服務測試(重復測試)
  • 服務安全(包括可接受的保護范圍)

限于當時的技術發展水平,廣大軟件設計與開發人員對于SOA和服務治理的技術認知還主要停留在Web Service和ESB總線等技術和規范上,并沒有真正在軟件開發中得以充分落地。

Dubbo開源

直到2011年10月27日,阿里巴巴開源了自己的SOA服務化治理方案的核心框架Dubbo,服務治理和SOA的設計理念開始逐漸在國內軟件行業中落地,并被廣泛應用。

Dubbo作為阿里巴巴內部的SOA服務化治理方案的核心框架,在2012年時已經每天為2000+個服務提供3,000,000,000+次訪問量支持,并被廣泛應用于阿里巴巴集團的各成員站點。Dubbo自2011年開源后,已被許多非阿里系公司使用,其中既有當當網、網易考拉等互聯網公司,也有中國人壽、青島海爾等傳統企業。

Dubbo簡介

Dubbo是一個高性能服務框架,致力于提供高性能和透明化的RPC遠程服務調用方案,以及SOA服務治理方案,使得應用可通過高性能RPC實現服務的輸出和輸入功能,和Spring框架可以無縫集成。

作為一個分布式服務框架,以及SOA治理方案,Dubbo其功能主要包括:高性能NIO通訊及多協議集成,服務動態尋址與路由,軟負載均衡與容錯,依賴分析與服務降級等。Dubbo最大的特點是按照分層的方式來架構,使用這種方式可以使各個層之間解耦合(或者最大限度地松耦合)。從服務模型的角度來看,Dubbo采用的是一種非常簡單的模型,要么是提供方提供服務,要么是消費方消費服務,所以基于這一點可以抽象出服務提供方(Provider)和服務消費方(Consumer)兩個角色。

Dubbo包含遠程通訊、集群容錯和自動發現三個核心部分。提供透明化的遠程方法調用,實現像調用本地方法一樣調用遠程方法,只需簡單配置,沒有任何API侵入。同時具備軟負載均衡及容錯機制,可在內網替代F5等硬件負載均衡器,降低成本,減少單點。可以實現服務自動注冊與發現,不再需要寫死服務提供方地址,注冊中心基于接口名查詢服務提供者的IP地址,并且能夠平滑添加或刪除服務提供者。

下圖來自Dubbo官網,描述了服務注冊中心、服務提供方、服務消費方、服務監控中心之間的調用關系,具體如下圖所示:

淺談服務治理、微服務與Service Mesh:Dubbo的前世今生

節點角色說明:

淺談服務治理、微服務與Service Mesh:Dubbo的前世今生

調用關系說明:

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

Dubbo總體架構

Dubbo框架設計共劃分了10層,最上面的Service層是留給實際使用Dubbo開發分布式服務的開發者實現業務邏輯的接口層。圖中左邊淡藍背景的為服務消費方使用的接口,右邊淡綠色背景的為服務提供方使用的接口,位于中軸線上的為雙方都用到的接口。

淺談服務治理、微服務與Service Mesh:Dubbo的前世今生

各層說明:

  • Config配置層:對外配置接口,以ServiceConfig、ReferenceConfig為中心,可以直接初始化配置類,也可以通過Spring解析配置生成配置類。
  • Proxy服務代理層:服務接口透明代理,生成服務的客戶端Stub和服務器端Skeleton,以ServiceProxy為中心,擴展接口為ProxyFactory。
  • Registry注冊中心層:封裝服務地址的注冊與發現,以服務URL為中心,擴展接口為RegistryFactory、Registry、RegistryService。
  • Cluster路由層:封裝多個提供者的路由及負載均衡,并橋接注冊中心,以Invoker為中心,擴展接口為Cluster、Directory、Router、LoadBalance。
  • Monitor監控層:RPC調用次數和調用時間監控,以Statistics為中心,擴展接口為MonitorFactory、Monitor、MonitorService。
  • Protocol遠程調用層:封將RPC調用,以Invocation、Result為中心,擴展接口為Protocol、Invoker、Exporter。
  • Exchange信息交換層:封裝請求響應模式,同步轉異步,以Request、Response為中心,擴展接口為Exchanger、ExchangeChannel、ExchangeClient、ExchangeServer。
  • Transport網絡傳輸層:抽象MINA和Netty為統一接口,以Message為中心,擴展接口為Channel、Transporter、Client、Server、Codec。
  • Serialize數據序列化層:可復用的一些工具,擴展接口為Serialization、ObjectInput、ObjectOutput、ThreadPool。

模塊分包

淺談服務治理、微服務與Service Mesh:Dubbo的前世今生

各模塊說明:

  • dubbo-common公共邏輯模塊:包括Util類和通用模型。
  • dubbo-remoting遠程通訊模塊:相當于Dubbo協議的實現,如果RPC用 RMI協議則不需要使用此包。
  • dubbo-rpc遠程調用模塊:抽象各種協議,以及動態代理,只包含一對一的調用,不關心集群的管理。
  • dubbo-cluster集群模塊:將多個服務提供方偽裝為一個提供方,包括:負載均衡、容錯、路由等,集群的地址列表可以是靜態配置的,也可以是由注冊中心下發。
  • dubbo-registry注冊中心模塊:基于注冊中心下發地址的集群方式,以及對各種注冊中心的抽象。
  • dubbo-monitor監控模塊:統計服務調用次數、調用時間的、調用鏈跟蹤的服務。
  • dubbo-config配置模塊:是Dubbo對外的API,用戶通過Config使用Dubbo,隱藏Dubbo所有細節。
  • dubbo-container容器模塊:是一個Standlone的容器,以簡單的Main加載Spring啟動,因為服務通常不需要Tomcat/JBoss等Web容器的特性,沒必要用Web容器去加載服務。

協議支持

  • Dubbo協議(默認協議)
  • Hessian協議
  • HTTP協議
  • RMI協議
  • WebService協議
  • Thrift協議
  • Memcached協議
  • Redis協議

注冊中心

(1)Multicast注冊中心:

Multicast注冊中心不需要啟動任何中心節點,只要廣播地址一樣,就可以互相發現。組播受網絡結構限制,只適合小規模應用或開發階段使用。組播地址段:224.0.0.0 - 239.255.255.255。

(2)ZooKeeper注冊中心(推薦):

ZooKeeper是Apacahe子項目,是一個樹型的目錄服務,支持變更推送,適合作為Dubbo服務的注冊中心,可用于生產環境。

淺談服務治理、微服務與Service Mesh:Dubbo的前世今生

對上圖流程說明如下:

  1. 服務提供者(Provider)啟動時,向/dubbo/com.foo.BarService/providers目錄下寫入URL。
  2. 服務消費者(Consumer)啟動時,訂閱/dubbo/com.foo.BarService/providers目錄下的URL,向/dubbo/com.foo.BarService/consumers目錄下寫入自己的URL。
  3. 監控中心(Monitor)啟動時,訂閱/dubbo/com.foo.BarService目錄下的所有提供者和消費者URL。

(3)Redis注冊中心:

阿里內部并沒有采用Redis做為注冊中心,而是使用自己實現的基于數據庫的注冊中心,即:Redis注冊中心并沒有在阿里內部長時間運行的可靠性保障,此Redis橋接實現只為開源版本提供,其可靠性依賴于Redis本身的可靠性。

(4)Simple注冊中心:

Simple注冊中心本身就是一個普通的Dubbo服務,可以減少第三方依賴,使整體通訊方式一致。只是簡單實現,不支持集群,可作為自定義注冊中心的參考,但不適合直接用于生產環境。

遠程通信與信息交換

遠程通信需要指定通信雙方所約定的協議,在保證通信雙方理解協議語義的基礎上,還要保證高效、穩定的消息傳輸。Dubbo繼承了當前主流的網絡通信框架,主要包括如下幾個:

  • Mina
  • Netty(默認)
  • Grizzly

停止維護

從2012年10月23日Dubbo 2.5.3發布后,在Dubbo開源將滿一周年之際,阿里基本停止了對Dubbo的主要升級。只在之后的2013年和2014年更新過2次對Dubbo 2.4的維護版本,然后停止了所有維護工作。Dubbo對Srping的支持也停留在了Spring 2.5.6版本上。

分支出現

在阿里停止維護和升級Dubbo期間,當當網開始維護自己的Dubbo分支版本Dubbox,支持了新版本的Spring,并對外開源了Dubbox。同時,網易考拉也維護了自己的獨立分支Dubbok,可惜并未對外開源。

重獲新生

經過多年漫長的等待,隨著微服務的火熱興起,在國內外開發者對阿里不再升級維護Dubbo的吐槽聲中,阿里終于開始重新對Dubbo的升級和維護工作。在2017年9月7日 ,阿里發布了Dubbo的2.5.4版本,距離上一個版本2.5.3發布已經接近快5年時間了。在隨后的幾個月中,阿里Dubbo開發團隊以差不多每月一版本的速度開始快速升級迭代,修補了Dubbo老版本多年來存在的諸多bug,并對Spring等組件的支持進行了全面升級。

分支合并

在2018年1月8日,Dubbo 2.6.0版本發布,新版本將之前當當網開源的Dubbo分支Dubbox進行了合并,實現了Dubbo版本的統一整合。

Dubbo與Spring Cloud

阿里巴巴負責主導了 Dubbo 重啟維護的研發工程師劉軍在接受采訪時表示:當前由于 RPC 協議、注冊中心元數據不匹配等問題,在面臨微服務基礎框架選型時Dubbo與Spring Cloud是只能二選一,這也是為什么大家總是拿Dubbo和Spring Cloud做對比的原因之一。Dubbo之后會積極尋求適配到Spring Cloud生態,比如作為Spring Cloud的二進制通信方案來發揮Dubbo的性能優勢,或者Dubbo通過模塊化以及對http的支持適配到Spring Cloud。

獲取更多Java高級架構最新視頻,

加入Java進階架構交流群:142019080。直接點擊鏈接加群。https://jq.qq.com/?_wv=1027&k=5lXBNZ7

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,327評論 6 537
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,996評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,316評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,406評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,128評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,524評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,576評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,759評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,310評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,065評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,249評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,821評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,479評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,909評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,140評論 1 290
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,984評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,228評論 2 375

推薦閱讀更多精彩內容