架构初探 | 青训营笔记

74 阅读4分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天

什么是架构

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

实例类比: 蛋糕店

单机架构

把所有功能实现在一个进程中, 并部署在一个机器上

优点:

  • 简单

问题:

  • c10k problem: 讨论了单个机器在网络服务中的瓶颈
  • 运维需要停服

蛋糕店只有一个师傅, 完成制作蛋糕所有的工作

单体, 垂直应用——垂直切分

单体架构: 分布式部署

多雇几个师傅, 完成蛋糕的制作

垂直应用架构: 按应用垂直切分的单体

优点:

  • 水平扩容
  • 运维不需要停服

问题:

  • 职责太多, 开发效率不高
  • 爆炸半径大, 当服务的一个环节出问题, 影响到很大范围的服务

划分不同种类的蛋糕, 由不同师傅完成

SOA, 微服务——水平切分

SOA(service-oriented architecture)

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

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

image-20230201120640621.png

企业级后端架构剖析

云计算

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

基础:

  • 虚拟化技术
  • 编排方案

架构:

  • IaaS: Infrastructure as a Service
  • PaaS: Platform as a Service
  • SaaS: Software as a Service
  • FaaS: Function as a Service

image-20230201121603326.png

使用云计算提供的服务, 将更多精力集中在业务上

云原生

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

image-20230201121934660.png

弹性资源

计算资源:

  • 服务资源调度

    • 微服务: 逻辑简单, 性能要求较低的服务
    • 大服务: 性能要求高的服务
  • 计算资源调度

    • 在线: 对实时性要求高的计算任务
    • 离线: 实时性要求不高, 但是计算量大的任务
  • 消息队列

    • 在线: 削峰, 解耦. 对于消息的生产者, 不用关心消费者的状态, 只需要将消息放入消息队列中, 这样降低了负载, 满足了在线的实时性要求
    • 离线: 大数据分析

存储资源:

  • 经典类型

    • 对象
    • 大数据
  • 关系型数据库

  • 元数据: 如用户数据等

  • nosql: KV类型的存储

DevOps

用于软件交付, 贯穿整个软件开发周期, 结合自动化流程, 提高软件开发和交付的效率

image-20230201122902799.png

微服务架构

通信标准:

  • HTTP(RESTful API)
  • RPC(Thrift, gRPC)

如何选用http或rpc:

  • 性能方面: rpc存在数据的压缩方案, 优于http
  • 服务治理
  • 协议可解释性: http的json数据格式更有利于数据的解释

image-20230201123204247.png

服务网格

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

相比较于传统的http/rpc通信框架:

  • 异构系统治理统一化
  • 与业务进程解耦, 生命周期易管理

image-20230201123716577.png

企业级后端架构的挑战

  • 基础设施层面

    • 物理资源有限: 机器, 带宽
    • 资源利用率受制于部署服务
  • 用户层面

    • 网络通信开销大
    • 网络抖动导致运维成本提高
    • 异构环境下, 不同实例资源水位不均

离在线资源并池

  • 降低物理资源成本
  • 提供更多弹性资源

将离线资源和在线资源并池, 在不同时间段提供弹性的物理资源调度

  • 在线业务: 在高峰时期提供更多的资源调度

    • IO密集型
    • 潮汐性, 实时性
  • 离线业务: 在非高峰时期进行大型的计算任务

    • 计算密集型
    • 非实时性

自动扩缩容: 利用在线业务潮汐性自动扩缩容

微服务亲和性部署

  • 将满足亲和性条件的容器调度到一台宿主机
  • 微服务中间件与服务网格通过共享内存通信
  • 服务网格控制面实施灵活, 动态的流量调度

流量治理

  • 熔断, 重试
  • 单元化
  • 复杂环境的流量调度

CPU水位负载均衡

  • IaaS提供资源探针, 获取当前机器的负载情况
  • 服务网格实现动态负载均衡

image-20230201124902560.png

后端架构实战

实现CPU负载均衡

738146f0-4bb4-4415-86af-70785686a295.jpg

  • 动态权重决策中心采集容器的性能指标, 动态更新权重信息
  • 向注册中心更新权重信息, 当出现问题, 可以回滚为静态的权重
  • 采集RPC指标

缺点: 决策中心职责较多, 风险增加

微服务化:

  • 引入消息队列削峰, 解耦
  • 离在线链路切分
  • 梳理强弱依赖

8e06ecda-bf29-42c2-8e44-886307060018.jpg