淺談服務(wù)治理殖告、微服務(wù)與Service Mesh:Dubbo的前世今生

本文將為大家介紹當(dāng)下最流行的服務(wù)治理、微服務(wù)等相關(guān)內(nèi)容辛孵,從服務(wù)治理丛肮、SOA、微服務(wù)到最新的服務(wù)網(wǎng)格(Service Mesh)進行綜合介紹和分析魄缚。易商阜極自2017年開始積極引進微服務(wù)的理念,并運用于多個項目實踐中焚廊,為項目升級改造帶來了顯著效果冶匹。本文將以Dubbo為例,向大家介紹SOA咆瘟、服務(wù)治理等概念嚼隘,以及Dubbo的基礎(chǔ)知識和最新發(fā)展情況。

SOA與服務(wù)治理

SOA(面向服務(wù)的體系結(jié)構(gòu))概念由來已久袒餐,在10多年前便開始進入到我們廣大軟件開發(fā)者的視線中飞蛹。SOA是一種粗粒度谤狡、松耦合服務(wù)架構(gòu),服務(wù)之間通過簡單卧檐、精確定義接口進行通訊墓懂,不涉及底層編程接口和通訊模型。SOA可以看作是B/S模型霉囚、Web Service技術(shù)之后的自然延伸捕仔。

服務(wù)治理,也稱為SOA治理盈罐,是指用來管理SOA的采用和實現(xiàn)的過程榜跌。以下是在2006年時IBM對于服務(wù)治理要點的總結(jié):

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

限于當(dāng)時的技術(shù)發(fā)展水平盅粪,廣大軟件設(shè)計與開發(fā)人員對于SOA和服務(wù)治理的技術(shù)認(rèn)知還主要停留在Web Service和ESB總線等技術(shù)和規(guī)范上钓葫,并沒有真正在軟件開發(fā)中得以充分落地。

Dubbo開源

直到2011年10月27日票顾,阿里巴巴開源了自己的SOA服務(wù)化治理方案的核心框架Dubbo础浮,服務(wù)治理和SOA的設(shè)計理念開始逐漸在國內(nèi)軟件行業(yè)中落地,并被廣泛應(yīng)用库物。

Dubbo作為阿里巴巴內(nèi)部的SOA服務(wù)化治理方案的核心框架霸旗,在2012年時已經(jīng)每天為2000+個服務(wù)提供3,000,000,000+次訪問量支持,并被廣泛應(yīng)用于阿里巴巴集團的各成員站點戚揭。Dubbo自2011年開源后诱告,已被許多非阿里系公司使用,其中既有當(dāng)當(dāng)網(wǎng)民晒、網(wǎng)易考拉等互聯(lián)網(wǎng)公司精居,也有中國人壽、青島海爾等傳統(tǒng)企業(yè)潜必。

Dubbo簡介

Dubbo是一個高性能服務(wù)框架靴姿,致力于提供高性能和透明化的RPC遠程服務(wù)調(diào)用方案,以及SOA服務(wù)治理方案磁滚,使得應(yīng)用可通過高性能RPC實現(xiàn)服務(wù)的輸出和輸入功能佛吓,和Spring框架可以無縫集成。

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

Dubbo包含遠程通訊锌介、集群容錯和自動發(fā)現(xiàn)三個核心部分嗜诀。提供透明化的遠程方法調(diào)用,實現(xiàn)像調(diào)用本地方法一樣調(diào)用遠程方法孔祸,只需簡單配置隆敢,沒有任何API侵入。同時具備軟負(fù)載均衡及容錯機制崔慧,可在內(nèi)網(wǎng)替代F5等硬件負(fù)載均衡器拂蝎,降低成本,減少單點惶室∥伦裕可以實現(xiàn)服務(wù)自動注冊與發(fā)現(xiàn),不再需要寫死服務(wù)提供方地址皇钞,注冊中心基于接口名查詢服務(wù)提供者的IP地址悼泌,并且能夠平滑添加或刪除服務(wù)提供者。

下圖來自Dubbo官網(wǎng)夹界,描述了服務(wù)注冊中心馆里、服務(wù)提供方、服務(wù)消費方可柿、服務(wù)監(jiān)控中心之間的調(diào)用關(guān)系鸠踪,具體如下圖所示:

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

