SpringBoot-微服務(wù)的誕生

一直想寫點(diǎn)關(guān)于 SpringBoot 的文章,奈何水平有限不敢輕易下筆,只能對一些淺顯的問題進(jìn)行總結(jié)。今天無意中發(fā)現(xiàn)一本好書《SpringBoot 快速構(gòu)建微服務(wù)體系》,王福強(qiáng)老師的著作。里面對 SpringBoot 進(jìn)行了更為深層的解釋,內(nèi)容非常不錯。

接下來我會借這本書寫寫關(guān)于 SpringBoot 的內(nèi)容。也推薦大家去看原著,支持下王福強(qiáng)老師,畢竟寫書這件事真是不容易??!

0、微服務(wù)(Micro Service)的盛行

最近幾年微服務(wù)(Micro Service)的概念很流行,其中Java中最耀眼的當(dāng)屬 SpringBoot 。背靠 Spring 框架衍生出來的整個生態(tài)體系,無論從“出身”,還是社區(qū)的支撐上, SpringBoot 都是微服務(wù)框架選型的不二之選。

王福強(qiáng)老師認(rèn)為 SpringBoot 并非單一 一個微服務(wù)框架的概念就可以將其概括,應(yīng)當(dāng)將其看作是一種最佳實(shí)踐更為貼切:一種 Spring 框架及其社區(qū)對“約定大于配置”理念的最佳實(shí)踐。

1、什么是微服務(wù)(Micro Service)

微服務(wù)(Micro Service) 流行于近幾年,但是實(shí)際上好多大的企業(yè)已經(jīng)在使用和實(shí)施微服務(wù)了。各個大企業(yè)在微服務(wù)化的道路上走得時間長了,踩坑多了,整個軟件交付鏈路上各個環(huán)節(jié)的基礎(chǔ)設(shè)施逐漸成熟,進(jìn)而微服務(wù)就誕生了。

之所以稱為微服務(wù),是和之前的服務(wù)化思路和實(shí)踐相比較而來的。因?yàn)樵缧┠甑姆?wù)實(shí)現(xiàn)和實(shí)施思路是瀑布式的,也就是將很多功能從開發(fā)到交付都打成一個很大的服務(wù)單元,而微服務(wù)實(shí)現(xiàn)和實(shí)施的思路則更強(qiáng)調(diào)功能趨于單一,服務(wù)單元小型化和微型化。

所以,從思路和理念上來講,微服務(wù)就是倡導(dǎo)對功能進(jìn)行拆分,將服務(wù)粒度做小,使之可以獨(dú)立承擔(dān)對外服務(wù)的職責(zé),沿著這個思路開發(fā)和交付的軟件服務(wù)實(shí)體就叫做“微服務(wù)”,而圍繞著這個思路和理念構(gòu)建的一系列基礎(chǔ)設(shè)施和指導(dǎo)思想,王福強(qiáng)老師稱為“微服務(wù)體系”。

2、微服務(wù)(Micro Service) 因何而生

對于原來瀑布模式下開發(fā)的服務(wù)來說,如果團(tuán)隊(duì)不大,如軟件復(fù)雜度不大,那么使用原來的模式進(jìn)行服務(wù)化治理是比較合理的,而且這種方式對運(yùn)維和各種基礎(chǔ)設(shè)施的要求也不高。

但是隨著互聯(lián)網(wǎng)的蓬勃發(fā)展,軟件的復(fù)雜化飆升,軟件交付的效率要求更高,隨之投入的資源越來越多,傳統(tǒng)的服務(wù)之路“捉襟見肘”。

首先開發(fā)階段,將多個功能統(tǒng)一到一個項(xiàng)目下,但隨著功能的膨脹,這些功能會有不同的研發(fā)人員開發(fā),造成后果就是,大家提交代碼時候頻繁沖突,并為解決沖突付出精力,使得單一的開發(fā)項(xiàng)目成為了開發(fā)期間所有人的工作瓶頸。

這個時候可以按照微服務(wù)的理念對要開發(fā)的功能模塊進(jìn)行拆分,從而負(fù)責(zé)不同功能的研發(fā)人員就可以在自己的項(xiàng)目進(jìn)行代碼管理。

