多研究些架構(gòu),少談些框架(1) -- 論微服務(wù)架構(gòu)的核心概念

微服務(wù)架構(gòu)和SOA區(qū)別

微服務(wù)現(xiàn)在辣么火,業(yè)界流行的對(duì)比的卻都是所謂的Monolithic單體應(yīng)用躏结,而大量的系統(tǒng)在十幾年前都是已經(jīng)是分布式系統(tǒng)了却盘,那么微服務(wù)作為新的理念和原來(lái)的分布式系統(tǒng),或者說(shuō)SOA(面向服務(wù)架構(gòu))是什么區(qū)別呢媳拴?

我們先看相同點(diǎn)

需要Registry黄橘,實(shí)現(xiàn)動(dòng)態(tài)的服務(wù)注冊(cè)發(fā)現(xiàn)機(jī)制;

需要考慮分布式下面的事務(wù)一致性屈溉,CAP原則下塞关,兩段式提交不能保證性能,事務(wù)補(bǔ)償機(jī)制需要考慮子巾;

同步調(diào)用還是異步消息傳遞帆赢,如何保證消息可靠性?SOA由ESB來(lái)集成所有的消息线梗;

都需要統(tǒng)一的Gateway來(lái)匯聚椰于、編排接口,實(shí)現(xiàn)統(tǒng)一認(rèn)證機(jī)制仪搔,對(duì)外提供APP使用的RESTful接口瘾婿;

同樣的要關(guān)注如何再分布式下定位系統(tǒng)問(wèn)題,如何做日志跟蹤,就像我們電信領(lǐng)域做了十幾年的信令跟蹤的功能偏陪;

那么差別在哪抢呆?

是持續(xù)集成、持續(xù)部署笛谦?對(duì)于CI抱虐、CD(持續(xù)集成、持續(xù)部署)揪罕,這本身和敏捷梯码、DevOps是交織在一起的,我認(rèn)為這更傾向于軟件工程的領(lǐng)域而不是微服務(wù)技術(shù)本身好啰;

使用不同的通訊協(xié)議是不是區(qū)別轩娶?微服務(wù)的標(biāo)桿通訊協(xié)議是RESTful,而傳統(tǒng)的SOA一般是SOAP框往,不過(guò)目前來(lái)說(shuō)采用輕量級(jí)的RPC框架Dubbo鳄抒、Thrift、gRPC非常多椰弊,在Spring Cloud中也有Feign框架將標(biāo)準(zhǔn)RESTful轉(zhuǎn)為代碼的API這種仿RPC的行為许溅,這些通訊協(xié)議不應(yīng)該是區(qū)分微服務(wù)架構(gòu)和SOA的核心差別;

是流行的基于容器框架還是虛擬機(jī)為主秉版?Docker和虛擬機(jī)還是物理機(jī)都是架構(gòu)實(shí)現(xiàn)的一種方式贤重,不是核心區(qū)別;

微服務(wù)架構(gòu)的精髓在切分

服務(wù)的切分上有比較大的區(qū)別清焕,SOA原本是以一種“集成”技術(shù)出現(xiàn)的并蝗,很多技術(shù)方案是將原有企業(yè)內(nèi)部服務(wù)封裝為一個(gè)獨(dú)立進(jìn)程,這樣新的業(yè)務(wù)開(kāi)發(fā)就可重用這些服務(wù)秸妥,這些服務(wù)很可能是類(lèi)似供應(yīng)鏈滚停、CRM這樣的非常大的顆粒;而微服務(wù)這個(gè)“微”粥惧,就說(shuō)明了他在切分上有講究键畴,不妥協(xié)。無(wú)數(shù)的案例證明突雪,如果你的切分是錯(cuò)誤的起惕,那么你得不到微服務(wù)承諾的“低耦合、升級(jí)不影響咏删、可靠性高”之類(lèi)的優(yōu)勢(shì)疤祭,而會(huì)比使用Monolithic有更多的麻煩。

不拆分存儲(chǔ)的微服務(wù)是偽服務(wù):在實(shí)踐中饵婆,我們常常見(jiàn)到一種架構(gòu)勺馆,后端存儲(chǔ)是全部和在一個(gè)數(shù)據(jù)庫(kù)中戏售,僅僅把前端的業(yè)務(wù)邏輯拆分到不同的服務(wù)進(jìn)程中,本質(zhì)上和一個(gè)Monolithic一樣草穆,只是把模塊之間的進(jìn)程內(nèi)調(diào)用改為進(jìn)程間調(diào)用灌灾,這種切分不可取,違反了分布式第一原則悲柱,模塊耦合沒(méi)有解決锋喜,性能卻受到了影響。

