首页 > 其他分享 >每个微服务对应一个代码库吗?

每个微服务对应一个代码库吗?

时间:2023-08-09 17:58:04浏览次数:44  
标签:服务 每个 一个 代码 对应 repo monorepo

你是把每个微服务放在它自己的 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架构实现有关。

标签:服务,每个,一个,代码,对应,repo,monorepo
From: https://www.cnblogs.com/chenxiaomeng/p/17617539.html

相关文章

  • prompt gating代码探索
    importtorchdefpromptGating(gating,adding,x):'''gating:(num_prefix,dim)adding:(num_prefix,dim)x:(seq_length,batch_size,dim)'''ifgatingisnotNone:gating=gating.unsque......
  • 使用C#配合modbus协议的16进制代码生成crc16校验码的计算方法
    前言在网上也是查看了很多关于crc16校验的文章,但是好像都是对于有基础的人看的,我当时拿起直接使用,发现行不通,这对于零基础的不是很友好,所以决定贡献一篇,哈哈哈哈~~~publicuintCalcCRC16(stringhexCommand){byte[]pBuf=HexStringToByteArray(......
  • 数字时代的生产力工具:低代码开发平台
    产业新周期背景下,最终用户的需求在快速变化并充满不确定性,企业所面临的市场竞争关系正从企业间转向产业链的全面竞争,传统企业数字化转向也逐渐由内向外,转向实现全产业链的数字化能力构建与连接。前瞻的传统企业正在加速推进数字化转型,试图通过借助新一代生产力工具,支撑创新业务快速......
  • 200多个js技巧代码
    1.文本框焦点问题onBlur:当失去输入焦点后产生该事件onFocus:当输入获得焦点后,产生该文件Onchange:当文字值改变时,产生该事件Onselect:当文字加亮后,产生该文件<inputtype="text"value="mm"οnfοcus="if(value=='mm){value=''}"οnblur="if(value==''){va......
  • Java源代码是如何编译,加载到内存中的?
    1.前言相信许多开发同学看过《深入理解java虚拟机》,也阅读过java虚拟机规范,书籍和文档给人的感觉不够直观,本文从一个简单的例子来看看jvm是如何工作的吧。本文所有操作均在mac上进行。2.示例代码示例代码采用最常见的双重检索单例模式:packageinterview.desginpattern.single......
  • Wordpress:如何放置谷歌GTM代码?
    使用Wordpress建站需要应用谷歌的GTM代码进行监测用户行为,那么如何安装GTM代码呢?分为两种,一.使用插件进行安装二.直接编辑代码Header模块进行安装。先看看谷歌GTM的安装要求:注意:1.script部分需要安装在head标签之内;2.noscript部分需要安装在body开始标签之后。 方法一......
  • Jenkins集成sonar代码静态扫描
    sonar简介Sonar(SonarQube)是一个开源平台,用于管理源代码的质量。Sonar不只是一个质量数据报告工具,更是代码质量管理平台。支持的语言包括:Java、PHP、C#、C、Cobol、PL/SQL、Flex等。官网:https://www.sonarqube.orgJenkins插件安装Jenkins集成sonar需要安装插件:SonarQubeScan......
  • 【代码设计】链表结构解决多流程校验
    目的 使用合理的代码设计,解决业务场景的中的实际问题。背景介绍 在实际的业务场景中,用户的一个操作行为,是否允许真正被执行,往往会涉及到多流程的校验,一旦有条件不满足将会被中止。以下面流程图为例:用户点击了打赏按钮,会进行是否有网络检查,没有网络,会有网络连接弹框,等待用户连接......
  • .NET 托管代码与非托管代码
    目录什么是“托管代码”?什么是“非托管代码”?非托管类型?相关参考介绍.NET中的托管代码与非托管代码。......
  • 遇到问题--pycharm为什么py文件代码提示都没了,被当成text文件
    遇到问题pycharm为什么py文件代码提示都没了原因创建该文件时选错text文件类型,被当成text文件了删除后重新新建成py文件也没用因为text有一个名字队列,只要加入过的都会被识别成text解决方法Pycharm—>Preferences—>Editor—>FileTypes—>选到Text在RegisteredPatterns中找到......