架构发展历史经历了这样一个过程:单体架构 -> SOA 面向服务架构 -> 微服务架构。
单体架构
在程序规模不大,开发人员很少的时候,单体架构有如下优点:
- 开发简单
- 单体应用的结构,所有代码都集中在一起,开发者不需要在多个应用之间来回跳转来寻找其中的调用逻辑。
- 测试简单
- 所有代码都在一个应用里,测试人员可以很方便的做到端到端的测试。
- 部署简单
- 因为一个应用就是产品功能的全集,所以在部署的时候,只需要部署一款应用即可。即使是集群部署,也不会增加多少复杂度:只需要将应用部署多份即可。
- 开发迅速
- 上面的各种简单,带来的就是软件功能可以快速实现。很多时候,实现需求的速度是项目成功与否的决定性因素。
单体架构存在的问题
WEB界面和各个业务模块最终打包在一个war包中,该war包包含了整个系统所有的业务功能,这样的应用系统称为单体应用。
存在的问题:
- 系统资源浪费
- 模块 A 与模块 B 都需要消耗10%的系统资源,而模块 C 却要占用 80% 的系统资源,运行一段时间后,模块C 就成为整个系统的瓶颈。从而降低系统的性能。
- 部署效率低
- 修改任意一个模块,哪怕是一行代码,都需要重新部署整个应用,部署效率较低。
- 应用膨胀
- 所有代码都在一个应用里,导致应用的代码量迅速上升,对于开发者来说,经常需要在海量的代码里找到自己需要维护的哪一行。对于 IDE 来说,一个应用内大量代码也会严重拖慢其运行效率。
- 团队合作冲突
- 这种冲突会体现在多个方面:
- 开发阶段,很容易由于修改相同的代码导致代码冲突。
- 部署阶段,又会因为“运行环境里跑的是谁的分支”而造成新的冲突。
- 所有的这些冲突将会严重影响到团队的合作效率。
- 这种冲突会体现在多个方面:
运行效率&稳定性
应用该怎么拆分?
- 拆分后又会有哪些新的问题产生?
- 如何解决这些新的问题?
SOA 架构来帮我们解决。