分布式設(shè)計(jì)第一原則 -- “不要分布你的對(duì)象”

微服務(wù)的“Micro”這個(gè)詞并不是越小越好豌鸡,而是相對(duì)SOA那種粗粒度的服務(wù)嘿般,我們需要更小更合適的粒度,這種Micro不是無(wú)限制的小涯冠。

如果我們將兩路(同步)通信與小/微服務(wù)結(jié)合使用炉奴,并根據(jù)比如“1個(gè)類(lèi)=1個(gè)服務(wù)”的原則,那么我們實(shí)際上回到了使用Corba蛇更、J2EE和分布式對(duì)象的20世紀(jì)90年代瞻赶。遺憾的是,新生代的開(kāi)發(fā)人員沒(méi)有使用分布式對(duì)象的經(jīng)驗(yàn)派任,因此也就沒(méi)有認(rèn)識(shí)到這個(gè)主意多么糟糕砸逊,他們正試圖重復(fù)歷史,只是這次使用了新技術(shù)掌逛,比如用HTTP取代了RMI或IIOP师逸。

微服務(wù)和Domain Driven Design

一個(gè)簡(jiǎn)單的圖書(shū)管理系統(tǒng)肯定無(wú)需微服務(wù)架構(gòu)。既然采用了微服務(wù)架構(gòu)豆混,那么面對(duì)的問(wèn)題空間必然是比較宏大篓像,比如整個(gè)電商、CRM崖叫。

如何拆解服務(wù)呢?

使用什么樣的方法拆解服務(wù)拍柒?業(yè)界流行1個(gè)類(lèi)=1個(gè)服務(wù)心傀、1個(gè)方法=1個(gè)服務(wù)、2 Pizza團(tuán)隊(duì)拆讯、2周能重寫(xiě)完成等方法脂男,但是這些都缺乏實(shí)施基礎(chǔ)。我們必須從一些軟件設(shè)計(jì)方法中尋找种呐,面向?qū)ο蠛驮O(shè)計(jì)模式適用的問(wèn)題空間是一個(gè)模塊宰翅,而函數(shù)式編程的理念更多的是在代碼層面的微觀上起作用。

Eric Evans 的《領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)》這本書(shū)對(duì)微服務(wù)架構(gòu)有很大借鑒意義爽室,這本書(shū)提出了一個(gè)能將一個(gè)大問(wèn)題空間拆解分為領(lǐng)域和實(shí)體之間的關(guān)系和行為的技術(shù)汁讼。目前來(lái)說(shuō),這是一個(gè)最合理的解決拆分問(wèn)題的方案,透過(guò)限界上下文(Bounded Context嘿架,下文簡(jiǎn)稱(chēng)為BC)這個(gè)概念瓶珊,我們能將實(shí)現(xiàn)細(xì)節(jié)封裝起來(lái),讓BC都能夠?qū)崿F(xiàn)SRP(單一職責(zé))原則耸彪。而每個(gè)微服務(wù)正是BC在實(shí)際世界的物理映射伞芹,符合BC思路的微服務(wù)互相獨(dú)立松耦合。

微服務(wù)架構(gòu)是一件好事蝉娜,逼著大家關(guān)注設(shè)計(jì)軟件的合理性唱较,如果原來(lái)在Monolithic中領(lǐng)域分析、面向?qū)ο笤O(shè)計(jì)做不好召川,換微服務(wù)會(huì)把這個(gè)問(wèn)題成倍的放大

