单体应用架构

当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是影响项目开发的关键。

系统架构演变 - 图1

优点:

  • 适用小型项目,开发维护简单
  • 部署在同一个 tomcat 上,后期维护简单

缺点:

  • 不适用大型项目,模块紧密耦合,容错率低
  • 不支持对某个模块水平扩展
  • 代码耦合,开发维护困难

垂直应用架构

当访问量逐渐增大,单一应用无法满足需求,此时为了应对更高的并发和业务需求,我们根据业务功能对系统进行拆分。

系统架构演变 - 图2

优点:

  • 系统拆分,支持水平扩展优化
  • 提高了单点容错率

缺点:

  • 系统之间无法相互调用
  • 存在代码重复

分布式架构

当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,产生了新的分布式系统架构,即将工程拆分成表现层和服务层两个部分。表现层只需要处理和页面的交互,业务逻辑调用服务层的服务来实现。

未命名绘图.png

优点:

  • 将基础服务进行了抽取,系统间相互调用,提高了代码复用和开发效率

缺点:

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

服务治理(SOA)

当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。
此时,用于资源调度和治理中心(SOA Service OrientedArchitecture,面向服务的架构)是关键。
SOA:Service-Oriented Architecture,面向服务架构

  • SOA 的核心是通过 ESB(企业消息总线)构建更可靠的软件系统
  • SOA 的代表工具:dubbo、dubbox、mule、cxf

未命名绘图.png

分布式架构的问题:

  • 服务越来越多,需要管理每个服务的地址
  • 调用关系错综复杂,难以理清依赖关系
  • 服务过多,服务状态难以管理,无法根据服务情况动态管理

服务治理的作用:

  • 服务注册中心,实现服务自动注册和发现,无需人为记录服务地址
  • 服务自动订阅,服务列表自动推送,服务调用透明化,无需关心依赖关系
  • 动态监控服务状态监控报告,人为控制服务状态

缺点:

  • 服务间会有依赖关系,一旦某个环节出错会影响较大
  • 服务关系复杂,运维、测试部署困难,不符合DevOps思想

微服务架构

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

微服务的特点:

  • 应用程序逻辑分为明确定义的职责范围的粒度组件,这些组件相互协调提供解决方案(粒度细、单一职责
  • 每一个组件都有一个小的职责领域,可以完全部署,也就是说一个服务可以跨越多个应用程序复用(独立部署和维护
  • 服务之间通信基于一些基本的原则,比如服务采用http+json这样的轻量级通信协议,在不同服务之间进行数据交换。这样不同服务可以使用不同的技术栈,互不影响(采用轻量级的通信协议 HTTP-Restful API 作为通信原则、松耦合
  • 拆分为微服务之后,服务的数量变多,因此需要有统一的服务治理平台,来对各个服务进行管理。(服务可治理,可管控

缺点:

  • 技术成本高

系统架构演变 - 图5