作者 張飛洪 來源 https://www.cnblogs.com/jackyfei/p/10107510.html
講解微服務(wù)之前,,我們先簡單了解下單體架構(gòu)。 一,、單體架構(gòu)單體架構(gòu)的優(yōu)點(diǎn):
單體架構(gòu)的缺點(diǎn):隨著業(yè)務(wù)的復(fù)雜度增加,,單體的靈活度會(huì)逐漸下降,,比如:
單體適用場景:架構(gòu)設(shè)計(jì)的三大原則告訴我們,,架構(gòu)需要的是簡單,、適度、演化,。 對于項(xiàng)目起步階段,,單體是最高效也是最節(jié)省成本的方式。因?yàn)槌跗陔A段,,由于人力,,成本,業(yè)務(wù)熟悉程度,,微服務(wù)技術(shù)積累等因素,,如何過度設(shè)計(jì)可能工期和復(fù)雜度會(huì)急劇上升,造成交付困難,,問題百出,,從而錯(cuò)過了時(shí)間窗口。最合適,,簡單的方式還是單體優(yōu)先,,這是創(chuàng)業(yè)公司的特點(diǎn)決定的。當(dāng)然設(shè)計(jì)面向微服務(wù)的單體架構(gòu)也是一種聰明的方法,,這遵守了系統(tǒng)演化的法則,。 單體分層目的:無論采取何種維度的架構(gòu)分層,分層的最核心目的是保證各層之間的差異足夠清晰,,邊界足夠明顯,,為將來可能產(chǎn)生的變化提供最容易、最小化的修改,。比如客戶端要從安卓替換為IOS,,底層無須任何改動(dòng),就像替換積木一樣,。又比如,,設(shè)備需要接入新的設(shè)備或協(xié)議,其他層也不需要做任何變化,,可以無縫平滑接入任何設(shè)備,。 建議如果前期在業(yè)務(wù)不十分清晰,求的是驗(yàn)證想法,,證明產(chǎn)品思路是否可行性,,并且業(yè)務(wù)量不大,僅限于省級范圍,,建議只要對當(dāng)前架構(gòu)稍加改良升級就可以了,,這樣改動(dòng)量相對較小,且至少能支撐一定時(shí)間段的業(yè)務(wù)增長,。 二,、微服務(wù)架構(gòu)微服務(wù)的優(yōu)勢支撐的業(yè)務(wù)更加龐大,可以支撐海量用戶高并發(fā)和海量設(shè)備接入,,支持分布式多機(jī)房,,多區(qū)域部署,,支持服務(wù)器無限擴(kuò)容。支持私有云,,公有云,,混合云等部署方式。所以微服務(wù)是大多數(shù)互聯(lián)網(wǎng)公司的首選,。 微服務(wù)的代價(jià)
微服務(wù)架構(gòu)圖微服務(wù)架構(gòu)圖譜谷歌或Bing下,,可以看到各種各樣的架構(gòu)圖,,源于業(yè)務(wù)和架構(gòu)師自身的喜好或者粗細(xì)粒度,但是每個(gè)架構(gòu)圖的基本組件和架構(gòu)分層都差別不大,,只是有的細(xì)一些,,有的粗一下,。比如有客戶端層,容器層(K8S),,API Gateway,,微服務(wù)集群層,EventBus層是必須要有的,,至于服務(wù)監(jiān)控和服務(wù)跟蹤、服務(wù)治理本身就是一個(gè)完整的系統(tǒng),,粒度就沒有細(xì)了,。基于這些概念,,我把架構(gòu)圖稍微細(xì)化一下,,這里省去服務(wù)監(jiān)控跟蹤和治理的部分,后續(xù)單獨(dú)抽離出來分析,。 這邊的架構(gòu)圖譜相對之前的架構(gòu)圖,,更加貼近業(yè)務(wù),粒度也更細(xì),,雖然個(gè)別組件有所省略,,比如跟蹤和治理部分。 以上架構(gòu)圖主要分4層,,每個(gè)層次遵循架構(gòu)分層的核心思想:關(guān)注點(diǎn)分離,,職責(zé)各異,邊界清晰,。 第1層:客戶端:理論上包含一切可以聯(lián)網(wǎng)的設(shè)備,,包括移動(dòng)設(shè)備,Android,、IoS,、Pad、微信,、微博,、QQ、Web,、各自瀏覽器,、物聯(lián)網(wǎng)設(shè)備等等…… 第2層:API網(wǎng)關(guān):包括服務(wù)注冊,發(fā)現(xiàn),,認(rèn)證授權(quán),,單點(diǎn)登錄,熔斷,,限流……網(wǎng)關(guān)的知識點(diǎn)豐富,,是微服務(wù)的核心之一,。
第3層:微服務(wù)集群:包括各種具體的microservice,比如縱向劃分的業(yè)務(wù)服務(wù)(用戶服務(wù),,訂單服務(wù),,……),橫向劃分的基礎(chǔ)或公共服務(wù)(元數(shù)據(jù)服務(wù),,公共服務(wù)……) 其他微服務(wù)的地址可能是這樣的:
第4層:事件總線:Event Bus 目的是消息解耦,,不要讓服務(wù)之間直接的鏈接。不同與SOA的服務(wù)總線,,事件總線相對比較輕量,,經(jīng)常基于消息隊(duì)列引擎進(jìn)行解耦,,目的是為了讓服務(wù)之間的關(guān)聯(lián)弱化,,不直接進(jìn)行關(guān)聯(lián)。很多時(shí)候用的是相對穩(wěn)定,、可靠,、企業(yè)級的RabbitMQ。 微服務(wù)的架構(gòu)其實(shí)不難,,根據(jù)以上的架構(gòu),,每種業(yè)務(wù)都可以進(jìn)行套用,這里的難點(diǎn)在于服務(wù)的劃分和粒度控制,,另外如何管理膨脹的服務(wù)是一個(gè)麻煩事,。 三、何時(shí)采用微服務(wù)?1,、楊波說這里引用架構(gòu)師楊波(前Ebay架構(gòu)師,,目前任職拍拍貸研發(fā)部總監(jiān),資深技術(shù)架構(gòu)師,,微服務(wù)技術(shù)專家)的一些觀點(diǎn): “企業(yè)一開始不推薦直接使用微服務(wù),,因?yàn)槲⒎?wù)需要前期基礎(chǔ)設(shè)施的投資,復(fù)雜性很高,,如果對問題領(lǐng)域并不是很理解,,一開始用微服務(wù),你很難去劃分服務(wù)的邊界,,你的生產(chǎn)力反而會(huì)比較低,,而且你花了很大精力進(jìn)行開發(fā),你的產(chǎn)品并沒有被市場驗(yàn)證過,,有可能會(huì)失敗,,所以這個(gè)選項(xiàng)風(fēng)險(xiǎn)會(huì)比較高。所以我們推薦的是單塊優(yōu)先,先從單塊運(yùn)用做起,,這樣成本低,,團(tuán)隊(duì)成員也比較少,無須太多研發(fā)投入,,就可以交付一些基本的功能給客戶使用,。 隨著應(yīng)用越來越成功,客戶增加,,你的系統(tǒng)復(fù)雜度會(huì)越來越高,,就會(huì)出現(xiàn)單塊應(yīng)用和團(tuán)隊(duì)規(guī)模之間的矛盾,生產(chǎn)力會(huì)隨著業(yè)務(wù)復(fù)雜度逐漸降低,。所以在一些初創(chuàng)型公司,,你更多看到的是單塊應(yīng)用,只有一些中大型的公司會(huì)看到微服務(wù)架構(gòu),?!?/span> “交叉點(diǎn)表明,,業(yè)務(wù)已經(jīng)到達(dá)了一定的復(fù)雜性,,單塊應(yīng)用已經(jīng)無法滿足業(yè)務(wù)增長的需要,研發(fā)效率開始下降了,,而微服務(wù)可以提升研發(fā)和交付的效率,。這個(gè)點(diǎn)需要架構(gòu)師去綜合,權(quán)衡,。個(gè)人經(jīng)驗(yàn),,一般團(tuán)隊(duì)需要達(dá)到百人規(guī)模,才去考慮微服務(wù),?!?/span> 以上的觀點(diǎn)講的很中肯,給我的啟發(fā)和幫助非常大,。這里的交叉點(diǎn)怎么來確定和評估是重點(diǎn),,比如我們上線一個(gè)社交姑且叫抖信,初期為了快速上線,,驗(yàn)證可行性,,可以只開發(fā)首頁聊天、通訊錄,、評論等基本功能,。產(chǎn)品上線后,經(jīng)過一段時(shí)間的運(yùn)營,,用戶開始逐步增多,,可行性驗(yàn)證通過,下一階段就需要進(jìn)一步增加更多的新特性來吸引更多的目標(biāo)用戶,比如再給這個(gè)社交抖信添加朋友圈,、消息通知,、游戲、電商等等功能,。 “一般情況下,,這個(gè)時(shí)候就需要大規(guī)模地?cái)U(kuò)張開發(fā)人員,以支撐多個(gè)功能的開發(fā),。如果這個(gè)時(shí)候繼續(xù)采用單體應(yīng)用架構(gòu),,多個(gè)功能模塊混雜在一起開發(fā)、測試和部署的話,,就會(huì)導(dǎo)致不同功能之間相互影響,,一次打包部署需要所有的功能都測試 OK 才能上線。 不僅如此,,多個(gè)功能模塊混部在一起,,對線上服務(wù)的穩(wěn)定性也是個(gè)巨大的挑戰(zhàn)。比如 A 開發(fā)的一個(gè)功能由于代碼編寫考慮不夠全面,,上線后產(chǎn)生了內(nèi)存泄漏,,運(yùn)行一段時(shí)間后進(jìn)程異常退出,那么部署在這個(gè)服務(wù)池中的所有功能都不可訪問,。 根據(jù)我的實(shí)際項(xiàng)目經(jīng)驗(yàn),,一旦單體應(yīng)用同時(shí)進(jìn)行開發(fā)的人員超過 10 人,就會(huì)遇到上面的問題,,這個(gè)時(shí)候就該考慮進(jìn)行服務(wù)化拆分了,。”---胡忠想(微博微服務(wù)技術(shù)專家) 至此,,我們何時(shí)采用微服務(wù)已經(jīng)十分明確了,,關(guān)鍵是業(yè)務(wù)復(fù)雜度和團(tuán)隊(duì)規(guī)模兩大要點(diǎn),而業(yè)務(wù)復(fù)雜度和市場窗口是權(quán)衡和抉擇的首要因素,。 2,、微服務(wù)落地條件評估一般情況下,業(yè)務(wù)系統(tǒng)引入新技術(shù)就必然會(huì)帶來架構(gòu)的復(fù)雜度提升,,在具體決策前,,你先要認(rèn)識到新架構(gòu)會(huì)帶來哪些新的問題,這些問題你和你的團(tuán)隊(duì)是否能夠解決,?如何解決,?是自己投入人力建設(shè),還是采用業(yè)界開源方案,?假如你和我一樣都是微服務(wù)的旁觀者或者學(xué)習(xí)者,,那么下面的評估也許對你又所參考,。
3,、轉(zhuǎn)微服務(wù)風(fēng)險(xiǎn)評估
4,、合理的拆分姿勢如何正確拆分,?這里正確指的是合理,因?yàn)闆]有絕對的標(biāo)準(zhǔn),。按照前人的經(jīng)驗(yàn)可以分為縱向和橫向兩種劃分方法:
四,、SOA和微服務(wù)由于SOA和微服務(wù)有千絲萬縷的關(guān)系,,這里簡單羅列雙方的對比圖,算是一個(gè)小知識點(diǎn): 兩種架構(gòu)背后的意圖是不同的:SOA嘗試將應(yīng)用集成,,一般采用中央管理模式來確保各應(yīng)用能夠交互運(yùn)作,。微服務(wù)嘗試部署新功能,快速有效地?cái)U(kuò)展開發(fā)團(tuán)隊(duì),。它著重于分散管理,、代碼再利用與自動(dòng)化執(zhí)行。 五,、總結(jié)最后讓我們回顧一下前人經(jīng)典的話語:
還是回到我們架構(gòu)設(shè)計(jì)的原則上,,遵循簡單,適用,,演化的原則,,那么你的抉擇也許會(huì)變得沒有那么令人糾纏。 |
|