微服務(wù)架構(gòu)VS單體架構(gòu)

單體架構(gòu)

單體架構(gòu)也稱之為單體系統(tǒng)或者是單體應(yīng)用茧跋。就是一種把系統(tǒng)中所有的功能瘾杭、模塊耦合在一個(gè)應(yīng)用中的架構(gòu)方式

單體架構(gòu)特點(diǎn)

1、打包成一個(gè)獨(dú)立的單元(導(dǎo)成一個(gè)唯一的 jar 包或者是 war 包)

2蝇棉、會(huì)一個(gè)進(jìn)程的方式來(lái)運(yùn)行
MVC架構(gòu)银萍,就是典型的單體架構(gòu)

單體架構(gòu)的優(yōu)點(diǎn)、缺點(diǎn)

優(yōu)點(diǎn)

1飞袋、項(xiàng)目易于管理
2巧鸭、部署簡(jiǎn)單

缺點(diǎn)

1纲仍、測(cè)試成本高
2贸毕、可伸縮性差
3明棍、可靠性差
4、迭代困難
5沸版、跨語(yǔ)言程度差
6视粮、團(tuán)隊(duì)協(xié)作難

微服務(wù)架構(gòu)

什么是微服務(wù)

微服務(wù)是一種架構(gòu)風(fēng)格橙凳。一個(gè)大型的復(fù)雜軟件應(yīng)用区宇,由一個(gè)或多個(gè)微服務(wù)組成议谷。系統(tǒng)中的各個(gè)微服務(wù)可被獨(dú)立部署堕虹,各個(gè)微服務(wù)之間是松耦合的。每個(gè)微服務(wù)僅關(guān)注于完成一件任務(wù)并很好的完成該任務(wù)

架構(gòu)風(fēng)格

項(xiàng)目的一種設(shè)計(jì)模式郁稍。

常見(jiàn)的架構(gòu)風(fēng)格

1耀怜、客戶端與服務(wù)端的
2财破、基于組件模型的架構(gòu)(EJB)
3左痢、分層架構(gòu)(MVC)
4俊性、面向服務(wù)架構(gòu)(SOA)

微服務(wù)特點(diǎn):

1定页、系統(tǒng)是由多個(gè)服務(wù)構(gòu)成
2拯勉、每個(gè)服務(wù)可以單獨(dú)獨(dú)立部署
3宫峦、每個(gè)服務(wù)之間是松耦合的导绷。服務(wù)內(nèi)部是高內(nèi)聚的妥曲,外部是低耦合的檐盟。高內(nèi)聚就是每個(gè)服務(wù)只關(guān)注完成一個(gè)功能押桃。

微服務(wù)的優(yōu)點(diǎn)羡忘、缺點(diǎn)

優(yōu)點(diǎn)

1卷雕、測(cè)試容易
2漫雕、可伸縮性強(qiáng)
3九孩、可靠性強(qiáng)
4、跨語(yǔ)言程度會(huì)更加靈活
5梅惯、團(tuán)隊(duì)協(xié)作容易
6铣减、系統(tǒng)迭代容易

缺點(diǎn)

1葫哗、運(yùn)維成本過(guò)高,部署數(shù)量較多
2亿扁、接口兼容多版本
3从祝、分布式系統(tǒng)的復(fù)雜性
4擎浴、分布式事務(wù)

MVC毒涧、RPC、SOA萌狂、微服務(wù)架構(gòu)之間的區(qū)別

1 MVC 架構(gòu)

其實(shí) MVC 架構(gòu)就是一個(gè)單體架構(gòu)档玻。
代表技術(shù):Struts2、SpringMVC茫藏、Spring误趴、Mybatis 等等。

2 RPC 架構(gòu)

RPC(Remote Procedure Call):遠(yuǎn)程過(guò)程調(diào)用务傲。他一種通過(guò)網(wǎng)絡(luò)從遠(yuǎn)程計(jì)算機(jī)程序上請(qǐng)求服務(wù)凉当,而不需要了解底層網(wǎng)絡(luò)技術(shù)的協(xié)議。
代表技術(shù):Thrift售葡、Hessian 等等

3 SOA 架構(gòu)

SOA(Service oriented Architecture):面向服務(wù)架構(gòu)
ESB(Enterparise Servce Bus):企業(yè)服務(wù)總線看杭,服務(wù)中介。主要是提供了一個(gè)服務(wù)于服務(wù)之間的交互。
ESB 包含的功能如:負(fù)載均衡谴供,流量控制永淌,加密處理答恶,服務(wù)的監(jiān)控,異常處理燕酷,監(jiān)控告急等等酱讶。
代表技術(shù):Mule、WSO2

