软件架构的演进

前面说到软件架构的本质,这一篇来说一说软件架构的演进过程

众所周知,业务驱动技术的发展是亘古不变的道理,业务从简单到繁杂,一开始的时候,业务量少,业务复杂度低,采取的技术也相对简单。随着信息化的普及,更多的操作和各种交易放在了网络上,信息量增加次数频繁。随着业务的发展,技术对业务的扩展性和伸缩性的要求也越来越高。高并发,高可用,可伸缩,可扩展,够安全的软件架构一直是架构设计追求的目标。在不同业务发展采取合适的技术架构,用变化去应对变化是IT人追求的目标。

今天我们来看一下架构设计经历了哪些阶段?

1. 单体架构
web应用程序发展的早期,由于网站的流量比较少,只有一个简单的功能,将所有的功能部署到一台服务器就可以
比如说一个电商系统,里面包括用户管理,商品管理,订单管理等等模块,我们会把它做成一个web项目,然后部署到一台tomcat服务器上
在这里插入图片描述

特点:
1:所有功能集成在一个项目工程中
2:所有功能打在一个war包部署到服务器
3:通过部署应用集群和数据库集群来提高系统的性能

优点:
1:项目架构简单,前期开发成本低,周期短,小型项目首选
2:开发效率高,模块之间交互采用本地方法调用
3:容易部署,运维成本小,直接打包一个完整的包,拷贝到web容器的某个目录下即可运行
4:容易测试,IDE都是为开发单位应用设计的,容易测试—在本地就可以启动完整的系统。

缺点:
1:全部功能集成在一个工程中,对于大型项目不易开发,扩展及维护,
2:版本迭代速度逐渐变慢,修改一个地方将震哥哥应用全部编译,部署,启动,开发及周期过长
3:无法按需伸缩,通过集群的方式来实现水平扩展,无法针对某业务按需伸缩

  1. 垂直应用架构

随着访问量的增加,单一应用只能靠增加节点来应对,这时发现有些模块的访问量高,有些访问量不高。所谓的垂直应用架构,就是将原来的一个应用拆成互不相干的几个应用,以提升效率。

在这里插入图片描述

优点:

1:系统拆分实现了流量的分担,一定程度上解决了并发问题。
2:可以针对不同的模块进行优化和扩展
3:一个系统的问题不会影响到其他系统,单点容错率提高

缺点:

1:系统之间相互独立,不能进行通信
2:系统之间相互独立,会有重复的开发任务

  1. 分布式架构

针对单体架构的不足,为了使用大型项目的开发需求,许多公司将一个单体系统按业务垂直拆分为若干系统
系统之间通过网络交互来完成用户的业务处理,每个系统可分布式部署,这种架构称为分布式架构。
在这里插入图片描述

特点:
1、按业务垂直拆分成一个一个的单体系统,此架构也称为垂直架构。
2、系统与系统之间的存在数据冗余,耦合性较大,如上图中三个项目都存在客户信息。
3、系统之间的接口多为实现数据同步,如上图中三个项目要同步客户信息。

优点:
1、通过垂直拆分,每个子系统变成小型系统,功能简单,前期开发成本低,周期短。
2、每个子系统可按需伸缩。
3、每个子系统可采用不同的技术。

缺点:
1、子系统之间存在数据冗余、功能冗余,耦合性高。
2、按需伸缩粒度不够,对同一个子系统中的不同的业务无法实现,比如订单管理和用户管理。

  1. SOA架构

SOA是一种面向服务的架构,基于分布式架构,它将不同业务功能按服务进行拆分,
并通过这些服务之间定义良好的接口和协议联系起来。
在这里插入图片描述

优点:
1、将重复的功能抽取为服务,提高开发效率,提高系统的可重用性、可维护性。
2、可以针对不同服务的特点按需伸缩。
3、采用ESB减少系统中的接口耦合。

缺点:
1、系统与服务的界限模糊,会导致抽取的服务的粒度过大,系统与服务之间耦合性高。
2、虽然使用了ESB,但是服务的接口协议不固定,种类繁多,不利于系统维护。

  1. 微服务架构

基于SOA架构的思想,为了满足移动互联网对大型项目及多客户端的需求,
对服务层进行细粒度的拆分,所拆分的每个服务只完成某个特定的业务功能,
比如订单服务只实现订单相关的业务,用户服务实现用户管理相关的业务等
等,服务的粒度很小,所以称为微服务架构。
在这里插入图片描述

特点:
1、服务层按业务拆分为一个一个的微服务。
2、微服务的职责单一。
3、微服务之间采用RESTful、RPC等轻量级协议传输。
4、有利于采用前后端分离架构。

优点:
1、服务拆分粒度更细,有利于资源重复利用,提高开发效率。
2、可以更加精准的制定每个服务的优化方案,按需伸缩。
3、适用于互联网时代,产品迭代周期更短。

缺点:
1、开发的复杂性增加,因为一个业务流程需要多个微服务通过网络交互来完成。
2、微服务过多,服务治理成本高,不利于系统维护。

猜你喜欢

转载自blog.csdn.net/weixin_49543015/article/details/131596525
今日推荐