骚年快答 | 为何微服务项目都使用单体代码仓库?

骚年快答 | 为何微服务项目都使用单体代码仓库?

【答疑解惑 作者  / Edison Zhou

这是 恰童鞋骚年 的第 265 篇原创内容

之前在学习微软的示例eShopOnContainers时发现它使用的是单体代码仓库库,之后又发现大家在进行微服务项目开发时也都在使用单体代码仓库。问题来了,为啥要微服务项目都要使用单体仓库(所有微服务都在一个代码仓库)呢?

1 微服务应用的代码仓库组织

我们都知道,微服务应用相对于单体应用来说,最大的好处就是可以独立开发、测试部署和扩展。单体应用一般会采用单体代码仓库,但是微服务应用的代码仓库应该如何组织呢?是每个微服务一个仓库吗?

其实不一定,针对微服务应用的代码仓库组织,业界有两种主要的实践:

(1) 多体仓库(Multi-Repo) 即每个 微服务 对应各自 代码仓

(2) 单体仓库(Mono-Repo) :即所有微服务对应一个代码仓库

下图展示了这两种实践的示意(引用自波波老师《Spring Boot与K8s原生应用开发》课程):

骚年快答 | 为何微服务项目都使用单体代码仓库?

单体应用仓库 vs 微服务多体仓库 vs 微服务单体仓库

2 多体仓库与单体仓库的比较

多体仓库的优点显而易见,职责单一,代码量和复杂性受控,支持多个团队独立开发,边界清晰。单个微服务也易于独立开发测试和扩展,不需要集中式管理。差不多,这些就是微服务带来的好处。

但是,多体仓库有其自己的缺点:

一来项目代码不容易形成统一规范,每个团队各自为政,随意引入依赖,Code Review无法集中开展,代码风格也会各不相同。

二来项目整体集成和部署会比较麻烦,虽然单个项目集成容易,但是整体进行集成就会收到仓库分散带来的困难。

三来也是我个人认为对于中小技术团队来说最为重要的,开发人员会缺乏对于整体项目的认知,只关心自己负责的那一小块,从而缺失对整体架构和业务目标整体性的理解。

最后,项目间可能会存在较多的冗余代码,每个微服务一个仓库会造成每个团队不断地重复造轮子,而不是去优先重用其他团队开发的已有的项目代码。

对于多体仓库的缺点,单体仓库解决了一些,这也就形成了单体仓库的好处:

一来易于规范化项目代码,所有微服务都在一个仓库中,可以规范代码风格,便于集中组织Code Review。

二来易于整体集成和部署,所有微服务都在一个仓库中,配合DevOps工具可以方便地实现一键构建和部署,实现持续集成。

三来易于理解项目整体,开发人员可以将整个项目clone到本地IDE中进行Code Review也可以直接本地部署和调试从而易于掌握整体技术架构和应用目标。

最后易于重用已有轮子,开发人员在开发时容易发现和重用已有的代码而不是去重复造轮子,当然也利于对现有的代码进行重构。

当然,万物都是有利有弊,单体仓库也不例外。随着业务的快速发展,单体仓库中的项目代码会变得越来越庞大,复杂性也会随之上升。因此,对于企业来说,需要有专门的集成团队和自动化的集成工具来支持,才能保证单体仓库的持久应用。

3 业界都有哪些企业谁在用单体仓库?

在业界使用单体仓库组织微服务项目的企业不少,例如GoogleFacebookTwitter和Salesforce以及Microsoft等互联网巨头,虽然他们内部的项目庞大,开发人员众多,但是他们还是选择了使用单体仓库。

骚年快答 | 为何微服务项目都使用单体代码仓库?

谁在用MonoRepo

骚年快答 | 为何微服务项目都使用单体代码仓库?

eShopOnContainers项目代码结构

刚刚我们也说道,这些巨头企业都是有专门的集成团队和成熟的自动化集成工具来为开发团队进行支持,使得开发团队可以一键构建和部署。

画外音:对小企业来说,可能上微服务架构都得慎重?一百个读者,有一百个哈姆雷特,各有各的看法。

4 小结

对于 中小企业/初创企业/进行数字化转型的传统行业企业 来说,如果要上微服务架构,一般早期微服务的数量不会特别多,采用单体仓库会比较合适。

从本文也可以了解到, 微服务架构并不是倡导所有的东西都要独立自治 ,像代码仓库就可以集中管理,而且 这也是业界的最佳实践之一

最后,如果你在使用.NET Core开发微服务或者计划使用.NET Core开发微服务,都可以先阅读一下这本《 .NET微服务:容器化应用架构指南 》,目前已更新到ASP.NET Core 3.1版本(LTS版本)。

骚年快答 | 为何微服务项目都使用单体代码仓库?

画外音:欲练此功,必看此书。点击“阅读原文”,即可学习此书。

往期 精彩 推文

技术中台与业务中台有啥联系?

微服务架构中的BFF到底是个啥?

骚年快答 | 为何微服务项目都使用单体代码仓库?

点个“ 在看 ” 就是对我最大的支持

骚年快答 | 为何微服务项目都使用单体代码仓库?

:point_down: 点击 进入架构指南

原文 

http://mp.weixin.qq.com/s?__biz=MzA4NzQzNTg4Ng==&mid=2651731854&idx=1&sn=b07c9484676fd631bd52ea76caa8f1af

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » 骚年快答 | 为何微服务项目都使用单体代码仓库?

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址