第 14 章 云原生架构设计理论与实践
对应大纲:科目 1-13 云原生架构设计理论与实践|教材 P482–P511|优先级 ★★★★★|综合知识估分 2~4 分
读法:把「为什么要云原生 → 云原生是什么 → 靠什么技术实现 → 怎么落地」串成一条线;5 原则、7 模式、6 反模式是选择题与论文共用的骨架。
一、知识框架
云原生架构设计理论与实践
├─ 14.1 产生背景
│ ├─ 单体瓶颈:耦合、构建慢、故障扩散
│ ├─ 交付瓶颈:手工部署、环境不一致
│ └─ 资源瓶颈:按峰值预留、利用率低
├─ 14.2 云原生架构内涵
│ ├─ 定义与应用特征
│ ├─ 5 大原则:服务化|弹性|可观测|韧性|自动化
│ ├─ 主要架构模式:服务化|Mesh|Serverless|声明式 API
│ │ |可观测|韧性|自动化
│ └─ 典型反模式
├─ 14.3 相关技术
│ ├─ 容器与 Kubernetes
│ ├─ 云原生微服务:拆分与治理
│ ├─ Serverless:FaaS + BaaS
│ └─ 服务网格:Sidecar、控制面/数据面
└─ 14.4 案例分析:改造路径、成效与风险
二、必背要点
14.1 产生背景
| 痛点 | 具体表现 |
|---|---|
| 单体应用 | 代码高度耦合、构建慢,一处故障拖垮全站 |
| 交付方式 | 手工部署、环境不一致、发布窗口长 |
| 弹性能力 | 按业务峰值长期预留资源,闲时大量浪费 |
| 技术绑定 | 锁定单一语言与中间件,难以引入新技术 |
云计算的资源池化、弹性伸缩与托管服务提供了外部条件,但「上云」不等于「云原生」:只把虚拟机搬上云,架构仍是单体与手工运维,收益有限。
14.2 云原生架构内涵
定义:云原生是一套构建和运行应用的方法论。应用从设计之初就面向云环境,充分利用云的弹性、分布式与自动化能力,实现快速交付、弹性伸缩与故障自愈。
符合云原生架构的应用特征
| 特征 | 含义 |
|---|---|
| 容器化封装 | 应用与依赖打包为镜像,环境一致 |
| 微服务化 | 按业务边界拆分,独立开发部署 |
| 自动化 | CI/CD、自动扩缩容、自动运维 |
| 声明式 API | 描述期望状态,由平台收敛达成 |
| 可观测性 | 日志、指标、链路追踪三支柱 |
5 大原则
| 原则 | 内涵 | 落地手段 |
|---|---|---|
| 服务化 | 按业务边界拆分,接口契约化 | 微服务、API 网关 |
| 弹性 | 按负载自动伸缩,按需使用资源 | HPA、Serverless |
| 可观测 | 能从外部输出推断内部状态 | 日志、指标、链路追踪 |
| 韧性 | 假设故障必然发生,可隔离可恢复 | 熔断、限流、重试、降级 |
| 自动化 | 一切可自动化的都交给平台 | CI/CD、IaC、GitOps |
延伸两条:零信任(默认不信任任何调用)、架构持续演进(架构随业务迭代)。考试问「5 大原则」按上表作答,问「设计原则」可补这两条。
主要架构模式
| 模式 | 一句话 | 关键点 |
|---|---|---|
| 服务化架构 | 单体拆为可独立部署的服务 | 业务边界、接口契约、独立数据 |
| Mesh 化架构 | 服务间通信下沉到 Sidecar 代理 | 控制面与数据面分离 |
| Serverless 化 | 不管理服务器,按调用付费 | FaaS + BaaS、事件驱动 |
| 声明式 API | 声明期望状态,平台负责达成 | 幂等、控制器循环 |
| 可观测性 | 从输出推断系统内部状态 | 日志、指标、追踪 |
| 韧性架构 | 把故障当常态来设计 | 隔离、限流、熔断、降级 |
| 自动化 | 减少人工干预与人为失误 | CI/CD、IaC、弹性伸缩 |
典型反模式
| 反模式 | 表现 | 后果 |
|---|---|---|
| 往「大泥球」里加功能 | 无边界堆代码,只加不改 | 耦合严重、不可维护 |
| 非一致性设计 | 技术栈、数据模型各行其是 | 集成困难、成本上升 |
| 硬编码 | 地址、配置、密钥写死在代码里 | 无法多环境部署 |
| 单体膨胀 | 名义微服务,实则共享库、共享库表 | 牵一发动全身 |
| 按传统方式容量规划 | 长期预留峰值资源 | 成本高、弹性差 |
| 忽视可观测性 | 只部署不监控 | 故障定位慢、恢复时间长 |
14.3 相关技术
容器与虚拟机
| 维度 | 容器 | 虚拟机 |
|---|---|---|
| 隔离级别 | 进程级(namespace、cgroup) | 硬件级(Hypervisor) |
| 启动速度 | 秒级甚至毫秒级 | 分钟级 |
| 资源占用 | 共享内核,轻量 | 含完整操作系统,较重 |
| 部署密度 | 单机可运行数百个 | 单机通常数十个 |
| 安全隔离 | 相对较弱 | 相对较强 |
Kubernetes 核心对象
| 对象 | 作用 |
|---|---|
| Pod | 最小调度单元,含一个或多个共享网络与存储的容器 |
| Service | 为 Pod 提供稳定虚拟 IP 与负载均衡 |
| Deployment | 管理无状态 Pod 副本、滚动升级与回滚 |
补充对象:Namespace 做资源隔离,ConfigMap/Secret 管配置与密钥,StatefulSet 管有状态副本,Ingress 做七层入口。K8s 采用主从架构:控制面含 API Server、调度器、控制器管理器与 etcd,工作节点含 kubelet、kube-proxy 与容器运行时。
云原生微服务
拆分维度:业务能力(按价值链与组织)、领域驱动设计的限界上下文、数据边界(每个服务独立数据库)、团队边界(康威定律)、变更频率与伸缩需求。
治理能力:注册发现、负载均衡、配置中心、API 网关、熔断限流降级、链路追踪、分布式事务。
Serverless
形态为 FaaS(函数即服务)+ BaaS(后端即服务)。特点:免运维、事件驱动、自动弹性、按量付费;限制是冷启动时延、单次执行时长与状态受限。适用突发流量、定时任务、事件处理、轻量 API。
服务网格
| 概念 | 内容 |
|---|---|
| Sidecar | 与业务容器同 Pod 的代理,接管进出流量 |
| 数据面 | 一组 Sidecar,负责转发、限流、加密与遥测 |
| 控制面 | 下发路由、策略与证书,如 Istio 的 Pilot、Citadel |
| 核心能力 | 流量管理、mTLS 安全、可观测、灰度发布 |
价值是把服务治理从业务代码中剥离,多语言统一;代价是额外网络跳数、资源开销与运维复杂度。
14.4 案例分析
改造路径:容器化(镜像统一、配置外置)→ 按领域拆分微服务 → Kubernetes 编排(Deployment、Service、HPA)→ 服务网格做灰度与 mTLS → Serverless 承接峰值与定时任务 → 建立可观测体系(指标、日志、链路)。
成效:发布周期由周级降到天级甚至小时级;资源利用率提升;故障隔离与恢复时间缩短。
风险与对策:分布式复杂度上升,需统一治理与链路追踪;数据一致性变难,优先最终一致与 Saga;运维门槛提高,先建平台与标准;成本可能失控,需按命名空间计量与弹性策略。改造应渐进,优先用绞杀者模式包裹遗留系统,避免「为微服务而微服务」。
三、易混淆概念对比
| A | B | 关键区别 |
|---|---|---|
| 云原生 | 上云 | 上云只是迁移;云原生要求架构面向云设计 |
| 容器 | 虚拟机 | 共享内核、进程级隔离;独立 OS、硬件级隔离 |
| Docker | Kubernetes | Docker 管单机容器生命周期;K8s 管集群编排 |
| Pod | 容器 | Pod 是最小调度单元,可包含多个容器 |
| Deployment | StatefulSet | 前者管无状态副本;后者管有状态与稳定标识 |
| Service | Ingress | Service 提供集群内稳定访问;Ingress 是七层外部入口 |
| 微服务 | SOA | 微服务去中心化、独立数据、轻量协议;SOA 常配 ESB 重治理 |
| Serverless | 容器 | 免运维、按调用付费、有冷启动;容器常驻、自主管理 |
| 服务网格 | API 网关 | 网格管服务间东西向流量;网关管外部南北向入口 |
| 熔断 | 限流 | 熔断切断故障依赖;限流控制进入系统的流量 |
| 声明式 | 命令式 | 声明期望状态由平台收敛;命令式逐步下达指令 |
| 可观测性 | 监控 | 监控看已知指标;可观测支持未知问题探索 |
四、常见考法与出题角度
| 出题角度 | 典型问法 | 答题要点 | 易错提示 |
|---|---|---|---|
| 概念判断 | 「下列哪项不属于云原生特征」 | 容器化、微服务、声明式、可观测 | 虚拟化本身不是云原生特征 |
| 原则识别 | 「假设故障必然发生属于哪条原则」 | 韧性 | 不是弹性 |
| 模式匹配 | 「把治理能力下沉到代理属于」 | Mesh 化 | 不是 API 网关 |
| 反模式 | 「共享库表导致牵一发动全身属于」 | 单体膨胀 | 不是大泥球 |
| 容器对比 | 「容器相比虚拟机的主要优势」 | 启动快、占用小、密度高 | 隔离性并不更强 |
| K8s 对象 | 「最小调度单元是」 | Pod | 不是容器 |
| 微服务拆分 | 「拆分的首要依据」 | 业务能力与限界上下文 | 不是按技术分层拆 |
| Serverless | 「Serverless 的典型限制」 | 冷启动、执行时长、状态受限 | 不是不能弹性 |
| 服务网格 | 「Sidecar 的作用」 | 接管流量、治理与遥测 | 不是业务逻辑容器 |
| 迁移策略 | 「改造遗留系统的推荐方式」 | 绞杀者模式、渐进迁移 | 不是一次性重写 |
案例题角度:给出单体系统与高并发场景,要求「给出云原生改造方案」。按「现状痛点 → 拆分与容器化 → 编排与弹性 → 治理与可观测 → 迁移步骤与风险」五段作答,每段都要落到具体技术。
论文可用角度:可直接改写为——「在××平台建设中,我们把单体按领域拆分为 12 个微服务,以 Kubernetes 的 Deployment 与 HPA 实现弹性伸缩,用 Istio 完成灰度发布与 mTLS,发布周期由两周缩短到一天,故障恢复时间从小时级降到分钟级。」
五、速记与自测
速记
- 云原生四要素:容、微、持、声
- 5 原则:服、弹、观、韧、自
- 7 模式:服、Mesh、无服、声、观、韧、自
- 6 反模式:泥、乱、硬、胖、估、盲
- 容器 vs 虚机:共内核、秒级起、密度高
- K8s 三件套:Pod、Service、Deployment
- 服务网格:控制面定策略、数据面跑流量
自测
- 云原生的 5 大设计原则是什么?
- 容器与虚拟机在隔离级别、启动速度、资源占用上有何区别?
- Kubernetes 中 Pod、Service、Deployment 各自的职责是什么?
答案:1. 服务化、弹性、可观测、韧性、自动化。2. 容器是共享内核的进程级隔离,启动秒级、占用小、密度高;虚拟机是硬件级隔离,启动分钟级、含完整 OS、占用大。3. Pod 是最小调度单元;Service 提供稳定访问入口与负载均衡;Deployment 管理无状态副本与滚动升级。