到了軟件交付階段,如果是以前的瀑布式開發(fā),所有開發(fā)完成的項(xiàng)目會集中交付,只能等待所有的功能測試完成后,才能完成整個項(xiàng)目的交付。如果有其中一環(huán)掉鏈子,可怕程度難以想象。

但是按照微服務(wù)理念,我們前期按照功能將服務(wù)單元進(jìn)行了拆分,各自獨(dú)立,研發(fā)人員開發(fā)完成后可以將其作為獨(dú)立的單元進(jìn)行交付,從而使得所有研發(fā)人員能夠并行,各自演化不受影響。

總體來說,微服務(wù)可以應(yīng)對飆升的復(fù)雜度;也可以對相應(yīng)的組織架構(gòu)進(jìn)行擴(kuò)展。

3、微服務(wù)帶來的好處

首先每個微服務(wù)都是獨(dú)立的項(xiàng)目,而且相對于整個項(xiàng)目也是相對獨(dú)立的,進(jìn)而在開發(fā)階段保證了其快速迭代,高效進(jìn)行開發(fā)。

其次雖然微服務(wù)是獨(dú)立開發(fā)的,但是交付的時候還是可以一起交付的(但是這不是微服務(wù)的做法)。微服務(wù)體系下,各個服務(wù)交付時間獨(dú)立,從而使得每個微服務(wù)從開發(fā)到交付整條鏈路都是獨(dú)立進(jìn)行的,加快了微服務(wù)的迭代和交付效率。

微服務(wù)獨(dú)立運(yùn)行可以帶來明顯的好處:

①可擴(kuò)展性:可以快速添加服務(wù)集群的實(shí)例,提升整個微服務(wù)集群的服務(wù)能力,傳統(tǒng)模式下,為了提高服務(wù)能力,很多是必須強(qiáng)化和擴(kuò)展單一節(jié)點(diǎn)的服務(wù)能力來達(dá)成,如果單節(jié)點(diǎn)服務(wù)能力已達(dá)極限,就得從軟件到硬件整體進(jìn)行重構(gòu)。

早些年開發(fā)者遵循JavaEE開發(fā)規(guī)范開發(fā)的Web應(yīng)用,都需要以 War 包的形式部署到 tomcat、jetty等web容器中運(yùn)行,即使每個war包提供的都是獨(dú)立的微服務(wù),但是它們都是統(tǒng)一部署到一個web容器中的,所以擴(kuò)展能力受限于web容器整體。所以大多數(shù)情況下,都是一個tomcat只部署一個war包,然后擴(kuò)展和復(fù)制多個tomcat實(shí)例來擴(kuò)展整個應(yīng)用服務(wù)集群。

②隔離性:實(shí)際上是可擴(kuò)展性的基礎(chǔ),當(dāng)將每個微服務(wù)都隔離為獨(dú)立的運(yùn)行單元后,任何一個或者多個微服務(wù)的失敗都將只影響自己或者少量的其他微服務(wù),而不會大面積波及整個服務(wù)運(yùn)行體系。

③多語言生態(tài):微服務(wù)獨(dú)立后,給了對應(yīng)的團(tuán)隊(duì)何組織快速迭代和交付的能力。同事也帶來了更多的靈活性,實(shí)際上不同的交付團(tuán)隊(duì)可以基于不同的計(jì)算機(jī)語言構(gòu)建這些微服務(wù)。比如說可以使用 Java 、Go、python等進(jìn)行開發(fā)何交付,但是應(yīng)該盡量統(tǒng)一微服務(wù)的服務(wù)接口和協(xié)議。

4、微服務(wù)帶來的挑戰(zhàn)

服務(wù)的數(shù)量明顯增多。雖然微服務(wù)化后可以快速迭代開發(fā)交付,擴(kuò)展性上也沒有問題。但是在快速迭代中,對開發(fā)人員的要求更高,要對自己的開發(fā)的程序要更加熟悉,因?yàn)橥粋€服務(wù)只有一個開發(fā)人員,好的情況外加一個備份人員,但往往是備份人員是另外一個微服務(wù)的主開發(fā)人員(小編的項(xiàng)目組就是這樣子的)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容