一 概述
随着软件行业的发展,软件架构的发展经过了从单体架构->垂直架构->SOA架构->微服务架构的演进。
二 单体架构
单体架构是Web应用程序发展早期的一种架构,这种架构的特点就是所有的功能模块都打成一个war包,并放在同一个web容器中,而且所有的功能模块使用同一个数据库。
单体架构的特点:
- 该架构下会将所有的功能集成在一个项目工程中。
- 所有的功能打成一个war包部署到服务器。
- 通过部署应用集群和数据库集群来提高系统的性能。
单体架构的优点:
- 项目架构简单,前期开发成本低,周期短,适合小型项目。
- 单体架构项目开发效率高,模块之间交互采用本地方法调用。
- 项目部署方便,运维成本小,直接打包成一个完整的包并拷贝到web容器的某个目录下即可。
- 容易测试,单体应用本地启动方便,从而测试功能方便。
单体架构的缺点:
- 全部功能集成在一个项目中,对于大型项目不易开发,扩展及维护。
- 版本迭代速度逐渐变慢,修改一个地方就要将整个应用全部编译,部署,启动,开发和测试周期长。
- 无法按需伸缩,通过集群的方式来实现水平扩展,无法针对某业务按需伸缩。
三 分布式架构
在Web应用程序的发展过程中,为了适应大型项目的开发需求,开发者需要将一个单体系统按业务垂直拆分为若干个系统,系统之间通过网络交互完成用户的业务处理,每个系统可分布式部署,所以就出现了分布式架构。
分布式架构的特点:
- 分布式架构按业务垂直拆分成一个一个的单体系统,被称为垂直架构。
- 分布式架构中,系统与系统之间存在数据冗余,耦合性较大,如上图三个项目都存在客户信息。
- 分布式架构中,系统之间的接口多为实现数据同步,如上图三个项目要求客户信息同步。
分布式架构的优点:
- 分布式架构将系统进行垂直拆分,每个子系统都变成小型系统,功能简单,前期开发成本低,周期短。
- 每个系统可按需伸缩,且可以按需采用不同的技术。
分布式架构的缺点:
- 分布式架构中存在数据冗余,功能冗余,耦合性高。
- 分布式架构垂直拆分的子系统可以按需伸缩,但是伸缩的粒度不够,对于一个子系统中的不同业务无法实现,比如订单管理和用户管理。
四 SOA架构
SOA架构是一种面向服务的架构,基于分布式系统,将不同业务功能按服务进行拆分,并通过这些服务之间定义良好的接口和协议联系起来。
SOA架构的特点:
- 基于SOA的架构思想,将重复公用的功能抽取为组件,以服务的方式为不同的系统提供服务。
- 不同系统与服务之间采用webservice,rpc等方式进行通信。
- ESB(Enterprise Service BUS)企业级服务总线作为不同系统与服务之间的桥梁。
SOA架构的优点:
- SOA架构将重复的功能抽取为服务,提高开发效率,提高系统的可重用性,可维护性。
- 可以针对不同服务的特点按需伸缩。
- 采用ESB减少系统中的接口耦合。
SOA架构的缺点:
- 系统和服务之间界限模糊,会导致抽取的服务的粒度过大,系统与服务之间耦合性高。
- 虽然使用ESB,但是服务的接口协议不固定,种类繁多,不利于系统维护。
五 微服务架构
基于SOA架构的思想,为了满足移动互联网对大型项目及多客户端的需求,对服务层进行细粒度的拆分,所拆分的每个服务只能完成某个特定的业务功能,如订单服务只能实现定单相关的业务,用户服务实现用户管理相关的业务等等,服务的粒度很小,所以称作微服务架构。
微服务架构的特点:
- 服务层按业务拆分为一个一个微服务,每个微服务的职责单一。
- 微服务之间采用RESTful,RPC等轻量级协议传输。
- 有利于采用前后端分离架构。
微服务架构的优点:
- 微服务架构中的服务拆分粒度更细,有利于资源的重复利用,提高开发效率。
- 可以更加精准的指定每个服务的优化方案,按需伸缩。
- 适用于互联网时代,产品迭代周期更短。
微服务架构缺点:
- 由于每个业务流程需要多个微服务通过网络交互来完成,所以微服务架构系统开发的复杂度增加。
- 微服务过多,服务治理的成本高,不利于系统的维护。