節(jié)點角色說明:

淺談服務(wù)治理复斥、微服務(wù)與Service Mesh:Dubbo的前世今生

調(diào)用關(guān)系說明:

  1. 服務(wù)容器負(fù)責(zé)啟動营密,加載,運行服務(wù)提供者目锭。
  2. 服務(wù)提供者在啟動時评汰,向注冊中心注冊自己提供的服務(wù)。
  3. 服務(wù)消費者在啟動時痢虹,向注冊中心訂閱自己所需的服務(wù)键俱。
  4. 注冊中心返回服務(wù)提供者地址列表給消費者,如果有變更世分,注冊中心將基于長連接推送變更數(shù)據(jù)給消費者。
  5. 服務(wù)消費者缀辩,從提供者地址列表中臭埋,基于軟負(fù)載均衡算法踪央,選一臺提供者進行調(diào)用,如果調(diào)用失敗瓢阴,再選另一臺調(diào)用畅蹂。
  6. 服務(wù)消費者和提供者,在內(nèi)存中累計調(diào)用次數(shù)和調(diào)用時間荣恐,定時每分鐘發(fā)送一次統(tǒng)計數(shù)據(jù)到監(jiān)控中心液斜。

Dubbo總體架構(gòu)

Dubbo框架設(shè)計共劃分了10層,最上面的Service層是留給實際使用Dubbo開發(fā)分布式服務(wù)的開發(fā)者實現(xiàn)業(yè)務(wù)邏輯的接口層叠穆。圖中左邊淡藍背景的為服務(wù)消費方使用的接口少漆,右邊淡綠色背景的為服務(wù)提供方使用的接口,位于中軸線上的為雙方都用到的接口硼被。

淺談服務(wù)治理示损、微服務(wù)與Service Mesh:Dubbo的前世今生

各層說明:

  • Config配置層:對外配置接口,以ServiceConfig嚷硫、ReferenceConfig為中心检访,可以直接初始化配置類,也可以通過Spring解析配置生成配置類仔掸。
  • Proxy服務(wù)代理層:服務(wù)接口透明代理脆贵,生成服務(wù)的客戶端Stub和服務(wù)器端Skeleton,以ServiceProxy為中心起暮,擴展接口為ProxyFactory卖氨。
  • Registry注冊中心層:封裝服務(wù)地址的注冊與發(fā)現(xiàn),以服務(wù)URL為中心鞋怀,擴展接口為RegistryFactory双泪、Registry、RegistryService密似。
  • Cluster路由層:封裝多個提供者的路由及負(fù)載均衡焙矛,并橋接注冊中心,以Invoker為中心残腌,擴展接口為Cluster村斟、Directory、Router抛猫、LoadBalance蟆盹。
  • Monitor監(jiān)控層:RPC調(diào)用次數(shù)和調(diào)用時間監(jiān)控,以Statistics為中心闺金,擴展接口為MonitorFactory逾滥、Monitor、MonitorService败匹。
  • Protocol遠程調(diào)用層:封將RPC調(diào)用寨昙,以Invocation讥巡、Result為中心,擴展接口為Protocol舔哪、Invoker欢顷、Exporter。
  • Exchange信息交換層:封裝請求響應(yīng)模式捉蚤,同步轉(zhuǎn)異步抬驴,以Request、Response為中心缆巧,擴展接口為Exchanger布持、ExchangeChannel、ExchangeClient盅蝗、ExchangeServer鳖链。
  • Transport網(wǎng)絡(luò)傳輸層:抽象MINA和Netty為統(tǒng)一接口,以Message為中心墩莫,擴展接口為Channel芙委、Transporter、Client狂秦、Server灌侣、Codec。
  • Serialize數(shù)據(jù)序列化層:可復(fù)用的一些工具裂问,擴展接口為Serialization侧啼、ObjectInput、ObjectOutput堪簿、ThreadPool痊乾。

模塊分包

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