4 微服務(wù)架構(gòu)

微服務(wù)就是一個(gè)輕量級(jí)的服務(wù)治理方案。
代表技術(shù):SpringCloud、dubbo 等等

如何設(shè)計(jì)微服務(wù)以及設(shè)計(jì)原則

  1. AKF 拆分原則
    業(yè)界對(duì)于可擴(kuò)展的系統(tǒng)架構(gòu)設(shè)計(jì)有一個(gè)樸素的理念,就是:
    通過(guò)加機(jī)器就可以解決容量和可用性問(wèn)題。(如果一臺(tái)不行那就兩臺(tái))沛简。

    這一理念在“云計(jì)算”概念瘋狂流行的今天牡肉,得到了廣泛的認(rèn)可!對(duì)于一個(gè)規(guī)模迅速增長(zhǎng)的系統(tǒng)而言煌寇,容量和性能問(wèn)題當(dāng)然是首當(dāng)其沖的。但是隨著時(shí)間的向前击纬,系統(tǒng)規(guī)模的增長(zhǎng)殃饿,除了面對(duì)性能與容量的問(wèn)題外,還需要面對(duì)功能與模塊數(shù)量上的增長(zhǎng)帶來(lái)的系統(tǒng)復(fù)雜性問(wèn)題以及業(yè)務(wù)的變化帶來(lái)的提供差異化服務(wù)問(wèn)題肴甸。而許多系統(tǒng)庶柿,在架構(gòu)設(shè)計(jì)時(shí)并未充分考慮到這些問(wèn)題审残,導(dǎo)致系統(tǒng)的重構(gòu)成為常態(tài)介时,從而影響業(yè)務(wù)交付能力,還浪費(fèi)人力財(cái)力迁酸!對(duì)此串远,《可擴(kuò)展的藝術(shù)》一書(shū)提出了一個(gè)更加系統(tǒng)的可擴(kuò)展模型—— AKF 可擴(kuò)展立方 (Scalability Cube)更胖。這個(gè)立方體中沿著三個(gè)坐標(biāo)軸設(shè)置分別為:X、Y哺窄、Z。
    AKF

Y 軸擴(kuò)展會(huì)將龐大的整體應(yīng)用拆分為多個(gè)服務(wù)衙四。每個(gè)服務(wù)實(shí)現(xiàn)一組相關(guān)的功能,如訂單管理瞬逊、客戶管理等到旦。在工程上常見(jiàn)的方案是 服務(wù)化架構(gòu)(SOA) 仲器。比如對(duì)于一個(gè)電子商務(wù)平臺(tái)识虚,我們可以拆分成不同的服務(wù)妻献,組成下面這樣的架構(gòu):
服務(wù)化架構(gòu)(SOA)

但通過(guò)觀察上圖容易發(fā)現(xiàn)绿淋,當(dāng)服務(wù)數(shù)量增多時(shí)裁赠,服務(wù)調(diào)用關(guān)系變得復(fù)雜莲蜘。為系統(tǒng)添加一個(gè)新功能,要調(diào)用的服務(wù)數(shù)也變得不可控,由此引發(fā)了服務(wù)管理上的混亂。所以,一般情況下荷科,需要采用服務(wù)注冊(cè)的機(jī)制形成服務(wù)網(wǎng)關(guān)來(lái)進(jìn)行服務(wù)治理。系統(tǒng)的架構(gòu)將變成下圖所:

X 軸擴(kuò)展與我們前面樸素理念是一致的簿透,通過(guò)絕對(duì)平等地復(fù)制服務(wù)與數(shù)據(jù),以解決容量和可用性的問(wèn)題螟左。其實(shí)就是將微服務(wù)運(yùn)行多個(gè)實(shí)例啡浊,做集群加負(fù)載均衡的模式。為了提升單個(gè)服務(wù)的可用性和容量胶背, 對(duì)每一個(gè)服務(wù)進(jìn)行 X 軸擴(kuò)展劃分巷嚣。

