架构初探 | 青训营笔记

139 阅读6分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第6篇笔记

老师上课做例子的图很有趣,所以在这里也一起贴出来帮助理解

1 什么是架构

架构是有关软件整体结构与组件的抽象描述,用于指导软件系统各个方面的设计

实现一个软件有多个方法,架构在方法选择上起着重要作用

单机

单机就是把所有的功能都实现在一个进程里,并部署在一台机器上。

  • 优点:显而易见,就是简单 除此以外,好像就没有优点……

单体、垂直应用|垂直切分

  • 单体架构: 分布式部署,请多几位全栈师傅
    • 把进程部署在多个机器上并引入负载均衡。经过这样的垂直切分,就来到了单体架构。
  • 垂直应用架构:按应用垂直切分,就好比请来了做不同蛋糕的师傅 capture_20220523203102391.bmp
  • 优点 这种架构解决了单机服务两个最重要的问题:
    • 水平扩容
    • 运维不需要停服
  • 缺点:
    • 职责太多,开发效率不高
    • 爆炸半径大,一旦出问题,影响面不可估量

SOA、微服务|水平切分

SOA:

        1 将应用的不同功能单元抽象为服务

        2 定义服务之间的通信标准

微服务架构是SOA的去中心化演进方向,不同模块的RD可以专注于自己的业务逻辑,提高开发迭代效率;各个服务独立运维,变更操作的影响面可控,应用整体的稳定性得到提高

capture_20220523203304185.bmp

  • 我们还需要解决垂直切分和水平切分带来了的一系列问题:
    • 数据一致性
    • 高可用 服务越来越多,依赖越来越复杂,如何做到高可用
    • 治理 怎么容灾
    • 解耦VS过微 运维成本提高,值得吗

2 企业级后端架构剖析

云计算

云计算是通过软件自动化管理,提供计算资源的服务网络,是现代互联网大规模熟悉分析和存储的基石

  • 四层架构

        Iaas

        Paas

        Saas

        Faas

云原生

为组织在公有云、自由云、混合云等新型动态环境中,构建和运行可弹性拓展的应用提供了可能

它的代表技术有很多: 容器化、服务网格、微服务、不可变基础架构、声明式API

基于这些技术,开发者可以构建出容错性好、易于管理、具备较好观测性的云服务。

云原生主要涉及四个方面:

capture_20220523204107651.bmp

  • 弹性计算资源:
    • 服务资源调度
      • 微服务:做蛋糕的雕花
      • 大服务
    • 计算资源调度
      • 在线:  热销榜单
      • 离线:  热销榜单更新
    • 消息队列
      • 在线:  削峰、解耦
      • 离线:  大数据分析
  • 弹性存储资源
    • 经典
      • 对象:宣传视频
      • 大数据:用户消费记录
    • 关系型数据库
      • 收银记录
    • 元数据
      • 服务发现:蛋糕店通讯录
    • NoSQL
      • KV:客户说要来个XXX蛋糕

总结:将存储资源当成是服务

  • DevOps 结合自动化流程,提高软件开发、交付效率

capture_20220523204805657.bmp

  • 微服务架构
    • 制定通信标准
    • 微服务中间件 RPC和HTTP
      • 性能
      • 服务治理
      • 协议可解释性 在云原生场景下,微服务不必再业务逻辑中实现符合通信标准的交互逻辑,而是交给框架来做

capture_20220523205131017.bmp

服务网格

- 微服务之间通讯的中间层
- 高性能网络代理
- 业务代码与治理解耦

capture_20220523210108902.bmp

案例中最后出来的云原生蛋糕店

capture_20220523210214476.bmp

3 企业级后端架构的挑战

  • 挑战:
    • 基础设施层面
      • 物理资源有限
      • 资源利用率受制于部署服务
    • 用户层面
      • 网络通信开销较大
      • 网络抖动导致运维成本提高
      • 异构环境下,不同实例资源水位不均

解决方案

  • 离在线资源并池
    • 在线业务的特点:
      • IO密集型为主
      • 潮汐性、实时性
    • 离线业务的特点:
      • 计算密集型占多数
      • 非实时性
    • 核心收益
      • 降低物理资源成本
      • 提供更多弹性资源

同一个机器,可以使用虚拟化等方式对核心做隔离,离在线的用各自的CPUset来实现离在线隔离

capture_20220523210806813.bmp

  • 自动扩缩容
    • 利用在线业务潮汐性自动扩缩容
    • 核心收益:
      • 降低业务成本

扩缩容依据什么指标?CPU使用量,是否有内存要求

  • 微服务亲合性部署
    • 将满足亲合性条件的容器调度到一台宿主机
    • 微服务中间件与服务网格提高共享内存通信
    • 服务网格控制面实施灵活、动态的流量调度
    • 核心收益
      • 降低业务成本
      • 提高服务可用性

capture_20220523211057733.bmp

  • 基于微服务中间件&服务网格的流量治理
    • 熔断、重试
    • 单元化
    • 复杂环境的流量调度
    • 核心收益
      • 提高微服务调用容错性
      • 容灾
      • 进一步提高开发效率
  • CPU水位负载均衡
    • Iaas
      • 提供资源探
    • 服务网格
      • 动态负载均衡
    • 核心收益
      • 打平异构环境算力差异
      • 为自动化扩缩容提供正向输入

capture_20220523211642560.bmp

4 后端架构实战

  • 要明确需要哪些输入
  • 在设计时需要考虑哪些关键点

问题提炼

  • 输入?
    • 服务网格数据面
      • 支持带权的负载均衡策略
    • 注册中心存储了所有容器的权重信息
    • 宿主机能提供:
      • 容器的资源使用情况
      • 物理资源信息(如CPU型号)
  • 关键点
    • 紧急回滚能力
    • 大规模 系统的稳定性和计算瓶颈
    • 极端场景

自适应静态权重

  • 采集宿主机物理资源信息

  • 调整容器注册的权重 image.png

  • 优点:

    • 复杂度低 在宿主机中加入了调权代理
    • 完全分布式,可用性高 一个机器挂了,不会影响其他机器
    • 微服务中间件无适配成本
  • 缺点:

    • 无紧急回滚能力
    • 缺乏运行时自适应能力 暂时不支持权重可能要做的动态调整

自适应静态权重 Alpha

多了一个动态权重决策中心

  • 容器动态权重的自适应调整,动态权重决策中心获取容器的指标
  • 服务网格的服务发现&流量调度能力

image.png

  • 演进方向
    • 解决无法紧急回滚的问题
    • 运行时权重自适应 静态权重有存储,有问题时可以调回
  • 缺点
    • 过度流量倾斜可能会有异常情况,有可能会把X上服务调成100,Y上服务调成10,所以需要其他指标来做参考

自适应静态权重 Beta

  • 服务网格上报RPC指标,在服务网格层面做指标的收集

image.png

  • 演进方向
    • 极端场景的处理成为可能
  • 缺点:
    • 时序数据库压力较大,会成为系统瓶颈
    • 动态权重决策中心职责越来越多,迭代——变更——风险

自适应动态权重 Release

image.png

  • 演进方向:
    • 微服务化
    • 引入消息队列削峰、解耦
    • 离在线链路切分
    • 梳理强弱依赖