最近经常看到
Monorepo
和MicroService
被提及这里做一下总结
Monorepo: 是指单一代码库
在版本控制系统的单个代码库里包含了多个项目之间的代码,项目之间可能是相关的,但通常在逻辑上是独立的,可以有单个或者多个不同的团队维护。
那既然有 单一代码库与之对应的就是多代码库
即:MultiRepos
MicroService: 微服务架构
把一个大型的项目服务拆分成多个独立的单元,单元有独立的功能和模块承担不同的功能,相互之间可以通信建立连接
Monorepo Link
Monorepo 不是一个新的东西,在软件开发行业它已经存在很久了,许多开源项目已经成功使用了单一代码库
Larave:一个用于Web开发的PHP框架。
Babel:一个用户Web开发的流行的JavaScript编译器,其单一代码库包含了完整的项目及其所有插件。
React、Ember、Meteor 等前端框架都使用单一代码库。
可见性(Visibility):每个人都可以看到其他人的代码,这样可以带来更好的协作和跨团队贡献——不同团队的开发人员都可以修复代码中的bug,而你甚至都不知道这个bug的存在。
更简单的依赖关系管理(Simpler dependency management):共享依赖关系很简单,因为所有模块都托管在同一个存储库中,因此都不需要包管理器。
一致性(Consistency):当你把所有代码库放在一个地方时,执行代码质量标准和统一的风格会更容易。
共享时间线(Shared timeline):API或共享库的变更会立即被暴露出来,迫使不同团队提前沟通合作,每个人都得努力跟上变化。
原子提交(Atomic commits):原子提交使大规模重构更容易,开发人员可以在一次提交中更新多个包或项目。
隐式CI(Implicit CI):因为所有代码已经统一维护在一个地方,因此可以保证持续集成。
统一的CI/CD(Unified CI/CD):可以为代码库中的每个项目使用相同的CI/CD部署流程。
统一的构建流程(Unified build process):代码库中的每个应用程序可以共享一致的构建流程。
lerna
/pnpm
管理说着了这么多Monorepo 的优势那它有什么劣势呢?
微服务是一种软件架构:通过微服务,可将大型应用分解成多个独立的组件,其中每个组件都有各自的责任领域。
当然于是对应的有 单体架构(monolithic software)
所有功能耦合在一起,互相影响,最终难以管理。
哪怕只修改一行代码,整个软件就要重新构建和部署,成本非常高。
因为软件做成了一个整体,不可能每个功能单独开发和测试,只能整体开发和测试,导致必须采用瀑布式开发模型。
为了解决这些问题从而出现了微服务,来对项目解耦和模块划分
微服务通过把一个大型项目按模块和功能划分成多个 “单元项目”,单元项目可独立部署、开发、测试,他可以运行在不同机器上面相互连接从而组成一个完整的网络应用
每种服务功能单一,相当于一个小型软件,便于开发和测试。
各个服务独立运行,简化了架构,提高了可靠性。
鼓励和支持代码重用,同一个服务可以用于多种目的。
不同服务可以单独开发和部署,便于升级。
扩展性好,可以容易地加机器、加功能,承受高负载。
不容易出现单点故障。即使一个服务失败了,不会影响到其他服务。
但是这样的架构也会有一些问题,例如:例如2个项目在一台服务器上依赖不同版本的模块。在没必要多加一台服务器的情况下。
Docker 的出现解决了整个问题。它让程序运行在容器中,每个容器可以分别设定运行环境,并且只占用很少的系统资源。这样就不需要多台服务器了,最简单的情况下,本机运行多个容器,只用一台服务器就实现了面向服务架构,这在以前是做不到的。这种实现方式就叫做微服务。
有着类似于微服务的设计理念,它将微服务的理念应用于浏览器端,即将 Web 应用由单一的单体应用转变为多个小型前端应用聚合为一的应用。各个前端应用还可以独立运行、独立开发、独立部署。
微前端架构的优势:
其实早在微前端这个概念出来之间就有一些类似的解决方案 —— iframe
从而衍生出来一些微前端框架
Mooa:基于Angular的微前端服务框架
Single-Spa:最早的微前端框架,兼容多种前端技术栈。
Qiankun:基于Single-Spa,阿里系开源微前端框架。
Icestark:阿里飞冰微前端框架,兼容多种前端技术栈。
Ara Framework:由服务端渲染延伸出的微前端框架。
Monorepo 和 MicroService 的关系 ?
理论上 Monorepo 和 MicroService 本质上其实没什么关系,但是它们又有一些关系
Monorepo 来集成多个项目,MicroService 把一个项目拆成多个单元项目
??? 哈哈,这不是自相矛盾嘛,其实不然 它们不是一码事。
Monorepo 是利开发阶段,MicroService是项目生产时。
并且 Monorepo 和 MicroService 可以共存相辅相成。
微服务把项目拆分成多个单元项目从而划分了项目职责;让项目更加清晰单一,Monorepo 通过对多个单元项目的集中管理,让项目保持一致性,清晰的依赖关系等
本文源于 转载请注明出处