架构设计之「 微服务入门 」
戳藍(lán)字“CSDN云計算”關(guān)注我們哦!
作者 |?奎哥
來源?| 不止思考
微服務(wù)這幾年不可謂不火,很多技術(shù)團(tuán)隊都開始在自己的項(xiàng)目上引入了微服務(wù)。一方面這些團(tuán)隊確實(shí)很好的推動了微服務(wù)的應(yīng)用和發(fā)展,另一方面也可以看到一些盲目追技術(shù)熱點(diǎn)的行為所帶來的危害,比如很多中小團(tuán)隊對微服務(wù)的基礎(chǔ)知識只是做了很淺顯的了解就開始盲目的推動微服務(wù)的實(shí)施,最后導(dǎo)致了項(xiàng)目的失敗。
微服務(wù)要想做好是一個非常復(fù)雜的架構(gòu),今天就先只聊一聊微服務(wù)的一些基礎(chǔ)架構(gòu),算是入門篇。
一、什么是「 微服務(wù) 」?
「 微服務(wù) 」由 Martin Fowler 提出,它是指一種軟件架構(gòu)風(fēng)格。一個大型的系統(tǒng)可以由多個微服務(wù)組成,每個微服務(wù)是被獨(dú)立部署,獨(dú)立完成自己的任務(wù)單元,微服務(wù)之間是通過API方式進(jìn)行通信調(diào)用,是松耦合的。
這個模式聽著是不是很熟悉的感覺?
因?yàn)樵谔岢觥?微服務(wù) 」概念之前,很多互聯(lián)網(wǎng)公司的中大型項(xiàng)目早就是按照將業(yè)務(wù)拆分成獨(dú)立單元的形式在部署和架構(gòu)的,這與微服務(wù)的思路是一脈相通的,只不過實(shí)現(xiàn)方式?jīng)]有現(xiàn)在這么規(guī)范與體系。
那「 微服務(wù) 」到底是怎么演變過來的呢?
在做一個新項(xiàng)目的時候,一開始項(xiàng)目大多數(shù)都很小,都是「 單體應(yīng)用 」,這是很常見的做法。在項(xiàng)目規(guī)模小的時候,這種方式開發(fā)效率和運(yùn)維效率都最高,符合互聯(lián)網(wǎng)公司快速響應(yīng)的要求。
但是隨著業(yè)務(wù)量越來越大,項(xiàng)目也越來越復(fù)雜,開發(fā)團(tuán)隊人員也越來越多。這個時候還采用單體應(yīng)用,問題就會很明顯了。下面挑選兩個最為常見的問題來舉例:
協(xié)同問題:多個人同時開發(fā)一份代碼,在工作協(xié)同上就會經(jīng)常遇到代碼沖突問題。
可用性問題:因?yàn)槭菃误w應(yīng)用,即使改個最小的功能,也需要整體發(fā)布,不僅直接影響了線上可用性,還可能會對正常功能帶來風(fēng)險。
為了解決這些問題,大家就開始考慮將「 單體應(yīng)用 」進(jìn)行拆分,進(jìn)行服務(wù)化部署。然后又隨著 Martin Fowler對「 微服務(wù) 」概念的提出,加上 DevOps 的流行,進(jìn)一步促進(jìn)了微服務(wù)的火熱發(fā)展。
「 微服務(wù) 」的理念提倡每個服務(wù)都是單一職責(zé),且每一個服務(wù)都能實(shí)現(xiàn)自治,因此可以帶來一些明顯好處:
部署簡單:每個微服務(wù)都可以獨(dú)立去部署,方便快捷。
邏輯清晰:將一個獨(dú)立功能邏輯封裝在單一微服務(wù)里面,實(shí)現(xiàn)整體項(xiàng)目的邏輯清晰。
可擴(kuò)展:因?yàn)榭梢噪S時增加和減少微服務(wù),可以很方便的擴(kuò)展功能。
可靠性高:某一個功能的異常可以隔離在單一微服務(wù)里面,可以提高整體可靠性。
二、「 微服務(wù) 」的架構(gòu)是什么樣?
我們先來看一下「 微服務(wù) 」的架構(gòu)圖:
(圖片來源網(wǎng)絡(luò),粉絲太少就懶得畫圖了,大家發(fā)揮一下想象力將就的看看,哈哈)
看起來挺復(fù)雜對不對,事實(shí)上也確實(shí)很復(fù)雜。
所以微服務(wù)并不是適用于所有項(xiàng)目、所有團(tuán)隊的。在應(yīng)用之前一定要搞清楚是否適合自己。
要保證這么一套微服務(wù)架構(gòu)能成功運(yùn)行起來,我們起碼需要以下這些?微服務(wù)的基礎(chǔ)組件:
服務(wù)注冊
部署了一個微服務(wù)節(jié)點(diǎn),得讓調(diào)用者知道啊,當(dāng)微服務(wù)節(jié)點(diǎn)有增加或減少的時候,也得讓調(diào)用者及時知曉啊。這些問題都是通過“服務(wù)注冊”組件來實(shí)現(xiàn)的,服務(wù)提供者將自己的服務(wù)地址等信息登記到“服務(wù)注冊”組件中,調(diào)用者需要的時候,每次都先去查詢“服務(wù)注冊”即可。免去人工維護(hù)微服務(wù)節(jié)點(diǎn)的信息同步問題。
服務(wù)網(wǎng)關(guān)
是指提供給外部系統(tǒng)調(diào)用的是統(tǒng)一網(wǎng)關(guān)。主要做安全和權(quán)限控制等。
配置中心
微服務(wù)的配置中心是用來統(tǒng)一管理所有微服務(wù)節(jié)點(diǎn)的配置信息的。因?yàn)橥粋€程序可能要適用于多個環(huán)境,所以在微服務(wù)實(shí)踐中要盡量做到程序與配置分離,將配置進(jìn)行集中管理。包括微服務(wù)節(jié)點(diǎn)信息、程序運(yùn)行時配置、變量配置、數(shù)據(jù)源配置、日志配置、版本配置等。
服務(wù)框架
是指用來規(guī)范各個微服務(wù)節(jié)點(diǎn)之間通信標(biāo)準(zhǔn)的。服務(wù)間通信采用什么協(xié)議、數(shù)據(jù)是如何傳輸?shù)摹?shù)據(jù)格式是什么樣的。有了這個統(tǒng)一的“服務(wù)框架”就能保證各個微服務(wù)節(jié)點(diǎn)之間高效率的協(xié)同。
服務(wù)監(jiān)控
微服務(wù)運(yùn)行起來之后,為了能夠監(jiān)控節(jié)點(diǎn)的健康情況,保障節(jié)點(diǎn)的高可行,需要對各個服務(wù)節(jié)點(diǎn)進(jìn)行收集數(shù)據(jù)指標(biāo)、然后對數(shù)據(jù)進(jìn)行實(shí)時處理和分析,形成監(jiān)控報表和預(yù)警。
服務(wù)追蹤
一旦使用了微服務(wù)架構(gòu),那么當(dāng)有請求過來時,就會經(jīng)過多個微服務(wù)節(jié)點(diǎn)的處理,形成了一個調(diào)用鏈。為了進(jìn)行問題追蹤和故障的定位,需要對請求的完整調(diào)用鏈進(jìn)行記錄。
這里的服務(wù)追蹤與上面的服務(wù)監(jiān)控是不同維度的,一個是全局的,一個是微觀的,發(fā)揮的作用也不一樣。
服務(wù)治理
就是指需要通過準(zhǔn)備一些策略和方案,來保障整個微服務(wù)架構(gòu)在生產(chǎn)環(huán)境遇到極端情況下也能正常提供服務(wù)的措施。比如 熔斷、限流、隔離等等。
當(dāng)然,上述只是一個微服務(wù)架構(gòu)最為核心的基礎(chǔ)組件,一旦微服務(wù)體系過大,例如有幾十上百個微服務(wù)節(jié)點(diǎn),那么開發(fā)、維護(hù)、測試的成本就會非常大。因此一般還會引入 自動化部署 和 自動化測試 來提高協(xié)同效率。
三、「 微服務(wù) 」入門如何避免踩坑?
你以為微服務(wù)架構(gòu)都是下面這樣的嗎?
事實(shí)上,更能是下面這樣的,哈哈。
(圖片來源網(wǎng)絡(luò))
大家都在宣揚(yáng)「 微服務(wù) 」多么多么的好,例如:易擴(kuò)展、松耦合、服務(wù)簡單、獨(dú)立開發(fā)、易維護(hù)、輕量級等等。雖然這些優(yōu)勢也是事實(shí),但是「 微服務(wù) 」帶來的問題也很多,尤其是對于剛?cè)腴T的團(tuán)隊而言,應(yīng)用微服務(wù)后,趟坑真的可以趟到你崩潰。下面就普及一些常見的問題來給大家打個預(yù)防針:
不是所有項(xiàng)目都適用微服務(wù)
有些項(xiàng)目規(guī)模還比較小,或者項(xiàng)目才剛立項(xiàng)啟動,也只有三四個人負(fù)責(zé)開發(fā)維護(hù),這時候是不建議一上來就搞微服務(wù)架構(gòu)的。這種情況下搞微服務(wù),不僅是“殺雞用牛刀”,而且還無謂的增加了項(xiàng)目的復(fù)雜度,本身一個單體結(jié)構(gòu)就可以搞定的事情,非得拆分N多節(jié)點(diǎn),人員又不足以支撐這么多節(jié)點(diǎn)的開發(fā)維護(hù),這完全是自找苦吃。反而是等項(xiàng)目成熟了、規(guī)模大了之后,再開始慢慢將原有結(jié)構(gòu)拆為微服務(wù)才是正確的做法。
不要拆分過多過細(xì)的服務(wù)
即使項(xiàng)目經(jīng)過評估后適合拆為微服務(wù)架構(gòu),但也不要過度拆解。有的團(tuán)隊喜歡將項(xiàng)目拆成很細(xì)很細(xì)的顆粒,最后把項(xiàng)目搞的特別復(fù)雜,整個團(tuán)隊都陷進(jìn)去了。
拆分服務(wù)的顆粒度應(yīng)該根據(jù)業(yè)務(wù)發(fā)展和團(tuán)隊現(xiàn)狀綜合去考慮。這里可以參考一個很火的理論「 康威定律 」。什么樣的團(tuán)隊,就產(chǎn)生什么樣的架構(gòu),微服務(wù)拆分的顆粒度是需要和團(tuán)隊結(jié)構(gòu)相匹配的。當(dāng)你著手拆微服務(wù)的時候,得先評估一下團(tuán)隊人員和素質(zhì),一般在開發(fā)期,2-3個人開發(fā)一個服務(wù)是合理的,在維護(hù)期,1個人維護(hù)2-3個服務(wù)也是合理的。
如果拆分過細(xì),開發(fā)人員跟不上,會嚴(yán)重降低大家的工作效率。并且過細(xì)的服務(wù),會導(dǎo)致一個請求的調(diào)用鏈條很長,不僅會影響請求的響應(yīng)時間,也會對線上問題排查帶來增加難度。
沒有DevOps就不要急于微服務(wù)
一個穩(wěn)定的微服務(wù)架構(gòu),是需要 持續(xù)集成、自動化部署、自動化測試、健全的監(jiān)控體系來保障的。如果團(tuán)隊還不具備DevOps,這些基礎(chǔ)的建設(shè)都沒有做好,一上來就搞微服務(wù)的話,就會導(dǎo)致實(shí)施過程中問題百出,微服務(wù)的優(yōu)勢不能發(fā)揮。
以上,就是對架構(gòu)設(shè)計中「 微服務(wù)基礎(chǔ) 」的一些思考。
福利
掃描添加小編微信,備注“姓名+公司職位”,加入【云計算學(xué)習(xí)交流群】,和志同道合的朋友們共同打卡學(xué)習(xí)!
推薦閱讀:
屢試不爽的互聯(lián)網(wǎng)架構(gòu)三大馬車!
抖音微博等短視頻千萬級高可用、高并發(fā)架構(gòu)如何設(shè)計?
20大5G關(guān)鍵技術(shù)
Fast.ai:從零開始學(xué)深度學(xué)習(xí) | 資源帖
10個簡單小竅門帶你提高Python數(shù)據(jù)分析速度(附代碼)
程序員爬取 3 萬條評論,《長安十二時辰》槽點(diǎn)大揭秘!
暗網(wǎng)竟成比特幣最大用戶? 上半年5.15億美元被用于非法活動
總結(jié)
以上是生活随笔為你收集整理的架构设计之「 微服务入门 」的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 双叶家具价格介绍
- 下一篇: boost::contract模块实现s