各模塊說明:

  • dubbo-common公共邏輯模塊:包括Util類和通用模型椭更。
  • dubbo-remoting遠程通訊模塊:相當(dāng)于Dubbo協(xié)議的實現(xiàn)哪审,如果RPC用 RMI協(xié)議則不需要使用此包。
  • dubbo-rpc遠程調(diào)用模塊:抽象各種協(xié)議虑瀑,以及動態(tài)代理湿滓,只包含一對一的調(diào)用,不關(guān)心集群的管理舌狗。
  • dubbo-cluster集群模塊:將多個服務(wù)提供方偽裝為一個提供方叽奥,包括:負(fù)載均衡、容錯痛侍、路由等朝氓,集群的地址列表可以是靜態(tài)配置的,也可以是由注冊中心下發(fā)。
  • dubbo-registry注冊中心模塊:基于注冊中心下發(fā)地址的集群方式膀篮,以及對各種注冊中心的抽象嘹狞。
  • dubbo-monitor監(jiān)控模塊:統(tǒng)計服務(wù)調(diào)用次數(shù)、調(diào)用時間的誓竿、調(diào)用鏈跟蹤的服務(wù)。
  • dubbo-config配置模塊:是Dubbo對外的API谈截,用戶通過Config使用Dubbo筷屡,隱藏Dubbo所有細(xì)節(jié)。
  • dubbo-container容器模塊:是一個Standlone的容器簸喂,以簡單的Main加載Spring啟動毙死,因為服務(wù)通常不需要Tomcat/JBoss等Web容器的特性,沒必要用Web容器去加載服務(wù)喻鳄。

協(xié)議支持

  • Dubbo協(xié)議(默認(rèn)協(xié)議)
  • Hessian協(xié)議
  • HTTP協(xié)議
  • RMI協(xié)議
  • WebService協(xié)議
  • Thrift協(xié)議
  • Memcached協(xié)議
  • Redis協(xié)議

注冊中心

(1)Multicast注冊中心:

Multicast注冊中心不需要啟動任何中心節(jié)點扼倘,只要廣播地址一樣,就可以互相發(fā)現(xiàn)除呵。組播受網(wǎng)絡(luò)結(jié)構(gòu)限制再菊,只適合小規(guī)模應(yīng)用或開發(fā)階段使用。組播地址段:224.0.0.0 - 239.255.255.255颜曾。

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

ZooKeeper是Apacahe子項目纠拔,是一個樹型的目錄服務(wù),支持變更推送泛豪,適合作為Dubbo服務(wù)的注冊中心稠诲,可用于生產(chǎn)環(huán)境。

淺談服務(wù)治理诡曙、微服務(wù)與Service Mesh:Dubbo的前世今生

對上圖流程說明如下:

  1. 服務(wù)提供者(Provider)啟動時臀叙,向/dubbo/com.foo.BarService/providers目錄下寫入URL。
  2. 服務(wù)消費者(Consumer)啟動時价卤,訂閱/dubbo/com.foo.BarService/providers目錄下的URL劝萤,向/dubbo/com.foo.BarService/consumers目錄下寫入自己的URL。
  3. 監(jiān)控中心(Monitor)啟動時荠雕,訂閱/dubbo/com.foo.BarService目錄下的所有提供者和消費者URL稳其。

(3)Redis注冊中心:

阿里內(nèi)部并沒有采用Redis做為注冊中心,而是使用自己實現(xiàn)的基于數(shù)據(jù)庫的注冊中心炸卑,即:Redis注冊中心并沒有在阿里內(nèi)部長時間運行的可靠性保障既鞠,此Redis橋接實現(xiàn)只為開源版本提供,其可靠性依賴于Redis本身的可靠性盖文。

(4)Simple注冊中心:

Simple注冊中心本身就是一個普通的Dubbo服務(wù)嘱蛋,可以減少第三方依賴,使整體通訊方式一致。只是簡單實現(xiàn)洒敏,不支持集群龄恋,可作為自定義注冊中心的參考,但不適合直接用于生產(chǎn)環(huán)境凶伙。

遠程通信與信息交換

遠程通信需要指定通信雙方所約定的協(xié)議郭毕,在保證通信雙方理解協(xié)議語義的基礎(chǔ)上,還要保證高效函荣、穩(wěn)定的消息傳輸显押。Dubbo繼承了當(dāng)前主流的網(wǎng)絡(luò)通信框架,主要包括如下幾個:

  • Mina
  • Netty(默認(rèn))
  • Grizzly

