第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

將 Go 微服務(wù)保存在 Github 上的不同存儲(chǔ)庫(kù)中

將 Go 微服務(wù)保存在 Github 上的不同存儲(chǔ)庫(kù)中

Go
海綿寶寶撒 2023-07-26 19:51:54
我正在從事一個(gè)微服務(wù)項(xiàng)目。為此,我希望每個(gè)服務(wù)都有一個(gè) Go 包,全部包含在項(xiàng)目的父包中。它看起來(lái)像這樣:. └── github.com     └── username         └── project             ├── service1             └── service2我認(rèn)為這種結(jié)構(gòu)可以遵守 Go 關(guān)于包名稱和路徑的約定。這樣做的結(jié)果是,我的所有微服務(wù)都結(jié)束在 Github 上的同一個(gè)存儲(chǔ)庫(kù)上,因?yàn)樵摯鎯?chǔ)庫(kù)位于 URL 的深度 3 處。我認(rèn)為如果代碼庫(kù)變得很大,這可能會(huì)成為未來(lái)的一個(gè)問(wèn)題。它還可能增加 CI/CD 管道的復(fù)雜性,例如,對(duì)一項(xiàng)服務(wù)的更改將觸發(fā)所有其他服務(wù)的構(gòu)建,并且要克隆的代碼將變得不必要的大。有沒(méi)有辦法避免 Go 約定和 Github 工作方式之間的沖突?或者這是 CI/CD 工作中必須解決的問(wèn)題?
查看完整描述

3 回答

?
POPMUISE

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)心。


查看完整回答
反對(duì) 回復(fù) 2023-07-26
?
忽然笑

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。

查看完整回答
反對(duì) 回復(fù) 2023-07-26
?
qq_笑_17

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ǔ)映像。


查看完整回答
反對(duì) 回復(fù) 2023-07-26
  • 3 回答
  • 0 關(guān)注
  • 154 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)