微服務(wù)這幾年不可謂不火,很多技術(shù)團(tuán)隊都開始在自己的項目上引入了微服務(wù)。一方面這些團(tuán)隊確實很好的推動了微服務(wù)的應(yīng)用和發(fā)展,另一方面也可以看到一些盲目追技術(shù)熱點的行為所帶來的危害,比如很多中小團(tuán)隊對微服務(wù)的基礎(chǔ)知識只是做了很淺顯的了解就開始盲目的推動微服務(wù)的實施,最后導(dǎo)致了項目的失敗。
微服務(wù)要想做好是一個非常復(fù)雜的架構(gòu),今天就先只聊一聊微服務(wù)的一些基礎(chǔ)架構(gòu),算是入門篇。
一、什么是「 微服務(wù) 」?
「 微服務(wù) 」由 Martin Fowler 提出,它是指一種軟件架構(gòu)風(fēng)格。一個大型的系統(tǒng)可以由多個微服務(wù)組成,每個微服務(wù)是被獨立部署,獨立完成自己的任務(wù)單元,微服務(wù)之間是通過API方式進(jìn)行通信調(diào)用,是松耦合的。
這個模式聽著是不是很熟悉的感覺?
因為在提出「 微服務(wù) 」概念之前,很多互聯(lián)網(wǎng)公司的中大型項目早就是按照將業(yè)務(wù)拆分成獨立單元的形式在部署和架構(gòu)的,這與微服務(wù)的思路是一脈相通的,只不過實現(xiàn)方式?jīng)]有現(xiàn)在這么規(guī)范與體系。
那「 微服務(wù) 」到底是怎么演變過來的呢?
在做一個新項目的時候,一開始項目大多數(shù)都很小,都是「 單體應(yīng)用 」,這是很常見的做法。在項目規(guī)模小的時候,這種方式開發(fā)效率和運維效率都最高,符合互聯(lián)網(wǎng)公司快速響應(yīng)的要求。
但是隨著業(yè)務(wù)量越來越大,項目也越來越復(fù)雜,開發(fā)團(tuán)隊人員也越來越多。這個時候還采用單體應(yīng)用,問題就會很明顯了。下面挑選兩個最為常見的問題來舉例:
協(xié)同問題:多個人同時開發(fā)一份代碼,在工作協(xié)同上就會經(jīng)常遇到代碼沖突問題。
可用性問題:因為是單體應(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ù)都能實現(xiàn)自治,因此可以帶來一些明顯好處:
部署簡單:每個微服務(wù)都可以獨立去部署,方便快捷。
邏輯清晰:將一個獨立功能邏輯封裝在單一微服務(wù)里面,實現(xiàn)整體項目的邏輯清晰。
可擴展:因為可以隨時增加和減少微服務(wù),可以很方便的擴展功能。
可靠性高:某一個功能的異??梢愿綦x在單一微服務(wù)里面,可以提高整體可靠性。
二、「 微服務(wù) 」的架構(gòu)是什么樣?
我們先來看一下「 微服務(wù) 」的架構(gòu)圖:
(圖片來源網(wǎng)絡(luò),粉絲太少就懶得畫圖了,大家發(fā)揮一下想象力將就的看看,哈哈)
看起來挺復(fù)雜對不對,事實上也確實很復(fù)雜。
所以微服務(wù)并不是適用于所有項目、所有團(tuán)隊的。在應(yīng)用之前一定要搞清楚是否適合自己。
要保證這么一套微服務(wù)架構(gòu)能成功運行起來,我們起碼需要以下這些微服務(wù)的基礎(chǔ)組件:
服務(wù)注冊
部署了一個微服務(wù)節(jié)點,得讓調(diào)用者知道啊,當(dāng)微服務(wù)節(jié)點有增加或減少的時候,也得讓調(diào)用者及時知曉啊。這些問題都是通過“服務(wù)注冊”組件來實現(xiàn)的,服務(wù)提供者將自己的服務(wù)地址等信息登記到“服務(wù)注冊”組件中,調(diào)用者需要的時候,每次都先去查詢“服務(wù)注冊”即可。免去人工維護(hù)微服務(wù)節(jié)點的信息同步問題。
服務(wù)網(wǎng)關(guān)
是指提供給外部系統(tǒng)調(diào)用的是統(tǒng)一網(wǎng)關(guān)。主要做安全和權(quán)限控制等。
配置中心
微服務(wù)的配置中心是用來統(tǒng)一管理所有微服務(wù)節(jié)點的配置信息的。因為同一個程序可能要適用于多個環(huán)境,所以在微服務(wù)實踐中要盡量做到程序與配置分離,將配置進(jìn)行集中管理。包括微服務(wù)節(jié)點信息、程序運行時配置、變量配置、數(shù)據(jù)源配置、日志配置、版本配置等。
服務(wù)框架
是指用來規(guī)范各個微服務(wù)節(jié)點之間通信標(biāo)準(zhǔn)的。服務(wù)間通信采用什么協(xié)議、數(shù)據(jù)是如何傳輸?shù)摹?shù)據(jù)格式是什么樣的。有了這個統(tǒng)一的“服務(wù)框架”就能保證各個微服務(wù)節(jié)點之間高效率的協(xié)同。
服務(wù)監(jiān)控
微服務(wù)運行起來之后,為了能夠監(jiān)控節(jié)點的健康情況,保障節(jié)點的高可行,需要對各個服務(wù)節(jié)點進(jìn)行收集數(shù)據(jù)指標(biāo)、然后對數(shù)據(jù)進(jìn)行實時處理和分析,形成監(jiān)控報表和預(yù)警。
服務(wù)追蹤
一旦使用了微服務(wù)架構(gòu),那么當(dāng)有請求過來時,就會經(jīng)過多個微服務(wù)節(jié)點的處理,形成了一個調(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é)點,那么開發(fā)、維護(hù)、測試的成本就會非常大。因此一般還會引入 自動化部署 和 自動化測試 來提高協(xié)同效率。
三、「 微服務(wù) 」入門如何避免踩坑?
你以為微服務(wù)架構(gòu)都是下面這樣的嗎?
事實上,更能是下面這樣的,哈哈。
(圖片來源網(wǎng)絡(luò))
大家都在宣揚「 微服務(wù) 」多么多么的好,例如:易擴展、松耦合、服務(wù)簡單、獨立開發(fā)、易維護(hù)、輕量級等等。雖然這些優(yōu)勢也是事實,但是「 微服務(wù) 」帶來的問題也很多,尤其是對于剛?cè)腴T的團(tuán)隊而言,應(yīng)用微服務(wù)后,趟坑真的可以趟到你崩潰。下面就普及一些常見的問題來給大家打個預(yù)防針:
不是所有項目都適用微服務(wù)
有些項目規(guī)模還比較小,或者項目才剛立項啟動,也只有三四個人負(fù)責(zé)開發(fā)維護(hù),這時候是不建議一上來就搞微服務(wù)架構(gòu)的。這種情況下搞微服務(wù),不僅是“殺雞用牛刀”,而且還無謂的增加了項目的復(fù)雜度,本身一個單體結(jié)構(gòu)就可以搞定的事情,非得拆分N多節(jié)點,人員又不足以支撐這么多節(jié)點的開發(fā)維護(hù),這完全是自找苦吃。反而是等項目成熟了、規(guī)模大了之后,再開始慢慢將原有結(jié)構(gòu)拆為微服務(wù)才是正確的做法。
不要拆分過多過細(xì)的服務(wù)
即使項目經(jīng)過評估后適合拆為微服務(wù)架構(gòu),但也不要過度拆解。有的團(tuán)隊喜歡將項目拆成很細(xì)很細(xì)的顆粒,最后把項目搞的特別復(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)致實施過程中問題百出,微服務(wù)的優(yōu)勢不能發(fā)揮。
以上,就是對架構(gòu)設(shè)計中「 微服務(wù)基礎(chǔ) 」的一些思考。
-
自動化
+關(guān)注
關(guān)注
29文章
5575瀏覽量
79272 -
架構(gòu)
+關(guān)注
關(guān)注
1文章
514瀏覽量
25470 -
微服務(wù)
+關(guān)注
關(guān)注
0文章
137瀏覽量
7348
原文標(biāo)題:架構(gòu)設(shè)計之「 微服務(wù)入門 」
文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論