微服務這幾年不可謂不火,很多技術團隊都開始在自己的項目上引入了微服務。一方面這些團隊確實很好的推動了微服務的應用和發(fā)展,另一方面也可以看到一些盲目追技術熱點的行為所帶來的危害,比如很多中小團隊對微服務的基礎知識只是做了很淺顯的了解就開始盲目的推動微服務的實施,最后導致了項目的失敗。
微服務要想做好是一個非常復雜的架構,今天就先只聊一聊微服務的一些基礎架構,算是入門篇。
一、什么是「 微服務 」?
「 微服務 」由 Martin Fowler 提出,它是指一種軟件架構風格。一個大型的系統(tǒng)可以由多個微服務組成,每個微服務是被獨立部署,獨立完成自己的任務單元,微服務之間是通過API方式進行通信調用,是松耦合的。
這個模式聽著是不是很熟悉的感覺?
因為在提出「 微服務 」概念之前,很多互聯(lián)網(wǎng)公司的中大型項目早就是按照將業(yè)務拆分成獨立單元的形式在部署和架構的,這與微服務的思路是一脈相通的,只不過實現(xiàn)方式?jīng)]有現(xiàn)在這么規(guī)范與體系。
那「 微服務 」到底是怎么演變過來的呢?
在做一個新項目的時候,一開始項目大多數(shù)都很小,都是「 單體應用 」,這是很常見的做法。在項目規(guī)模小的時候,這種方式開發(fā)效率和運維效率都最高,符合互聯(lián)網(wǎng)公司快速響應的要求。
但是隨著業(yè)務量越來越大,項目也越來越復雜,開發(fā)團隊人員也越來越多。這個時候還采用單體應用,問題就會很明顯了。下面挑選兩個最為常見的問題來舉例:
協(xié)同問題:多個人同時開發(fā)一份代碼,在工作協(xié)同上就會經(jīng)常遇到代碼沖突問題。
可用性問題:因為是單體應用,即使改個最小的功能,也需要整體發(fā)布,不僅直接影響了線上可用性,還可能會對正常功能帶來風險。
為了解決這些問題,大家就開始考慮將「 單體應用 」進行拆分,進行服務化部署。然后又隨著 Martin Fowler對「 微服務 」概念的提出,加上 DevOps 的流行,進一步促進了微服務的火熱發(fā)展。
「 微服務 」的理念提倡每個服務都是單一職責,且每一個服務都能實現(xiàn)自治,因此可以帶來一些明顯好處:
部署簡單:每個微服務都可以獨立去部署,方便快捷。
邏輯清晰:將一個獨立功能邏輯封裝在單一微服務里面,實現(xiàn)整體項目的邏輯清晰。
可擴展:因為可以隨時增加和減少微服務,可以很方便的擴展功能。
可靠性高:某一個功能的異常可以隔離在單一微服務里面,可以提高整體可靠性。
二、「 微服務 」的架構是什么樣?
我們先來看一下「 微服務 」的架構圖:
(圖片來源網(wǎng)絡,粉絲太少就懶得畫圖了,大家發(fā)揮一下想象力將就的看看,哈哈)
看起來挺復雜對不對,事實上也確實很復雜。
所以微服務并不是適用于所有項目、所有團隊的。在應用之前一定要搞清楚是否適合自己。
要保證這么一套微服務架構能成功運行起來,我們起碼需要以下這些微服務的基礎組件:
服務注冊
部署了一個微服務節(jié)點,得讓調用者知道啊,當微服務節(jié)點有增加或減少的時候,也得讓調用者及時知曉啊。這些問題都是通過“服務注冊”組件來實現(xiàn)的,服務提供者將自己的服務地址等信息登記到“服務注冊”組件中,調用者需要的時候,每次都先去查詢“服務注冊”即可。免去人工維護微服務節(jié)點的信息同步問題。
服務網(wǎng)關
是指提供給外部系統(tǒng)調用的是統(tǒng)一網(wǎng)關。主要做安全和權限控制等。
配置中心
微服務的配置中心是用來統(tǒng)一管理所有微服務節(jié)點的配置信息的。因為同一個程序可能要適用于多個環(huán)境,所以在微服務實踐中要盡量做到程序與配置分離,將配置進行集中管理。包括微服務節(jié)點信息、程序運行時配置、變量配置、數(shù)據(jù)源配置、日志配置、版本配置等。
服務框架
是指用來規(guī)范各個微服務節(jié)點之間通信標準的。服務間通信采用什么協(xié)議、數(shù)據(jù)是如何傳輸?shù)?、?shù)據(jù)格式是什么樣的。有了這個統(tǒng)一的“服務框架”就能保證各個微服務節(jié)點之間高效率的協(xié)同。
服務監(jiān)控
微服務運行起來之后,為了能夠監(jiān)控節(jié)點的健康情況,保障節(jié)點的高可行,需要對各個服務節(jié)點進行收集數(shù)據(jù)指標、然后對數(shù)據(jù)進行實時處理和分析,形成監(jiān)控報表和預警。
服務追蹤
一旦使用了微服務架構,那么當有請求過來時,就會經(jīng)過多個微服務節(jié)點的處理,形成了一個調用鏈。為了進行問題追蹤和故障的定位,需要對請求的完整調用鏈進行記錄。
這里的服務追蹤與上面的服務監(jiān)控是不同維度的,一個是全局的,一個是微觀的,發(fā)揮的作用也不一樣。
服務治理
就是指需要通過準備一些策略和方案,來保障整個微服務架構在生產(chǎn)環(huán)境遇到極端情況下也能正常提供服務的措施。比如 熔斷、限流、隔離等等。
當然,上述只是一個微服務架構最為核心的基礎組件,一旦微服務體系過大,例如有幾十上百個微服務節(jié)點,那么開發(fā)、維護、測試的成本就會非常大。因此一般還會引入 自動化部署 和 自動化測試 來提高協(xié)同效率。
三、「 微服務 」入門如何避免踩坑?
你以為微服務架構都是下面這樣的嗎?
事實上,更能是下面這樣的,哈哈。
(圖片來源網(wǎng)絡)
大家都在宣揚「 微服務 」多么多么的好,例如:易擴展、松耦合、服務簡單、獨立開發(fā)、易維護、輕量級等等。雖然這些優(yōu)勢也是事實,但是「 微服務 」帶來的問題也很多,尤其是對于剛入門的團隊而言,應用微服務后,趟坑真的可以趟到你崩潰。下面就普及一些常見的問題來給大家打個預防針:
不是所有項目都適用微服務
有些項目規(guī)模還比較小,或者項目才剛立項啟動,也只有三四個人負責開發(fā)維護,這時候是不建議一上來就搞微服務架構的。這種情況下搞微服務,不僅是“殺雞用牛刀”,而且還無謂的增加了項目的復雜度,本身一個單體結構就可以搞定的事情,非得拆分N多節(jié)點,人員又不足以支撐這么多節(jié)點的開發(fā)維護,這完全是自找苦吃。反而是等項目成熟了、規(guī)模大了之后,再開始慢慢將原有結構拆為微服務才是正確的做法。
不要拆分過多過細的服務
即使項目經(jīng)過評估后適合拆為微服務架構,但也不要過度拆解。有的團隊喜歡將項目拆成很細很細的顆粒,最后把項目搞的特別復雜,整個團隊都陷進去了。
拆分服務的顆粒度應該根據(jù)業(yè)務發(fā)展和團隊現(xiàn)狀綜合去考慮。這里可以參考一個很火的理論「 康威定律 」。什么樣的團隊,就產(chǎn)生什么樣的架構,微服務拆分的顆粒度是需要和團隊結構相匹配的。當你著手拆微服務的時候,得先評估一下團隊人員和素質,一般在開發(fā)期,2-3個人開發(fā)一個服務是合理的,在維護期,1個人維護2-3個服務也是合理的。
如果拆分過細,開發(fā)人員跟不上,會嚴重降低大家的工作效率。并且過細的服務,會導致一個請求的調用鏈條很長,不僅會影響請求的響應時間,也會對線上問題排查帶來增加難度。
沒有DevOps就不要急于微服務
一個穩(wěn)定的微服務架構,是需要 持續(xù)集成、自動化部署、自動化測試、健全的監(jiān)控體系來保障的。如果團隊還不具備DevOps,這些基礎的建設都沒有做好,一上來就搞微服務的話,就會導致實施過程中問題百出,微服務的優(yōu)勢不能發(fā)揮。
以上,就是對架構設計中「 微服務基礎 」的一些思考。
-
自動化
+關注
關注
29文章
5832瀏覽量
88030 -
架構
+關注
關注
1文章
531瀏覽量
26376 -
微服務
+關注
關注
0文章
147瀏覽量
7956
原文標題:架構設計之「 微服務入門 」
文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
微服務架構和CQRS架構基本概念介紹
來聊一聊Altium中Fill,Polygon Pour,Plane的區(qū)別和用法
聊一聊stm32的低功耗調試
聊一聊平衡小車代碼的實現(xiàn)
關于微服務的一些問題的解答

小米米聊2月19日停止服務 米聊宣布關閉服務器
小米米聊2月19日停止服務
聊一聊華為云彈性公網(wǎng)IP的那些事兒

評論