Z 軸擴(kuò)展通常是指基于請(qǐng)求者或用戶獨(dú)特的需求,進(jìn)行系統(tǒng)劃分钳吟,并使得劃分出來(lái)的子系統(tǒng)是相互隔離但又是完整的廷粒。以生產(chǎn)汽車的工廠來(lái)舉例:福特公司為了發(fā)展在中國(guó)的業(yè)務(wù),或者利用中國(guó)的廉價(jià)勞動(dòng)力,在中國(guó)建立一個(gè)完整的子工廠坝茎,與美國(guó)工廠一樣涤姊,負(fù)責(zé)完整的汽車生產(chǎn)。這就是一種 Z 軸擴(kuò)展嗤放。
工程領(lǐng)域常見(jiàn)的 Z 軸擴(kuò)展有以下兩種方案:

單元化架構(gòu)在分布式服務(wù)設(shè)計(jì)領(lǐng)域思喊,一個(gè)單元(Cell)就是滿足某個(gè)分區(qū)所有業(yè)務(wù)操作的自包含閉環(huán)。如上面我們說(shuō)到的 Y 軸擴(kuò)展的 SOA 架構(gòu)次酌,客戶端對(duì)服務(wù)端節(jié)點(diǎn)的選擇一般是隨機(jī)的恨课,但是,如果在此加上 Z 軸擴(kuò)展和措,那服務(wù)節(jié)點(diǎn)的選擇將不再是隨機(jī)的了庄呈,而是每個(gè)單元自成一體。如下


