架构基础 | 青训营笔记

97 阅读4分钟

架构

软件整体结构组件抽象,用于指导软件系统各个方面的设计

  • 单机:所有功能实现在一个进程里,并且部署在一台机器上
    • 优点
      • 简单
    • 缺点
      • 运维需要停服
  • 垂直应用 | 垂直切分
    • 优点
      • 水平扩容
      • 运维不停服
    • 缺点
      • 职责太多,开发效率低
      • 爆炸半径大
  • SOA (Service Oriented Architecture)
    • 将应用的不同功能单位抽象为服务
    • 定义服务之间的通信标准
    • 挑战
      • 数据一致性
      • 高可用
      • 治理
      • 解耦 或 过微

总体上说,随着软件规模的增大,终归要进行切分,如此就有竖着切 or 横着切

云计算

云计算:通过软件自动化管理、提供计算资源的服务网络。是现在互联网大数据分析和存储的基石

  • 基础
    • 虚拟化技术
    • 编排方案
  • 架构
    • IaaS (Infrasturcture as a Service)
      • 基础资源
      • 计算资源,虚拟机,存储空间等
    • PaaS (Platfrom as a Service)
      • 基础上更高层次的服务
      • 开发环境,数据库,消息队列等
    • SaaS (Software as a Service)
      • 直接提供给用户使用的软件
      • Office 365,Saleforce
    • FaaS (Function as a Service)
      • 以函数为单位对代码进行划分,并将其作为独立单元
      • AWS Lambda, Azure Fucntion

云原生

云原生,即 云计算原生的简称,是云计算发展到现在的一种形态

为公司在公有云、自由云、混合云等新兴动态环境中提供了构建可弹性扩展的应用

  • 弹性资源
    • 虚拟化容器
    • 快速扩容
    • 资源
      • 计算资源
        • 服务资源:微服务、大服务
        • 计算资源:在线、离线
        • 消息队列:在线、离线
      • 存储资源
        • 经典: 对象:宣传视频,大数据:用户消费记录
        • 关系型数据库: 收银记录
        • 元数据: 服务发现
        • NoSQL:KV
  • 微服务架构
    • 业务功能单元解耦
    • 统一通信标准
      • HTTP
      • RPC
      • 二者各有特点,HTTP可解释性高,RPC有压缩,传输效率更高
    • 云原生场景下,微服务不必在业务逻辑中符合通信标准,而是将其交由框架来做
  • DevOps
    • 敏捷开发
    • CI/CD
    • 包括工作方式、理念、文化、工具等
    • 各部门之间基于云上各类工具等可以进行更高效、紧密的合作从而实现更快速的迭代
  • 网络网格
    • 微服务之间的通信中间层
    • 高性能网络代理
    • 业务与治理解耦,生命周期易管理
    • 异构系统统一化

挑战

  • 基础设施层面
    • 物理资源有限
      • 机器、带宽
    • 资源利用率受制于部署服务
  • 用户层面
    • 网路通信开销大
    • 网络抖动导致运维成本高
    • 异构下,不同实例资源水位不均

离/在线资源并池

  • 核心
    • 降低物理成本
    • 提供更多弹性资源
  • 方案:离在线资源并池
    • 在线业务特点
      • IO密集
      • 潮汐性,实时性
    • 离线业务特点
      • 计算密集型
      • 非实时性
    • 根据时间 动态调整 离/在线资源池

自动扩缩容

  • 核心
    • 降低业务成本
  • 自动扩缩容:利用在线业务潮汐性
  • 挑战:扩缩容的指标/依据

微服务亲和性部署

  • 核心
    • 降低业务成本
    • 提高服务可用性
  • 微服务亲和部署
    • 满足亲和条件的部署到 同一台机器上
    • 将中间件与网格通过共享内存通信

流量治理

  • 核心
    • 提高微服务容错、容灾
    • 进一步提高开发效率
  • 解决思路
    • 基于微服务的中间件
    • 服务网格的流量治理
    • 熔断、重试、单元化、复杂环境流量调度

CPU水位负载均衡

  • 核心
    • 打平异构环境的算力差异
    • 自动扩缩容提供正向输入
  • CPU水位负载均衡
    • IaaS:提供资源探针
    • 服务网格:动态负载均衡

实战

  • CPU水位负载均衡
    • 服务网格控制面,支持带权重的负载均衡
    • 注册中心存储了所有容器的权重信息
      • 自适应动态权重
        • 采集宿主物理资源信息
        • 调整容器注册权重
    • 宿主机提供容器的资源使用情况、物理资源信息
  • 服务网格上报RPC指标,处理极端场景
  • 微服务化
  • 引入消息队列削峰、解耦
  • 离/在线链路切分
  • 梳理强弱依赖

总的来说,架构、云原生确实无论是对于大型软件系统,还是小型软件系统都有很好的支持

  • 对于服务的提供者
    • 大大提升了设备的利用率
  • 对于客户来讲
    • 服务更加稳定、全面
    • 基于云原生开发迭代速度更快
    • 更能聚焦于业务,而非底层架构

因此对于目前情况而言,非核心业务(或者测试项目)考虑利用云原生技术来进行开发不失为一个可行有效的方案