单体应用架构
当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是影响项目开发的关键。
优点:
- 适用小型项目,开发维护简单
- 部署在同一个 tomcat 上,后期维护简单
缺点:
- 不适用大型项目,模块紧密耦合,容错率低
- 不支持对某个模块水平扩展
- 代码耦合,开发维护困难
垂直应用架构
当访问量逐渐增大,单一应用无法满足需求,此时为了应对更高的并发和业务需求,我们根据业务功能对系统进行拆分。
优点:
- 系统拆分,支持水平扩展优化
- 提高了单点容错率
缺点:
- 系统之间无法相互调用
- 存在代码重复
分布式架构
当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,产生了新的分布式系统架构,即将工程拆分成表现层和服务层两个部分。表现层只需要处理和页面的交互,业务逻辑调用服务层的服务来实现。
优点:
- 将基础服务进行了抽取,系统间相互调用,提高了代码复用和开发效率
缺点:
- 系统间耦合度变高,调用关系错综复杂,难以维护
服务治理(SOA)
当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。
此时,用于资源调度和治理中心(SOA Service OrientedArchitecture,面向服务的架构)是关键。
SOA:Service-Oriented Architecture,面向服务架构
- SOA 的核心是通过 ESB(企业消息总线)构建更可靠的软件系统
- SOA 的代表工具:dubbo、dubbox、mule、cxf
分布式架构的问题:
- 服务越来越多,需要管理每个服务的地址
- 调用关系错综复杂,难以理清依赖关系
- 服务过多,服务状态难以管理,无法根据服务情况动态管理
服务治理的作用:
- 服务注册中心,实现服务自动注册和发现,无需人为记录服务地址
- 服务自动订阅,服务列表自动推送,服务调用透明化,无需关心依赖关系
- 动态监控服务状态监控报告,人为控制服务状态
缺点:
- 服务间会有依赖关系,一旦某个环节出错会影响较大
- 服务关系复杂,运维、测试部署困难,不符合DevOps思想
微服务架构
微服务架构模式是从SOA架构模式演变过来, 比SOA架构模式粒度更加精细,让专业的人去做专业的事情(专注),目的是提高效率,每个服务与服务之间互不影响,微服务架构中每个服务必须独立部署、互不影响,微服务架构模式体现轻巧、轻量级、适合于互联网公司开发模式。
微服务的特点:
- 应用程序逻辑分为明确定义的职责范围的粒度组件,这些组件相互协调提供解决方案(粒度细、单一职责)
- 每一个组件都有一个小的职责领域,可以完全部署,也就是说一个服务可以跨越多个应用程序复用(独立部署和维护)
- 服务之间通信基于一些基本的原则,比如服务采用http+json这样的轻量级通信协议,在不同服务之间进行数据交换。这样不同服务可以使用不同的技术栈,互不影响(采用轻量级的通信协议 HTTP-Restful API 作为通信原则、松耦合)
- 拆分为微服务之后,服务的数量变多,因此需要有统一的服务治理平台,来对各个服务进行管理。(服务可治理,可管控)
缺点:
- 技术成本高