系统架构的演进过程

903 阅读5分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

系统架构的演变

随着互联网的发展,网站应用的规模也在不断的扩大,进而导致系统架构也在不断的进行变化。从互联网早期到现在,系统架构大体经历了下面几个过程:

单体应用架构 -> 垂直应用架构 -> 分布式架构 -> SOA架构 -> 微服务架构

还有一些别的架构Service Mesh(服务网格化)

单体应用架构

互联网早期,一般的网站应用流量较小,只需要一个应用,将所有功能代码都部署在一起就可以,在行业内个可以减少开发、部署和维护的成本。该架构模式没有对我们业务逻辑代码实现拆分,所有的代码都写入到同一个工程中里面,适合于小公司开发团队或者个人开发。

比如说一个电商系统,里面会包含很多用户管理、商品管理、订单管理、物流管理等等很多模块,我们会把它们做成一个web项目,然后部署到一台服务器上。

image.png

优点

  • 项目架构简单
  • 项目开发成本低
  • 项目都部署在单节点,维护方便

缺点

  • 全部功能模块集成在一个工程中,大型项目不易开发和维护
  • 项目模块之间紧密耦合,单点容错率低
  • 无法针对不同的模块惊醒针对性优化和水平扩展

垂直应用架构

随着用户访问量的逐渐增大,单体应用架构只能通过增加节点来应对,但是我们发现并不是所有的模块都会有叫法的访问呢量,可能是其中的一个或多个模块访问变多,我们增加节点我们会发现有一部分资源浪费。

这时候单体应用的架构就不能够满足我们的需求,我们需要将系统里面的模块拆分开来,这样对于需要水平扩展的节点,是比较友好的。

比如,双11来临之际,我的订单模块用户访问量变大,我就只需要增加订单模块的的节点进行水平扩展就可以了。

image.png

优点

  • 系统模块的拆分实现了流量分担,解决了并发问题,而且可以针对不同模块进行优化和水平扩展
  • 某个系统模块出现的问题不会影响到其他系统模块,提高容错率

缺点

  • 系统模块之间相互独立,无法进行相互调用
  • 系统模块之间相互独立,会有重复的开发任务

分布式架构

分布式架构也是基于垂直应用架构演变而来,当垂直应用越来越多,重复的业务代码也就会越来越多。这时候,我们就思考可不可以将重复的代码抽取出来,做成统一的业务层作为独立的服务,然后由前端控制层调用不同的业务层服务呢?

这就产生了新的分布式系统架构。它将把工程拆分成表现层和服务层两个部分,服务层中包含业务逻辑。表现层只需要处理和页面的交互,业务逻辑都是调用服务层的服务来实现。

image.png

业务层和服务层都可以横向扩展,扩展的过程中会引入一些问题,分布式缓存,分布式锁、分布式Session一些分布式问题,但是目前这些问题都已经有成熟的解决方案。

优点

  • 抽取公共的功能为服务层,提高代码复用性

缺点

  • 系统间耦合度变高,调用关系错综复杂,难以维护

SOA架构

在分布式架构下,当服务越来越多,容量的评估,小服务资源浪费的问题逐渐显现,此时需要增加一个调度中心对集群镜像实时管理。此时,用户资源调度和治理中心(SOA Service-Oriented Architecture)

中间的这层服务治理,现在主流用dubbo,但是早期是有人用WebService或者是ESB企业服务总线,底层通讯协议SOAP协议(Http+XML)实现传输。

image.png

优点

  • 使用服务治理中心,帮我们维护复杂的调用关系 缺点
  • 服务有依赖性,可能会因为一个服务的问题,导致其它的服务不可调用的问题(服务雪崩)。
  • 服务关心复杂,运维、测试部署困难

微服务架构

微服务架构模式是从SOA架构模式演变过来, 比SOA架构模式粒度更加精细,目的是提高效率,每个服务与服务之间互不影响,微服务架构中每个服务必须独立部署、互不影响,微服务架构模式体现轻巧、轻量级、适合于互联网公司开发模式。

微服务架构倡导应用程序设计程多个独立、可配置、可运行和可微服务的子服务。服务与服务通讯协议采用Http协议,使用restful风格API形式来进行通讯,数据交换格式轻量级json格式通讯,整个传输过程中,采用二进制,所以http协议可以跨语言平台,并且可以和其他不同的语言进行相互的通讯,所以很多开放平台都采用http协议接口。

image.png

优点

  • 服务原子化拆分,独立打包、部署和升级,保证每个微服务清晰的任务划分,利于扩展
  • 微服务之间采用Restful等轻量级http协议相互调用

缺点

  • 分布式系统开发的技术成本高(容错、分布式事务等)