项目架构的演进

一 概述

随着软件行业的发展,软件架构的发展经过了从单体架构->垂直架构->SOA架构->微服务架构的演进。

二 单体架构

单体架构是Web应用程序发展早期的一种架构,这种架构的特点就是所有的功能模块都打成一个war包,并放在同一个web容器中,而且所有的功能模块使用同一个数据库。

              

单体架构的特点:

  1. 该架构下会将所有的功能集成在一个项目工程中。
  2. 所有的功能打成一个war包部署到服务器。
  3. 通过部署应用集群和数据库集群来提高系统的性能。

单体架构的优点:

  1. 项目架构简单,前期开发成本低,周期短,适合小型项目。
  2. 单体架构项目开发效率高,模块之间交互采用本地方法调用。
  3. 项目部署方便,运维成本小,直接打包成一个完整的包并拷贝到web容器的某个目录下即可。
  4. 容易测试,单体应用本地启动方便,从而测试功能方便。

单体架构的缺点:

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

三 分布式架构

在Web应用程序的发展过程中,为了适应大型项目的开发需求,开发者需要将一个单体系统按业务垂直拆分为若干个系统,系统之间通过网络交互完成用户的业务处理,每个系统可分布式部署,所以就出现了分布式架构。

分布式架构的特点:

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

分布式架构的优点:

  1. 分布式架构将系统进行垂直拆分,每个子系统都变成小型系统,功能简单,前期开发成本低,周期短。
  2. 每个系统可按需伸缩,且可以按需采用不同的技术。

分布式架构的缺点:

  1. 分布式架构中存在数据冗余,功能冗余,耦合性高。
  2. 分布式架构垂直拆分的子系统可以按需伸缩,但是伸缩的粒度不够,对于一个子系统中的不同业务无法实现,比如订单管理和用户管理。

四 SOA架构

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

SOA架构的特点:

  1. 基于SOA的架构思想,将重复公用的功能抽取为组件,以服务的方式为不同的系统提供服务。
  2. 不同系统与服务之间采用webservice,rpc等方式进行通信。
  3. ESB(Enterprise Service BUS)企业级服务总线作为不同系统与服务之间的桥梁。

SOA架构的优点:

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

SOA架构的缺点:

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

五 微服务架构

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

微服务架构的特点:

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

微服务架构的优点:

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

微服务架构缺点:

  1. 由于每个业务流程需要多个微服务通过网络交互来完成,所以微服务架构系统开发的复杂度增加。
  2. 微服务过多,服务治理的成本高,不利于系统的维护。