[ 后端架构 | 青训营笔记]

58 阅读4分钟

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

架构初探

什么是架构?

软件架构的定义:

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

架构的发展

什么是单机架构

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

  • 优点:

    • 简单
  • 问题

    • C10K问题
    • 运维需要停服

在单机架构下,无法支撑较大的请求量,并且在需要更新或运维系统时需要停机。

单体架构|垂直切分

对于单机架构的缺陷,很容易想到的解决方式就是多部署几份,对应用做水平扩容,转变为单体架构

                -   单体应用1
用户  =>负载均衡  -   单体应用2
                -   单体应用3

在这种情况下,每个单体应用还是用来完成同样的功能。

进一步地,可以对应用进行垂直切分,让每个应用完成不同的垂直功能。

  • 优点

    • 可以水平扩容
    • 运维不需要停服
  • 缺点

    • 每个应用的职责太多
    • 爆炸半径大(一旦某个部分出了问题,影响范围大)

SOA、微服务 | 水平切分

一些概念

Service Oriented Architecture

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

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

在SOA、微服务的架构下,面临的问题是:

  • 数据一致性

  • 高可用如何满足

  • 服务治理

    • 服务故障与容灾
  • 解耦 过微

    • 解耦提高了运维成本

总结

架构演进的初衷:

  • 需求量越来越大
  • 实现越来越复杂

架构演进思路:

  • 垂直切分
  • 水平切分

企业级后端架构剖析

云计算的基本概念

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

云计算的基础:

  • 虚拟化技术
  • 编排方案

架构:

  • IaaS 基础设施即服务
  • PaaS 平台即服务
  • SaaS 软件即服务
  • FaaS 函数即服务

云原生的概念

  • 弹性资源(计算资源&存储资源)

    • 虚拟化容器
    • 快速扩缩容
  • 微服务架构(HTTP vs RPC,通信交给框架)

    • 业务功能与单元解耦
    • 统一通信标准
  • DevOps(结合自动化流程,提升软件开发、交付效率)

    • 敏捷开发
    • CI/CD
  • 服务网格(数据平面与控制平面的划分)

    • 业务与治理解构(服务与网络通信解耦)
    • 异构系统的治理统一化(不同语言编写的业务使用同样的治理方案)
    • 复杂治理能力(相比于业务进行服务发现,通过中心化的控制面进行调度具有全局化的事业)

企业级后端架构的挑战

挑战

  • 基础设施层面

    • 物理资源是有限的

      • 机器资源
      • 带宽资源
    • 资源利用率受限于部署服务

  • 用户层面

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

如何解决?

  1. 如何降低资源成本,提高资源利用率?

    • 离线资源并池

      • 在线业务与离线业务的区别(IO密集 vs 计算密集 | 实时性 vs 非实时性)
      • 例如在凌晨时段将在线业务的资源降低,提供给离线业务使用
  2. 如何降低业务成本?

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

    • 扩缩容依据指标是什么呢?

      • 可以利用CPU使用率统计分位数
      • 可以考虑内存使用率
      • 具体取决于服务的情况。(当前来说基于IO比较难以量化)
  3. 微服务亲和性部署是什么?

    • 将满足亲和性条件的容器调度到同一台宿主机(减少网络通信)
    • 微服务中间件与服务网格通过共享内存通信
    • 服务网格控制面提供灵活动态的流量调度
  4. 如何提高容错性?

    • 基于微服务中间件/ServiceMesh的流量治理

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