停止維護

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

分支出現(xiàn)

在阿里停止維護和升級Dubbo期間绪抛,當(dāng)當(dāng)網(wǎng)開始維護自己的Dubbo分支版本Dubbox资铡,支持了新版本的Spring,并對外開源了Dubbox睦疫。同時害驹,網(wǎng)易考拉也維護了自己的獨立分支Dubbok,可惜并未對外開源蛤育。

重獲新生

經(jīng)過多年漫長的等待宛官,隨著微服務(wù)的火熱興起,在國內(nèi)外開發(fā)者對阿里不再升級維護Dubbo的吐槽聲中瓦糕,阿里終于開始重新對Dubbo的升級和維護工作底洗。在2017年9月7日 ,阿里發(fā)布了Dubbo的2.5.4版本咕娄,距離上一個版本2.5.3發(fā)布已經(jīng)接近快5年時間了亥揖。在隨后的幾個月中,阿里Dubbo開發(fā)團隊以差不多每月一版本的速度開始快速升級迭代圣勒,修補了Dubbo老版本多年來存在的諸多bug费变,并對Spring等組件的支持進行了全面升級。

分支合并

在2018年1月8日圣贸,Dubbo 2.6.0版本發(fā)布挚歧,新版本將之前當(dāng)當(dāng)網(wǎng)開源的Dubbo分支Dubbox進行了合并,實現(xiàn)了Dubbo版本的統(tǒng)一整合吁峻。

Dubbo與Spring Cloud

阿里巴巴負(fù)責(zé)主導(dǎo)了 Dubbo 重啟維護的研發(fā)工程師劉軍在接受采訪時表示:當(dāng)前由于 RPC 協(xié)議滑负、注冊中心元數(shù)據(jù)不匹配等問題在张,在面臨微服務(wù)基礎(chǔ)框架選型時Dubbo與Spring Cloud是只能二選一,這也是為什么大家總是拿Dubbo和Spring Cloud做對比的原因之一矮慕。Dubbo之后會積極尋求適配到Spring Cloud生態(tài)帮匾,比如作為Spring Cloud的二進制通信方案來發(fā)揮Dubbo的性能優(yōu)勢,或者Dubbo通過模塊化以及對http的支持適配到Spring Cloud痴鳄。

獲取更多Java高級架構(gòu)最新視頻瘟斜,

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末哼转,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子槽华,更是在濱河造成了極大的恐慌,老刑警劉巖趟妥,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件猫态,死亡現(xiàn)場離奇詭異,居然都是意外死亡披摄,警方通過查閱死者的電腦和手機亲雪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來疚膊,“玉大人义辕,你說我怎么就攤上這事≡⒌粒” “怎么了灌砖?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長傀蚌。 經(jīng)常有香客問我基显,道長,這世上最難降的妖魔是什么善炫? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任撩幽,我火速辦了婚禮,結(jié)果婚禮上箩艺,老公的妹妹穿的比我還像新娘就缆。我一直安慰自己,他們只是感情好谱净,可當(dāng)我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布仅政。 她就那樣靜靜地躺著,像睡著了一般擂涛。 火紅的嫁衣襯著肌膚如雪读串。 梳的紋絲不亂的頭發(fā)上聊记,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天,我揣著相機與錄音恢暖,去河邊找鬼排监。 笑死,一個胖子當(dāng)著我的面吹牛杰捂,可吹牛的內(nèi)容都是我干的舆床。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼嫁佳,長吁一口氣:“原來是場噩夢啊……” “哼挨队!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蒿往,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤盛垦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后瓤漏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體腾夯,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年蔬充,在試婚紗的時候發(fā)現(xiàn)自己被綠了蝶俱。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡饥漫,死狀恐怖榨呆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情庸队,我是刑警寧澤积蜻,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站皿哨,受9級特大地震影響浅侨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜证膨,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一如输、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧央勒,春花似錦不见、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至井濒,卻和暖如春灶似,著一層夾襖步出監(jiān)牢的瞬間列林,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工酪惭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留希痴,地道東北人。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓春感,卻偏偏與公主長得像砌创,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鲫懒,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內(nèi)容