服务架构之演变与进化

为何架构演进

  • 业务功能越来越多,越来越复杂
  • 物联网时代数据量越来越大
  • 请求量越来越大
  • 更高的用户体验要求
  • 业务快速迭代
  • 持续交付的能力

架构如何演进

  1. 单体架构(Monoliths)
  2. 水平分层架构(Horizontal layered)
  3. 面向服务架构 (SOA)(垂直分层架构)
  4. 微服务架构(MicroServices)
  5. 服务网格架构(Service Mesh)

体系架构设计原则

  • 服务封装
  • 服务松耦合(Loosely coupled) - 服务之间的关系最小化,只是互相知道。
  • 服务契约 - 服务按照服务描述文档所定义的服务契约行事。
  • 服务抽象 - 除了服务契约中所描述的内容,服务将对外部隐藏逻辑。
  • 服务的重用性 - 将逻辑分布在不同的服务中,以提高服务的重用性。
  • 服务的可组合性 - 一组服务可以协调工作并组合起来形成一个组合服务。
  • 服务自治 – 服务对所封装的逻辑具有控制权
  • 服务无状态 – 服务将一个活动所需保存的信息最小化。
  • 服务的可被发现性 – 服务需要对外部提供描述信息,这样可以通过现有的发现机制发现并访问这些服务。

架构模式

  • 分层
  • 冗余
  • 分隔
  • 异步
  • 分布式
  • 安全
  • 自动化
  • 集群
  • 缓存

单体架构

架构图

单体架构

适用场景

  • 业务场景简单
  • 功能不复杂
  • 开发人员较少
  • 创业公司初期
  • 性能要求极其苛刻

定义

  • 一个进程完成业务
  • 打包成war包
  • 依赖Servlet容器

优点

  • 避免多次网络交互
  • 请求响应延迟低
  • 部署和运维成本低

缺点

  • 系统耦合性高
  • 可扩展性差
  • 技术选型单一
  • 架构粒度过粗

水平划分架构

架构图

同步架构

水平划分之同步架构

异步架构

水平划分之异步架构

解决问题

  • 高耦合问题
  • 低扩展问题

定义

  • 一个进程或多个进程
  • 分层思想明确
  • MVC架构(Model层、View层、Control层)

网关层

  • 请求鉴权
  • 数据完整性检查
  • 协议转换
  • 路由转发
  • 服务治理(限流,熔断等)

业务逻辑层

  • 业务逻辑判断和处理

数据访问层

  • CRUD(增删改查)
  • ORM(对象关系映射 如MyBatis)
  • Sharding(分库分表)
  • 屏蔽底层存储差异性

异步架构优点

  • 提高系统吞吐量

异步架构缺点

  • 数据处理延迟

异步架构适合的场景

  • 适合高并发场景
  • 对数据一致性要求不高

水平划分的优点

  • 低耦合
  • 可扩展

水平划分的缺点

  • 请求路径变长
  • 响应延迟变高
  • 定位问题变得复杂化
  • 运维成本增加

面向服务架构

架构图

面向服务架构

SOA的设计原则

  • 可重复使用, 粒度, 模块性, 可组合型, 对象化原件, 构件化以及具交互操作性
  • 匹配开放标准(通用的或行业的)
  • 服务的识别和分类,提供和发布,监控和跟踪。

优点

  • 简单化系统的开发
  • 面向企业商业流程
  • 更好的适应性和扩展性
  • 互用性
  • 对系统的升级,分布,和维护有个更多的优化
  • 简化了提供,寻找和使用服务的过程
  • 通过共同资源的利用,减少了开支

缺点

  • 每一个服务依然是单体架构
  • 对ESB严重依赖
  • 减低了系统的性能
  • 在向标准化过度的转换过程,增加了简介费用
  • 很多没有太多意义的文件型信息
  • 对商业流程的计划要求甚高

微服务架构

架构图

微服务架构图

定义

  • 小型服务套件
  • 在自己的进程中运行
  • 围绕业务能力
  • 独立展开
  • 集中管理
  • 面向业务架构
  • 水平分层架构和面向服务架构的整合

目的

  • 项目快速迭代
  • 项目持续交付

服务组件

  • 服务注册中心
  • 服务调用方式
  • 服务网关
  • 断路器
  • 分布式链路监控
  • 分布式配置
  • 分布式锁
  • 分布式消息
  • 消息队列
  • 服务跟踪
  • 消息总线
  • 集群选主
  • 数据流
  • 批量任务
  • 服务发现
  • 服务通讯
  • 负载均衡
  • 服务熔断
  • 请求超时重试
  • 服务容错
  • 异步处理
  • 安全控制
  • 命令行工具

优点

  • 逻辑清晰
  • 简化部署
  • 可扩展
  • 灵活组合
  • 技术异构
  • 高可靠

缺点

  • 复杂度高
  • 运维复杂
  • 影响性能

服务网格架构

定义

服务网格(Service Mesh)这个术语通常用于描述构成这些应用程序的微服务网络以及应用之间的交互。也就是解决系统架构微服务化后的服务间通信和治理问题。

  • 是一个基础设施
  • 轻量级网络代理,应用程序间通讯的中间层
  • 应用程序无感知,对应用程序透明无侵入
  • 解耦应用程序的重试/超时、监控、追踪和服务发现等控制层面的东西

功能

  • 流量管理
  • 安全
  • 可观察性
  • 平台支持
  • 集成和定制
  • 健康检查
  • 负载均衡
  • 追踪
  • 访问日志
  • 熔断
  • 重试策略
  • 超时配置
  • 限速
  • 流量迁移
  • 通过发现服务来动态调整配置(XDS)

参考文献

互联网架构究竟如何演进?
面向服务的体系结构
Dubbo官方文档
论SOA架构的几种主要开发方式
互联网架构演进之路
软件架构入门
亚马逊如何变成 SOA(面向服务的架构)?
架构设计漫步:从单体架构、SOA到微服务
微服务与SOA架构
为什么要选择Service Mesh?
Istio 官方文档
Service Mesh 社区
servicemesher
jimmysong.io
Service Mesh 及其主流开源实现解析
conduit.io
istio.io
蚂蚁金服大规模微服务架构下的Service Mesh探索之路
模式: 微服务架构
模式: 单体架构

今日诗词

作者信息