以電商中的訂單和商品兩個(gè)領(lǐng)域舉例南缓,按照DDD拆解,他們應(yīng)該是兩個(gè)獨(dú)立的限界上下文扮宠,但是訂單中肯定是包含商品的西乖,如果貿(mào)然拆為兩個(gè)BC,查詢坛增、調(diào)用關(guān)系就耦合在一起了获雕,甚至有了麻煩的分布式事務(wù)的問(wèn)題,這個(gè)關(guān)聯(lián)如何拆解收捣?BC理論認(rèn)為在不同的BC中届案,即使是一個(gè)術(shù)語(yǔ),他的關(guān)注點(diǎn)也不一樣罢艾,在商品BC中楣颠,關(guān)注的是屬性、規(guī)格咐蚯、詳情等等(實(shí)際上商品BC這個(gè)領(lǐng)域有價(jià)格童漩、庫(kù)存、促銷(xiāo)等等春锋,把他作為單獨(dú)一個(gè)BC也是不合理的矫膨,這里為了簡(jiǎn)化例子,大家先認(rèn)為商品BC就是商品基礎(chǔ)信息)期奔, 而在訂單BC中更關(guān)注商品的庫(kù)存侧馅、價(jià)格。所以在實(shí)際編碼設(shè)計(jì)中呐萌,訂單服務(wù)往往將關(guān)注的商品名稱(chēng)馁痴、價(jià)格等等屬性冗余在訂單中,這個(gè)設(shè)計(jì)解脫了和商品BC的強(qiáng)關(guān)聯(lián)肺孤,兩個(gè)BC可以獨(dú)立提供服務(wù)罗晕,獨(dú)立數(shù)據(jù)存儲(chǔ)

小結(jié)

微服務(wù)架構(gòu)首先要關(guān)注的不是RPC/ServiceDiscovery/Circuit Breaker這些概念济欢,也不是Eureka/Docker/SpringCloud/Zipkin這些技術(shù)框架,而是服務(wù)的邊界攀例、職責(zé)劃分船逮,劃分錯(cuò)誤就會(huì)陷入大量的服務(wù)間的相互調(diào)用和分布式事務(wù)中,這種情況微服務(wù)帶來(lái)的不是便利而是麻煩粤铭。

DDD給我們帶來(lái)了合理的劃分手段挖胃,但是DDD的概念眾多,晦澀難以理解梆惯,如何抓住重點(diǎn)酱鸭,合理的運(yùn)用到微服務(wù)架構(gòu)中呢?

我認(rèn)為如下的幾個(gè)架構(gòu)思想是重中之重

充血模型

事件驅(qū)動(dòng)

?

下面兩篇將為大家詳細(xì)介紹這兩個(gè)設(shè)計(jì)思路

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末垛吗,一起剝皮案震驚了整個(gè)濱河市凹髓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌怯屉,老刑警劉巖蔚舀,帶你破解...
    沈念sama閱讀 212,080評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異锨络,居然都是意外死亡赌躺,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,422評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)羡儿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)礼患,“玉大人,你說(shuō)我怎么就攤上這事掠归∶宓” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,630評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵虏冻,是天一觀的道長(zhǎng)肤粱。 經(jīng)常有香客問(wèn)我,道長(zhǎng)厨相,這世上最難降的妖魔是什么领曼? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,554評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮领铐,結(jié)果婚禮上悯森,老公的妹妹穿的比我還像新娘宋舷。我一直安慰自己绪撵,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,662評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布祝蝠。 她就那樣靜靜地躺著音诈,像睡著了一般幻碱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上细溅,一...
    開(kāi)封第一講書(shū)人閱讀 49,856評(píng)論 1 290
  • 那天褥傍,我揣著相機(jī)與錄音,去河邊找鬼喇聊。 笑死恍风,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的誓篱。 我是一名探鬼主播朋贬,決...
    沈念sama閱讀 39,014評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼窜骄!你這毒婦竟也來(lái)了锦募?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,752評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤邻遏,失蹤者是張志新(化名)和其女友劉穎糠亩,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體准验,經(jīng)...
    沈念sama閱讀 44,212評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赎线,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,541評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了沟娱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片氛驮。...
    茶點(diǎn)故事閱讀 38,687評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖济似,靈堂內(nèi)的尸體忽然破棺而出矫废,到底是詐尸還是另有隱情,我是刑警寧澤砰蠢,帶...
    沈念sama閱讀 34,347評(píng)論 4 331
  • 正文 年R本政府宣布蓖扑,位于F島的核電站,受9級(jí)特大地震影響台舱,放射性物質(zhì)發(fā)生泄漏律杠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,973評(píng)論 3 315
  • 文/蒙蒙 一竞惋、第九天 我趴在偏房一處隱蔽的房頂上張望柜去。 院中可真熱鬧,春花似錦拆宛、人聲如沸嗓奢。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,777評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)股耽。三九已至根盒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間物蝙,已是汗流浹背炎滞。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,006評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留诬乞,地道東北人册赛。 一個(gè)月前我還...
    沈念sama閱讀 46,406評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像震嫉,于是被迫代替她去往敵國(guó)和親击奶。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,576評(píng)論 2 349

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