前言
简单说一下单体架构、分布式架构、SOA 架构之间的优劣
正文
什么是单体架构?
单体架构在早期的 web 应用中就是我们最常使用的三层模型,视图层+业务逻辑层+数据访问层,常见框架包含 SSH 和 SSM,适用于小型的项目。
虽然在软件设计中划分了经典的 3 层模型,但是对业务场景没有划分,就是将所有的业务场景的视图层、业务逻辑层和数据访问层放在一个工程中,最终经过编译、打包,部署在一台服务器上。
优点:
1.开发简单:所有功能都在同一个项目中
2.容易部署:只需要打成一个 Jar / War 包就可以,不存在分布式部署
3.测试简便:没有复杂的接口调用,服务调用
缺点:
1.可维护性差:前期开发简单,后期维护困难,多个模块混合在一起,后期越改出错率越高,业务迭代简直是噩梦级别的
2.可靠性极差:一个模块报错,整个项目挂掉
3.可扩展性差:服务之间的紧密度、相依性过高
总而言之前期开发容易,后期维护仿佛碰瓷一样,他碰你没事,你碰他一下接着倒地不起。。
什么是分布式架构(微服务)?
分布式架构用白话来说,可以理解为程序模块化,将多个单体分层架构系统,以进程通讯技术整合到一起的一种架构风格。
相比单体架构的高耦合,分布式架构的思想采用的是高内聚,低耦合。
优点:
1.可维护性高:只需要维护当前模块内容,一个微服务模块都是一个单独的业务功能,相对而言极大的减少了代码量和业务逻辑
2.可靠性极高:某一模块异常不会影响整个程序的运行,例如登录模块异常但并不会影响商品模块
3.可扩展性高:可根据需求,对单一模块进行扩展
缺点:
1.部署难度高:对运维的要求较高
2.测试难度高:测试微服务架构的应用绝对比单体应用难很多,深有体会,集成测试过程是一场噩梦
3.增加了资源使用:每一个微服务应都需要拥有他们自己的运行容器,相对于单体架构而言,则需要更多的CPU和内存
相对于单体架构而言,构建一个分布式架构简直复杂的一批!不过分布式架构的适用项目是用来开发复杂应用。你要用单体架构来开发复杂的应用相当于小刀磨龟壳,智商欠费,用分布式架构来开发简单应用,无疑杀鸡用牛刀,还特喵贼难用
什么是 SOA 架构?
SOA 全称为 Service-Oriented Architecture 面向服务架构,当业务发展到一定层度后,需要对服务进行解耦,也就是把一整个项目模块拆分为不同的模块,服务层、视图层。服务层中包含业务逻辑,只需要对外提供服务,视图层只需要处理和页面的交互,业务逻辑都是调用服务层的服务来实现。
优点:
1.将重复的功能抽取为服务,提高开发效率,提高系统的可重用性、可维护性
2.可以针对不同服务的特点按需伸缩
3.采用 ESB 减少系统中的接口耦合
缺点:
1.系统与服务的界限模糊,会导致抽取的服务的粒度过大,系统与服务之间耦合性高。
2.虽然使用了ESB,但是服务的接口协议不固定,种类繁多,不利于系统维护。