好久沒有寫文章了洽损,主要是每天閑下來(lái)的時(shí)間太少,好不容易這個(gè)周末閑下來(lái)沒什么事情革半,于是就買了《Spring Boot實(shí)戰(zhàn)》和《Spring Cloud微服務(wù)實(shí)戰(zhàn)》兩本書來(lái)學(xué)習(xí)一下微服務(wù)架構(gòu)碑定,也算是為后面的項(xiàng)目做準(zhǔn)備或者技術(shù)儲(chǔ)備吧。下面放一張兩本書的照片又官,省得想看的人找不到延刘,個(gè)人感覺這兩本書相當(dāng)不錯(cuò),想了解微服務(wù)架構(gòu)這兩本書加實(shí)踐就足夠了六敬。
??我也只是走馬觀花看了一遍全書碘赖,然后回來(lái)跟著書一點(diǎn)點(diǎn)實(shí)踐了一部分,了解的還不是很深入外构,所以哪里有理解不正確的地方歡迎指正普泡。這篇文章主要是對(duì)微服務(wù)和微服務(wù)架構(gòu)了解個(gè)大概,下一篇會(huì)寫深入一點(diǎn)的比如自定義配置等內(nèi)容审编。
Spring Boot
要了解微服務(wù)架構(gòu)撼班,首先要了解的就是Spring Boot。這里吐槽一下垒酬,java這個(gè)Spring終于出了個(gè)讓我不惡心的東西砰嘁,就是這個(gè)Spring Boot件炉。因?yàn)槲抑案愕氖?net一套,后來(lái)接觸java別的沒感覺啥矮湘,就這配置文件一堆一堆真是讓我惡心透了斟冕。
可能Javaer們要噴我,說(shuō)什么.Net很簡(jiǎn)單啊缅阳,項(xiàng)目一新建就可以用啦宫静,沒啥技術(shù)含量。其實(shí)何必呢券时,好比你打電話點(diǎn)一份披薩孤里,Spring以前是什么情況?開始就是告訴廚師怎么做橘洞、放什么調(diào)料捌袜、怎么放、放多少等等啥都你去決定炸枣。而.net呢虏等?直接就是給你一個(gè)對(duì)應(yīng)口味的披薩,需要定制可以自己提适肠。
所以吧霍衫,不是說(shuō)配置文件多是毛病,只是大多數(shù)人用框架的目的就是上來(lái)就寫業(yè)務(wù)代碼侯养,給我個(gè)默認(rèn)配置好的就好了敦跌,哪里不合我意我就改哪里。
Spring Boot就做的很好逛揩,省去了很多麻煩的XML配置柠傍,一切依賴項(xiàng)直接在Maven配置文件的dependencies里面加上,內(nèi)部就自動(dòng)給你配置好了辩稽。這也就是為什么它很適合作為微服務(wù)的原因之一惧笛。
另一個(gè)原因就是它可以自宿主,也就是可以不需要tomcat逞泄,直接運(yùn)行患整。執(zhí)行Maven Install之后會(huì)生成jar可執(zhí)行程序,直接在命令行執(zhí)行 $java -jar ***.jar
就可以通過(guò)瀏覽器訪問了喷众。當(dāng)然各谚,也可自己配置生成war包,然后在tomcat中運(yùn)行侮腹。
Spring Boot的優(yōu)點(diǎn)不止這些嘲碧,還有起步依賴、Spring Boot CLI父阻、Actuator等愈涩,而且雖然很多東西都已經(jīng)配置好望抽,但是也可以自定義配置來(lái)覆蓋默認(rèn)配置,并且都是通過(guò)寫代碼的方式而不是XML配置文件的方式履婉∶焊荩總之它是一個(gè)為微服務(wù)而生的輕量級(jí)框架。
關(guān)于Spring Boot的初體驗(yàn)可以從start.spring.io開始毁腿。
Spring Cloud 微服務(wù)架構(gòu)
上面介紹的Spring Boot是微服務(wù)辑奈,這里的微服務(wù)架構(gòu)才是重點(diǎn)。那什么是微服務(wù)架構(gòu)呢已烤?
它的主旨是將一個(gè)原本獨(dú)立的系統(tǒng)拆分成多個(gè)微小型服務(wù)鸠窗,這些小型服務(wù)都在各自獨(dú)立的進(jìn)程中運(yùn)行,服務(wù)之間通過(guò)基于HTTP的RESTful API進(jìn)行協(xié)作胯究。被拆分成的每一個(gè)小型服務(wù)都圍繞著系統(tǒng)中的某一項(xiàng)或一些耦合度較高的業(yè)務(wù)功能進(jìn)行構(gòu)建稍计,并且每個(gè)服務(wù)都維護(hù)著自身的數(shù)據(jù)存儲(chǔ)、業(yè)務(wù)開發(fā)裕循、自動(dòng)化測(cè)試案例以及獨(dú)立部署機(jī)制臣嚣。由于有了輕量級(jí)的通信協(xié)作基礎(chǔ),所以這些微服務(wù)可以用不同的語(yǔ)言來(lái)編寫----《Spring Cloud微服務(wù)實(shí)戰(zhàn)》
先舉幾個(gè)實(shí)際情況來(lái)說(shuō)說(shuō)我為什么要考慮微服務(wù)架構(gòu):
1剥哑、 我們的整個(gè)系統(tǒng)目前是所有業(yè)務(wù)都在一個(gè)項(xiàng)目里面硅则,而且不同客戶對(duì)不同業(yè)務(wù)模塊的需求和取舍都不同,每個(gè)業(yè)務(wù)模塊也不能獨(dú)立出來(lái)復(fù)用株婴,這樣就導(dǎo)致一個(gè)項(xiàng)目改來(lái)改去N多個(gè)版本怎虫,管理起來(lái)非常麻煩。
2督暂、有些業(yè)務(wù)模塊是非常重要且常用的揪垄,有些是不常用的,但在整個(gè)系統(tǒng)中一旦其中一個(gè)不常用模塊出現(xiàn)問題可能會(huì)導(dǎo)致整個(gè)系統(tǒng)不可用逻翁。
3、團(tuán)隊(duì)中有人對(duì)業(yè)務(wù)A熟悉捡鱼,有人對(duì)業(yè)務(wù)B熟悉八回,也有人對(duì)業(yè)務(wù)C熟悉。在這種情況下業(yè)務(wù)A驾诈、B缠诅、C都在一個(gè)系統(tǒng)中且有關(guān)聯(lián)時(shí)往往會(huì)耦合性比較大,造成的溝通也比較復(fù)雜乍迄。除此之外管引,目前的模式是一個(gè)人設(shè)計(jì)以及分配任務(wù)給其他人,這樣的問題是一個(gè)項(xiàng)目在設(shè)計(jì)初期一個(gè)人難以掌控項(xiàng)目全局闯两,也就難以保證每個(gè)業(yè)務(wù)模塊都能理解到位褥伴。
根據(jù)以上三點(diǎn)問題谅将,通過(guò)微服務(wù)架構(gòu)完全可以解決。如:
問題1:采用微服務(wù)架構(gòu)重慢,每個(gè)業(yè)務(wù)模塊作為一個(gè)微服務(wù)饥臂,根據(jù)需求不斷完善對(duì)應(yīng)模塊的API,這樣可以局部更新且不影響其它模塊也達(dá)到模塊復(fù)用的目的似踱。在應(yīng)對(duì)不同需求只需調(diào)整前端頁(yè)面和調(diào)用不同API隅熙,不必復(fù)制整個(gè)項(xiàng)目。
問題2:由于各個(gè)服務(wù)獨(dú)立核芽,所以會(huì)互不影響囚戚。
問題3:對(duì)于業(yè)務(wù)模塊之間需要通信的,可以采用消息隊(duì)列來(lái)實(shí)現(xiàn)轧简,比如RabbitMQ弯淘。或者互相調(diào)用API來(lái)達(dá)到目的吉懊,具體方案要根據(jù)業(yè)務(wù)情況來(lái)確定庐橙。不同服務(wù)只需要約定好通信方式即可。
如果采用微服務(wù)架構(gòu)就要做到根據(jù)業(yè)務(wù)模塊來(lái)組織團(tuán)隊(duì)借嗽,也就是一個(gè)業(yè)務(wù)模塊一個(gè)團(tuán)隊(duì)或一個(gè)人來(lái)負(fù)責(zé)每個(gè)負(fù)責(zé)指定業(yè)務(wù)模塊的團(tuán)隊(duì)或個(gè)人用做“產(chǎn)品”的心態(tài)去做好需求設(shè)計(jì)以及開發(fā)态鳖。這樣會(huì)大大減少溝通以及可能存在的設(shè)計(jì)問題。當(dāng)然恶导,這種分工形式對(duì)某個(gè)團(tuán)隊(duì)或個(gè)人要求比較高浆竭。
除此之外微服務(wù)還有很多特點(diǎn),如:
相比單體項(xiàng)目惨寿,可以做到不同業(yè)務(wù)采取不同的技術(shù)方案以及技術(shù)平臺(tái)邦泄,這樣就不會(huì)出現(xiàn)殺雞用牛刀或是殺牛用指甲鉗的窘境了。就如書中所說(shuō)的
不是每一個(gè)問題都是釘子裂垦,不是每一個(gè)解決方案都是錘子顺囊。
去中心化管理數(shù)據(jù),每個(gè)微服務(wù)都有自有的數(shù)據(jù)庫(kù)蕉拢,這樣做到去中心化數(shù)據(jù)管理特碳。
統(tǒng)一的權(quán)限驗(yàn)證,Spring Cloud提供API網(wǎng)管來(lái)管理微服務(wù)接口并做到請(qǐng)求過(guò)濾的功能晕换,這樣就可以對(duì)多個(gè)微服務(wù)做到統(tǒng)一的權(quán)限驗(yàn)證午乓,當(dāng)然,每個(gè)微服務(wù)也可以擁有自己的權(quán)限驗(yàn)證闸准。
微服務(wù)雖然增加了運(yùn)維難度和架構(gòu)上的復(fù)雜性益愈,整體來(lái)說(shuō)對(duì)于我這種情況的單體項(xiàng)目是利非常大于弊的。
??對(duì)于微服務(wù)架構(gòu)的簡(jiǎn)單介紹以及應(yīng)用場(chǎng)景就介紹到此夷家,下一篇將會(huì)根據(jù)我的初步實(shí)踐總結(jié)一下Spring Boot相關(guān)知識(shí)蒸其。