3 回答

TA貢獻(xiàn)1765條經(jīng)驗(yàn) 獲得超5個(gè)贊
你所說(shuō)的現(xiàn)在通常被稱為“monorepo”。雖然我個(gè)人喜歡將所有項(xiàng)目放在自己的獨(dú)立存儲(chǔ)庫(kù)中(包括微服務(wù)和其他所有內(nèi)容),但有許多支持者將公司的所有代碼放在單個(gè)存儲(chǔ)庫(kù)中。有趣的是,谷歌和 Facebook 都使用 monorepos,盡管必須說(shuō)他們已經(jīng)構(gòu)建了很多奇特的工具來(lái)使其為他們工作。
需要注意的一件重要事情是,您的存儲(chǔ)庫(kù)與您的架構(gòu)是分開(kāi)的。它們之間不一定有任何相關(guān)性。您可以將微服務(wù)全部放在一個(gè)存儲(chǔ)庫(kù)中,也可以將一個(gè)整體劃分為多個(gè)存儲(chǔ)庫(kù);存儲(chǔ)庫(kù)只是存儲(chǔ)和記錄代碼庫(kù)的工具,僅此而已。
在研究該主題時(shí),以下是從網(wǎng)絡(luò)上的許多文章中得出的一些優(yōu)點(diǎn)和缺點(diǎn):
Monorepo的優(yōu)勢(shì)
易于在項(xiàng)目之間共享模塊(即使在微服務(wù)中,也經(jīng)常存在交叉問(wèn)題)
一個(gè)地方可以查看并了解存在哪些代碼 - 對(duì)于擁有大量代碼的大公司尤其有用
簡(jiǎn)化自動(dòng)和手動(dòng)代碼審查流程
簡(jiǎn)化文檔,而不是從多個(gè)、斷開(kāi)連接的存儲(chǔ)庫(kù)中提取
Monorepo的缺點(diǎn)
大量代碼庫(kù)在本地簽入/簽出可能具有挑戰(zhàn)性/緩慢
如果沒(méi)有非常清晰、嚴(yán)格的指導(dǎo)方針,很容易導(dǎo)致產(chǎn)品之間的緊密耦合
需要(稍微)更復(fù)雜的 CI/CD 工具來(lái)進(jìn)行部分發(fā)布
根據(jù)存儲(chǔ)庫(kù)平臺(tái)的不同,非常大的代碼庫(kù)可能會(huì)影響性能
與編程中的許多其他事物(尤其是 SOA 中的許多其他事物)一樣,適合您的解決方案取決于許多只有您可以確定的因素。主要的結(jié)論是,大大小小的公司在這兩種選擇以及許多介于兩者之間的選擇上都取得了成功,因此請(qǐng)謹(jǐn)慎選擇,但不要太擔(dān)心。

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超5個(gè)贊
Go 項(xiàng)目所依賴的子包的版本控制可以通過(guò)git tagging來(lái)跟蹤。因此,鼓勵(lì)使用 Go-modules 將子包移動(dòng)到他們自己的 git 存儲(chǔ)庫(kù)中。
如果您的大部分解決方案將用 go 編寫,我建議利用go module。

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超7個(gè)贊
有一種使用單獨(dú)的存儲(chǔ)庫(kù)和 Go 微服務(wù)的好方法:Go 插件。簡(jiǎn)而言之:
構(gòu)建一個(gè)實(shí)現(xiàn)共享功能的基礎(chǔ)鏡像。
讓該基礎(chǔ)鏡像在容器中的某個(gè)位置查找Go 插件
在派生鏡像中,將功能編譯為 Go 插件,并將其放置在基礎(chǔ)鏡像可以找到的位置。
對(duì)于 Go/gRPC,我在這里放置了一個(gè)執(zhí)行此操作的基礎(chǔ)映像。
- 3 回答
- 0 關(guān)注
- 154 瀏覽
添加回答
舉報(bào)