數(shù)據(jù)分區(qū)
為了性能數(shù)據(jù)安全上的考慮派阱,我們將一個(gè)完整的數(shù)據(jù)集按一定的維度劃分出不同的子集诬留。 一個(gè)分區(qū)(Shard),就是是整體數(shù)據(jù)集的一個(gè)子集贫母。比如用尾號(hào)來(lái)劃分用戶文兑,那同樣尾號(hào)的那部分用戶就可以認(rèn)為是一個(gè)分區(qū)。數(shù)據(jù)分區(qū)為一般包括以下幾種數(shù)據(jù)劃分的方式:
數(shù)據(jù)類型(如:業(yè)務(wù)類型)
數(shù)據(jù)范圍(如:時(shí)間段腺劣,用戶 ID)
數(shù)據(jù)熱度(如:用戶活躍度绿贞,商品熱度)
按讀寫分(如:商品描述,商品庫(kù)存)

  1. 前后端分離原則
    何為前后端分離橘原?前后端本來(lái)不就分離么籍铁?這要從尷尬的 jsp 講起。分工精細(xì)化從來(lái)都是蛋糕做大的原則趾断,多個(gè)領(lǐng)域工程師最好在不需要接觸其他領(lǐng)域知識(shí)的情況下合作拒名,才可能使效率越來(lái)越高,維護(hù)也會(huì)變得簡(jiǎn)單芋酌。jsp 的模板技術(shù)融合了 html 和 java 代碼增显,使得傳統(tǒng)MVC 開(kāi)發(fā)中的前后端在這里如膠似漆,前端做好頁(yè)面脐帝,后端轉(zhuǎn)成模板同云,發(fā)現(xiàn)問(wèn)題再找前端,前端又看不懂 java 代碼......前后端分離的目的就是將這尷尬局面打破堵腹。

    前后端分離原則炸站,簡(jiǎn)單來(lái)講就是前端和后端的代碼分離,我們推薦的模式是最好采用物理分離的方式部署疚顷,進(jìn)一步促使更徹底的分離旱易。如果繼續(xù)直接使用服務(wù)端模板技術(shù),如:jsp,把 java咒唆、js、html释液、css 都堆到一個(gè)頁(yè)面里全释,稍微復(fù)雜一點(diǎn)的頁(yè)面就無(wú)法維護(hù)了。

    這種分離方式有幾個(gè)好處:
    2.1) 前后端技術(shù)分離误债,可以由各自的專家來(lái)對(duì)各自的領(lǐng)域進(jìn)行優(yōu)化浸船,這樣前段的用戶體驗(yàn)優(yōu)化效果更好。

    2.2) 分離模式下寝蹈,前后端交互界面更清晰李命,就剩下了接口模型,后端的接口簡(jiǎn)潔明了箫老,更容易維護(hù)封字。
    2.3) 前端多渠道集成場(chǎng)景更容易實(shí)現(xiàn),后端服務(wù)無(wú)需變更耍鬓,采用統(tǒng)一的數(shù)據(jù)和模型阔籽,可以支持多個(gè)前端:例如:微信 h5 前端、PC 前端牲蜀、安卓前端笆制、IOS 前端。

  2. 無(wú)狀態(tài)服務(wù)
    對(duì)于無(wú)狀態(tài)服務(wù)涣达,首先說(shuō)一下什么是狀態(tài):如果一個(gè)數(shù)據(jù)需要被多個(gè)服務(wù)共享在辆,才能完成一筆交易,那么這個(gè)數(shù)據(jù)被稱為狀態(tài)度苔。進(jìn)而依賴這個(gè)“狀態(tài)”數(shù)據(jù)的服務(wù)被稱為有狀態(tài)服務(wù)匆篓,反之稱為無(wú)狀態(tài)服務(wù)。
    那么這個(gè)無(wú)狀態(tài)服務(wù)原則并不是說(shuō)在微服務(wù)架構(gòu)里就不允許存在狀態(tài)林螃,表達(dá)的真實(shí)意思是要把有狀態(tài)的業(yè)務(wù)服務(wù)改變?yōu)闊o(wú)狀態(tài)的計(jì)算類服務(wù)奕删,那么狀態(tài)數(shù)據(jù)也就相應(yīng)的遷移到對(duì)應(yīng)的“有狀態(tài)數(shù)據(jù)服務(wù)”中。

    場(chǎng)景說(shuō)明:例如我們以前在本地內(nèi)存中建立的數(shù)據(jù)緩存疗认、Session 緩存完残,到現(xiàn)在的微服務(wù)架構(gòu)中就應(yīng)該把這些數(shù)據(jù)遷移到分布式緩存中存儲(chǔ),讓業(yè)務(wù)服務(wù)變成一個(gè)無(wú)狀態(tài)的計(jì)算節(jié)點(diǎn)横漏。遷移后谨设,就可以做到按需動(dòng)態(tài)伸縮,微服務(wù)應(yīng)用在運(yùn)行時(shí)動(dòng)態(tài)增刪節(jié)點(diǎn)缎浇,就不再需要考慮緩存數(shù)據(jù)如何同步的問(wèn)題
  3. RestFul 的通信
    作為一個(gè)原則來(lái)講本來(lái)應(yīng)該是個(gè)“無(wú)狀態(tài)通信原則”扎拣,在這里我們直接推薦一個(gè)實(shí)踐優(yōu)選的 Restful 通信風(fēng)格 ,因?yàn)樗泻芏嗪锰帲?br> 4.1 無(wú)狀態(tài)協(xié)議 HTTP,具備先天優(yōu)勢(shì)二蓝,擴(kuò)展能力很強(qiáng)誉券。例如需要安全加密,有現(xiàn)成的成熟方案 HTTPS 即可刊愚。
    4.2 JSON 報(bào)文序列化踊跟,輕量簡(jiǎn)單,人與機(jī)器均可讀鸥诽,學(xué)習(xí)成本低商玫,搜索引擎友好

    4.3 語(yǔ)言無(wú)關(guān),各大熱門語(yǔ)言都提供成熟的 Restful API 框架牡借,相對(duì)其他的一些RPC 框架生態(tài)更完
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拳昌,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子钠龙,更是在濱河造成了極大的恐慌炬藤,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件碴里,死亡現(xiàn)場(chǎng)離奇詭異刻像,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)并闲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門细睡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人帝火,你說(shuō)我怎么就攤上這事溜徙。” “怎么了犀填?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵蠢壹,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我九巡,道長(zhǎng)图贸,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任冕广,我火速辦了婚禮疏日,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘撒汉。我一直安慰自己沟优,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布睬辐。 她就那樣靜靜地躺著挠阁,像睡著了一般宾肺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上侵俗,一...
    開(kāi)封第一講書(shū)人閱讀 51,708評(píng)論 1 305
  • 那天锨用,我揣著相機(jī)與錄音,去河邊找鬼隘谣。 笑死黔酥,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的洪橘。 我是一名探鬼主播,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼棵帽,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼熄求!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起逗概,我...
    開(kāi)封第一講書(shū)人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤弟晚,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后逾苫,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體卿城,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年铅搓,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了瑟押。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡星掰,死狀恐怖多望,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情氢烘,我是刑警寧澤怀偷,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站播玖,受9級(jí)特大地震影響椎工,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蜀踏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一维蒙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧果覆,春花似錦木西、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)吗讶。三九已至,卻和暖如春恋捆,著一層夾襖步出監(jiān)牢的瞬間照皆,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工沸停, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留膜毁,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓愤钾,卻偏偏與公主長(zhǎng)得像瘟滨,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子能颁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

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