每個微服務對應一個程式碼庫嗎? - Reddit
你是把每個微服務放在它自己的 git 儲存庫中,還是使用 monorepo?如果是後者,您如何在同一個 repo 中處理多個服務?
回答
1. 我一直為每個服務使用一個 repo,但這主要是因為我們在工作中使用 maven 和 GitHub。我發現 monorepo 的想法很有趣,但我一直無法找到正確的工具,也不想花時間自己動手。
我反對monorepo的想法。一旦你建立了一個完整的微服務生態系統,它們就會變得非常大,而且很難在企業規模上工作。
例如,在我的公司裡有一個近4GB的 repo。它不斷有50多個PR在等待審查/批准/合併。
在許多情況下,開發團隊可能很少互動,也不在彼此的程式碼上工作。因此,他們沒有必要為了在自己的專案上工作而被迫下載另一個團隊的程式碼,以monorepo的形式。
如果開發團隊之間聯絡緊密,並且經常需要其他團隊的大部分工作來完成自己的開發任務,那麼單庫就非常好。
另外,擁有較小的儲存庫使得管理使用者訪問和授權變得更加容易。我非常喜歡在大型專案中使用單獨的軟體庫。
2. 不存在 "一刀切 "的情況
典型的例子:當開始一個專案的時候,有可能邊界不是很清楚,因此服務之間的介面經常變化。如果是這樣的話,一個monorepo就更方便了:把所有的服務放在一個地方,可以更好地看到什麼在哪裡。
另一個典型的例子:一些服務變得 "獨立",因為它開始被不同的客戶使用,這些客戶使用不同的服務版本。這樣的服務應該有自己的資源庫。
或者,那可以是一組相關的服務。
或者,我們根本不在乎,反正就是把所有東西都放在一個地方。
換句話說:這個問題沒有上下文是錯誤的。我們需要看一下當前情況的需要。
Tha說,即使我們想問這個問題,回答這個問題也是錯誤的。回答是錯誤的,因為無論哪種方式都可以取得體面的結果。這是一個騎自行車的問題,是一個不太重要的問題。儘管人們會過分執著於一個或另一個答案,但這是真的。
3. 每個服務的Repo。簡化了部署,並確保內部管理的依賴關係只通過版本化的工件消費。
4. 我兩種都用過。Monorepo更容易。
內部的依賴性變得非常簡單。本地開發始終是最新的,可以很容易地用一個指令碼/命令來控制,因為所有的東西都在那裡,並且始終保持同步。整合測試有一個有意義的家,可以毫無顧慮地在本地執行。
你可以在一個分支/PR中為多個服務編寫程式碼,這是一個巨大的人體工程學的好處。
如果你的團隊不大,GitHub/gitlab的介面很好,因為你不需要開啟20個標籤來檢視正在發生的事情,即使你只有幾個開發人員。
我傾向於預設使用Monorepo來處理任何不是真正獨立的專案。
5. 你得到的主要好處是。
原子化修改。當你做一個廣泛的改變時,你不需要提交到多個倉庫。
所有的東西在任何時候都是在一個版本的依賴關係上。從安全的角度來看,這對避免某些微妙的bug很有用。
每個人都可以很容易地接觸、搜尋和以其他方式使用所有的程式碼。
主要的缺點是,當 repo 越來越大時,你需要專門的工具。這通常意味著需要一個專門的團隊來完成。這真的只對小型和大型公司有意義,對那些處於中間的公司來說,交易是很差的。
6. banq:這取決於你對領域和上下文的劃分,每個子領域對應一個程式碼庫,當然,複雜核心子域是每個BC對應一個程式碼庫,這還和clean架構實現有關。
相關文章
- 一個微服務對應一個有界的上下文嗎?微服務
- 模式:每個服務一個資料庫模式資料庫
- 一個快速生成web和微服務程式碼工具Web微服務
- Soa: 一個輕量級的微服務庫微服務
- 每個產品經理都應該閱讀的16條名言 - reddit
- Spring Cloud之微服務之間相互呼叫、如何讓一個微服務呼叫另外一個微服務SpringCloud微服務
- 【轉載】微服務是個壞主意嗎?微服務
- Knative 實戰:一個微服務應用的部署微服務
- 每個程式設計師都應該知道的下一個程式語言——Kotlin程式設計師Kotlin
- 推薦一個基於Dapr的 Red Dog 的完整微服務應用程式微服務
- 如何通過一個SAPGUI螢幕反查這個螢幕對應的事務碼GUI
- Dubbo 入門系列之快速部署一個微服務應用微服務
- 手寫一個業務資料比對庫
- 一個域名可以對應多個IP嗎?如何透過DNS實現?DNS
- “一學就會,一做就廢”微服務的架構模式:一個服務一個資料庫模式微服務架構模式資料庫
- [譯] 用 Rust 寫一個微服務Rust微服務
- 編寫第一個 .NET 微服務微服務
- 任何時候都要對每個服務保持警惕
- 【工具使用】【Shell指令碼】【gitlab】下拉所有的倉庫以及每個倉庫的所有分支程式碼指令碼Gitlab
- iOS每個ViewController一個NavigationBariOSViewControllerNavigation
- 每個開發人員都應該知道的 10 個 GitHub 倉庫Github
- 每個程式設計師都應該參加一次 GDD程式設計師
- 微服務不過只是一個新名頭微服務
- .NET MAUI 6 正式 GA:一個程式碼庫,多個平臺UI
- 存在4年!Azure應用程式服務漏洞暴露了數百個原始碼庫原始碼
- 從五個方面入手,保障微服務應用安全微服務
- 周朝陽:2020年應對風險的十個建議!與每一個人息息相關
- 放棄JavaFX是一個錯誤? - RedditJava
- 【JAVA習題一】古典問題:有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一 對兔子,假如兔子都不死,問每個月的兔子總數為多少?Java
- 輸入一個ASCII碼,輸出對應的字元ASCII字元
- 從程式碼到部署微服務實戰(一)微服務
- 從0實現一個前端微服務(上)前端微服務
- 一個可以自我進化的微服務框架微服務框架
- Kite: 一個分散式微服務框架(翻譯)分散式微服務框架
- SAP 往一個角色裡增加事務程式碼
- 應對微服務呼叫時的雪崩效應微服務
- 每個Python新手都應該知道的程式設計技巧Python程式設計
- Spring-MultiValueMap(一個Key對應多個Value)Spring