新聞中心
這是一個(gè)入門(mén)問(wèn)題,做微服務(wù)項(xiàng)目,首先就是要搭建 Project,代碼采用什么樣的形式來(lái)組織,這是我們面臨的第一個(gè)問(wèn)題。

在傳統(tǒng)的項(xiàng)目中,我們經(jīng)常需要搭建聚合工程,這樣可以方便的對(duì)項(xiàng)目進(jìn)行分模塊管理,降低維護(hù)難度。
微服務(wù)項(xiàng)目中,我們是否還需要繼續(xù)這種開(kāi)發(fā)方式呢?今天松哥結(jié)合自己在項(xiàng)目中的經(jīng)驗(yàn)和大家簡(jiǎn)單聊一下,微服務(wù)項(xiàng)目中代碼的組織形式。
1.開(kāi)發(fā)模式要搞清楚代碼如何組織,首先大家要明白微服務(wù)架構(gòu)到底是什么樣子!
在微服務(wù)架構(gòu)中,一個(gè)完整的項(xiàng)目被拆分成很多獨(dú)立的微服務(wù),例如一個(gè)電商項(xiàng)目,可能分為商品管理、商家管理、用戶(hù)管理、交易管理、SEO 管理、App 管理、財(cái)務(wù)管理、系統(tǒng)管理等很多微服務(wù)。
這些微服務(wù)都是一個(gè)個(gè)獨(dú)立的項(xiàng)目,由不同的團(tuán)隊(duì)負(fù)責(zé)開(kāi)發(fā)維護(hù)。
不同的團(tuán)隊(duì)獨(dú)立開(kāi)發(fā)、獨(dú)立維護(hù)、獨(dú)立測(cè)試(看情況)、獨(dú)立上線,這樣可以有效提高項(xiàng)目的開(kāi)發(fā)效率。
結(jié)合項(xiàng)目的實(shí)際情況,不同的團(tuán)隊(duì)甚至可以選擇不同的技術(shù)棧,比如商品管理模塊用 Java、交易管理可能用 Go、門(mén)戶(hù)網(wǎng)站可能用 PHP 等等,從微服務(wù)架構(gòu)上來(lái)說(shuō),這些都是支持的,這也是微服務(wù)的優(yōu)勢(shì)之一,即同一系統(tǒng)不必拘泥于同一種語(yǔ)言,當(dāng)然在具體實(shí)踐中,還需要結(jié)合團(tuán)隊(duì)的技術(shù)棧以及語(yǔ)言的特性來(lái)選擇。
其實(shí)看到這里,你大概就明白了,聚合工程在這里還能不能用了!
2.要不要聚合工程首先從整體上來(lái)說(shuō),也就是整個(gè)項(xiàng)目層面,我們不再需要聚合工程了。聚合工程可以讓項(xiàng)目統(tǒng)一打包,解決項(xiàng)目中的依賴(lài)問(wèn)題,還可以對(duì)依賴(lài)的版本進(jìn)行統(tǒng)一管理,但是這些特性對(duì)微服務(wù)項(xiàng)目來(lái)說(shuō),其實(shí)并不重要。
假如商品管理模塊用 Java、交易管理用 Go、門(mén)戶(hù)網(wǎng)站用 PHP,那么這三個(gè)獨(dú)立的微服務(wù)肯定是沒(méi)有必要做成一個(gè)聚合工程的,你也沒(méi)法聚合。當(dāng)然這是一種比較極端的情況,即使不同微服務(wù)模塊都是使用 Java 語(yǔ)言開(kāi)發(fā),那也沒(méi)有必要聚合,因?yàn)椴煌奈⒎?wù)實(shí)際上都是一個(gè)個(gè)獨(dú)立運(yùn)行的項(xiàng)目,由不同的團(tuán)隊(duì)開(kāi)發(fā)維護(hù),微服務(wù)的一大優(yōu)勢(shì)就是各個(gè)團(tuán)隊(duì)對(duì)獨(dú)立開(kāi)發(fā),互不影響,如果搞個(gè)聚合工程,又把各個(gè)團(tuán)隊(duì)綁定在一起了。
但是不同的微服務(wù)之間,不可避免的要使用一些公共類(lèi)庫(kù),這些可以統(tǒng)一打包上傳到公司 Maven 私服上,然后不同的團(tuán)隊(duì)自行依賴(lài)即可,或者通過(guò) git subtree 的方式來(lái)使用。
這是從大的層面來(lái)說(shuō)。具體到每一個(gè)微服務(wù),聚合工程的優(yōu)勢(shì)還在,該用還是要用,例如在商品管理模塊,聚合工程還是可以繼續(xù)使用的。
3.為什么會(huì)有疑問(wèn)微服務(wù)中用不用聚合工程這個(gè)問(wèn)題,本來(lái)是個(gè)很小的問(wèn)題,但是為什么很多小伙伴會(huì)有疑問(wèn)呢?
我說(shuō)一下我了解到幾種情況。
一種情況就是公司的微服務(wù)是在舊項(xiàng)目的基礎(chǔ)上改造的,倉(cāng)促上馬,改來(lái)改去,面目全非,已經(jīng)顧不上架構(gòu)這些東西了,功能能實(shí)現(xiàn)就行了,這種時(shí)候甚至在大的層面就使用了聚合工程,結(jié)果不同團(tuán)隊(duì)開(kāi)發(fā)起來(lái),還是牽一發(fā)而動(dòng)全身,如果有小伙伴也開(kāi)發(fā)過(guò)這種項(xiàng)目,可能就會(huì)對(duì)聚合工程的使用產(chǎn)生疑問(wèn)。松哥有一個(gè)朋友在廣州做某央企的項(xiàng)目,就是這種情況。
另一種情況可能是因?yàn)楣救松?,微服?wù)項(xiàng)目開(kāi)發(fā)為了方便,也就從整體上做成了聚合工程,這樣在項(xiàng)目人少并且工程量不大的情況下,修改起來(lái)非常方便。
總之,這個(gè)問(wèn)題實(shí)際上也不能一概而論,結(jié)合項(xiàng)目的實(shí)際情況,選擇適合自己的方案才是最好的,松哥近期也會(huì)搞一個(gè)這方面的架構(gòu)給大家參考,小伙伴們敬請(qǐng)留意公眾號(hào)的消息~
本文授權(quán)轉(zhuǎn)載自公眾號(hào)「牧碼小子」。公眾號(hào)牧碼小子分享大量Java 微服務(wù)干貨,歡迎關(guān)注!
當(dāng)前標(biāo)題:微服務(wù)項(xiàng)目搭建,到底要不要聚合工程?
URL地址:http://m.5511xx.com/article/djeehhh.html


咨詢(xún)
建站咨詢(xún)
