架构是什么

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

重要性:软件设计的基础

演化的初衷:

  • 业务量变大,需要增加服务
  • 工作量变大,增加分工合作

演进思路:

  • 垂直切分,解决业务量过大,单端承载问题
  • 横着切,增加模块独立性,减少模块耦合性

单机架构

所有功能都实现在一个进程里,并部署在一台机器上

  • 优点:

    • 简单
  • 问题:

    • C10K problem
    • 运维需要停服

image-20230201213551464

单体架构

职责未进行切分,只是进行了分布式的部署,每个应用的职能还是一样的

  • 优点

    • 进行了水平扩容
    • 运维不需要停服
  • 问题

    • 职责太多,开发效率低
    • 爆炸范围广,宕机影响业务广

单体架构:分布式部署

image-20230201122643611

单体架构:垂直应用架构

按应用的功能进行垂直切分

image-20230201122947263

SOA

  1. 将应用的不同功能单元抽象为服务
  2. 定义服务之间的通信标准
  • 问题

    • 数据一致性
    • 高可用
    • 治理(容灾)
    • 解耦
    • 成本

image-20230201213621212

微服务(SOA去中心化演进的方向)

拆分的更加细致,避免中心化的存在

image-20230201184223602

后端架构剖析

云计算

  • IaaS是指基础设施服务,Infrastructure-as-a-service。主要提供部分基础资源,也就是云服务的最底层。例如阿里云、腾讯云上虚拟出来的VPS,这种云虚机。
  • PaaS是指平台即服务,Platform-as-a-service。平台提供软件部署平台(runtime),抽象掉了硬件和操作系统细节,可以无缝地扩展(scaling)。开发者只需要关注自己的业务逻辑,不需要关注底层。例如低代码平台。
  • SaaS是指软件即服务,也称为云应用服务,Software-as-a-service。是软件的开发、管理、部署都交给第三方,不需要关心技术问题,可以拿来即用。普通用户接触到的互联网服务,几乎都是 SaaS。
  • FaaS是指函数即服务,Function as a Service。无服务器计算,当前使用最广泛的是AWS的Lambada。服务商提供一个平台,允许客户开发、运行和管理应用程序功能,而无需构建和维护通常与开发和启动应用程序相关的基础架构的复杂性。

云原生

image-20230201221228957

Devops

image-20230201222738034

微服务架构

image-20230201223909441

微服务中间件: RPC or Http考量

  • 性能,RPC协议有通信压缩,性能较好
  • 服务治理,rpc中间件会有服务治理能力
  • 协议可解释性,http有可解释性

服务网格

image-20230201225351453

后端架构挑战

问题

  • 基础设施层面

    • 机器带宽容量有限
    • 机器的利用率受限于服务的限制
  • 用户层面

    • 多个微服务之间网络通信开销大
    • 微服务之间调用受网络影响大
    • 不同性能的机器部署相同服务,资源占用率不同,各个实例之间资源占用率有差距

实战

设计考量指标

  • 输入参数

    • 服务网格数据面

      • 支持带权重的负载均衡策略
    • 注册中心存储了所有容器的权重信息
    • 宿主机提供

      • 容器资源使用情况
      • 物理资源信息(CPU型号、IO情况等)
  • 设计关键点

    • 紧急回滚能力(调度出现问题的时候)
    • 大规模(稳定性、计算瓶颈)
    • 极端场景

解决方案

方案1-自适应静态权重

image-20230202112524496

  • 描述

    • 采集宿主机物理资源
    • 调整容器注册权重
  • 优势

    • 复杂度低
    • 完全分布式,可用性高
    • 微服务中间件无适配成本
  • 缺点

    • 无紧急回滚能力
    • 缺乏运行时自适应能力

方案2-自适应动态权重

image-20230202112442570

  • 描述

    • 容器动态权重自适应调整
    • 服务网格发现、流量调度能力
  • 演进方向

    • 无法紧急回滚的问题
    • 运行时权重自适应
  • 缺点

    • 过度流量倾斜可能会有异常情况

自适应动态权重 | Beta

image-20230202114014445

  • 描述

    • 服务网格上报RPC指标
  • 演进方向

    • 极端场景处理成为可能
  • 缺点

    • 时序数据库压力较大
    • 动态权重决策中心职责越来越多

补充:

p50、p90、p99是什么,有什么用

  • p50:数据集按升序排列,第50分位置大的数据(即升序排列后排在50%位置的数据)。
  • p90:数据集按升序排列,第90分位置大的数据(即升序排列后排在90%位置的数据)。
  • p99:数据集按升序排列,第99分位置大的数据(即升序排列后排在99%位置的数据)。

以最常用的p99为例,它衡量了99%的情况下能达到的最大延迟,99%的请求都低于这个数值,即绝大多数情况下的最差情况。

自适应动态权重 | Release

image-20230202115908377

  • 演进方向:

    • 动态权重决策中心微服务化
    • 引入消息队列削峰、解耦
    • 离在线链路切分,离线分析引擎引入机器学习等方便进一步决策
    • 梳理强弱依赖

总结

  • 没有最好的架构,只有最合适的
  • 架构设计

    • 需求。弄清楚解决什么问题
    • 业界调研,业界都有哪些解决问题的方案可供参考
    • 技术选型,内部、社区都有哪些基础组件
    • 异常情况,考虑清楚xxx不行了怎么办,准备容灾、备份方案

引用

最后修改:2023 年 02 月 02 日
如果觉得我的文章对你有用,请随意赞赏