一、云原生七大设计原则

考试经常给一段场景,让判断违反哪条原则;论文写作可以直接作为架构设计的 7 个维度。

  1. 服务化原则 将系统按照业务领域拆分为多个自治服务,服务之间通过标准接口交互,每个服务拥有独立的开发、测试、部署生命周期。
  • 核心:高内聚低耦合,契约优先,避免过度拆分。
  • 反例:所有业务打包一个大程序;服务之间直接访问对方数据库。
  • 答题话术:按照 DDD 领域驱动进行业务域划分,实现服务解耦,每个服务独立迭代发布。
  1. 弹性原则 系统能够根据业务负载自动完成资源扩缩容,应对流量波峰波谷。
  • HPA:水平 Pod 自动扩缩,增减 Pod 实例数量(最常用)。
  • VPA:垂直扩缩,修改单个 Pod 的 CPU 内存配置。
  • 核心:业务代码无感知,由平台完成弹性。
  • 反例:流量暴涨只能人工手动加机器。
  1. 可观测原则 不依靠查看代码、登录服务器,从外部就可以判断系统运行状态。

三大支柱:指标 Metrics、日志 Logging、链路追踪 Tracing

  • Metrics:数值指标,QPS、错误率、CPU、内存,Prometheus 采集。
  • Logging:离散事件文本,异常报错、业务行为日志。
  • Tracing:一次请求跨多个服务调用全流程,每个调用耗时、报错位置。
  • SLI/SLO/SLA
    • SLI:服务指标(实际测量值,如接口成功率)
    • SLO:服务目标(我们承诺要达到的目标,如接口成功率 99.95%)
    • SLA:服务等级协议,对外合同,达不到要赔偿。
  • OpenTelemetry:统一可观测采集标准,一套 SDK 同时输出指标、日志、链路。
  1. 韧性原则(高可用、故障隔离) 云原生环境机器、网络随时可能故障,目标:局部故障不能演变为全局故障。 常用手段:熔断、限流、降级、重试、超时、故障转移、多副本。
  • 熔断:调用下游持续失败,直接短路,不再调用下游,快速返回。
  • 限流:限制请求量,保护系统不被打垮。
  • 降级:非核心功能关闭,保障核心业务可用。

注意:韧性不是保证不故障,而是故障发生影响范围可控,具备自愈能力。

  1. 所有过程自动化原则 消除人工操作,一切自动化。
  • IaC 基础设施即代码:基础设施用代码 / YAML 描述,纳入版本管理,不手工点页面配置。
  • CI/CD 流水线:代码提交自动构建、测试、发布。

反例:登录服务器手动改配置、手动部署程序。

  1. 零信任原则 核心:永不信任,始终验证。不能内网就默认安全。
  • 服务之间访问也要身份认证、加密;最小权限原则。
  • mTLS 双向 TLS 加密,服务之间通信加密。
  1. 架构持续演进原则 拒绝一次性大重构,架构是持续迭代优化,增量改造。

案例高频:传统系统迁移云原生,不能一刀切重写,逐步改造。


二、12‑Factor 十二要素应用

云原生应用开发最佳实践,很多坑考试爱考。

  1. 基准代码:一套代码库,多份部署,不要多套代码分支对应不同环境。
  2. 依赖声明:所有依赖显式声明,不依赖服务器预装软件。
  3. 配置:配置和代码严格分离,通过环境变量传入,禁止硬编码配置。
  4. 后端服务:数据库、消息队列等,当做外部附加资源,环境切换只改配置。
  5. 构建‑发布‑运行严格分离 构建:代码→镜像;发布:镜像 + 配置;运行:启动实例。

不允许运行时修改程序代码。

  1. 无状态进程:进程内部不能保存会话、业务状态;状态放到外部存储(redis、数据库)。

❌错误:把用户 session 保存在本地内存。

  1. 端口绑定:应用监听端口对外提供服务,不依赖容器特殊环境。
  2. 并发:通过水平多进程实例扩容,而不是单实例内部多线程。
  3. 易处置:快速启动,优雅关闭,收到 SIGTERM 信号完成当前请求再退出。
  4. 开发、测试、生产环境等价,减少 “本地能跑线上不行”。
  5. 日志:日志输出标准输出 stdout,不要在容器本地写日志文件,由平台统一采集。
  6. 管理进程:数据库迁移、批量任务,作为一次性进程运行,不常驻后台。

选择题高频错误选项记忆:本地保存会话、本地写日志文件、运行时修改代码。


三、K8s 核心资源对象

Pod

K8s最小调度单元,不是容器!一个 Pod 可以包含一个或多个紧密耦合容器。

  • 同一个 Pod 内容器:共享网络命名空间、共享存储;本地localhost互相访问。
  • 三大探针:
  1. livenessProbe存活探针:判断容器是否活着;失败就重启 Pod。
  2. readinessProbe就绪探针:判断容器是否准备好接收流量;失败把 Pod 从 Service 后端摘除,不重启 Pod
  3. startupProbe启动探针:针对启动慢的程序,给程序足够启动时间,启动成功后才执行存活探针。

工作负载,分清使用场景

  1. Deployment:无状态应用(web 服务、微服务) 支持副本管理、滚动更新、版本回滚。底层通过 ReplicaSet 管理 Pod 副本。

无状态:实例之间没有区别,随便销毁重建。

  1. StatefulSet有状态应用(MySQL、Redis 集群) 特点:稳定网络标识、稳定持久存储;有序部署、有序扩缩容;Pod 有固定名字,不是随机名称。

有状态:每个实例数据不一样,不能随便乱销毁。

  1. DaemonSet:集群每个节点运行一个 Pod。典型用途:日志采集代理、监控代理。

  2. Job:一次性任务,执行完成就结束。

  3. CronJob:定时执行 Job。

Service

一组 Pod 的稳定访问入口,Pod 会动态销毁重建 IP 经常变,Service 提供固定 IP。 四种访问类型:

  1. ClusterIP:集群内部访问,默认。
  2. NodePort:每个节点开放一个端口,外部通过节点 IP + 端口访问。
  3. LoadBalancer:云厂商提供负载均衡,外部访问。
  4. ExternalName:把服务映射外部域名。

Service 不直接转发 Pod,通过 kube‑proxy 实现网络规则。

Ingress

Service 是四层网络;Ingress 是七层 HTTP/HTTPS 路由,实现域名、路径转发。

配置管理

  1. ConfigMap:普通配置,明文,非敏感信息。
  2. Secret:密码、密钥等敏感数据,做简单 base64 编码,不是加密,不能存明文密码直接放 git

PV / PVC / StorageClass

  • PV:集群里的持久存储资源。
  • PVC:Pod 申请存储的请求。
  • StorageClass:存储动态供给,不需要预先创建 PV,Pod 申请 PVC 自动生成 PV。

K8s 集群组件

  • apiserver:集群唯一入口,REST API,所有操作必经。
  • etcd:保存集群全部元数据。
  • controller‑manager:控制器,不断调谐,让实际状态等于期望状态。
  • scheduler:调度器,把 Pod 选合适 Node 节点部署。
  • kubelet:每个节点上,管理本机 Pod 生命周期。
  • kube‑proxy:实现 Service 网络。

K8s 核心思想:声明式 API,写 YAML 声明想要什么状态,k8s 自动完成,不是告诉它一步步怎么做。

弹性伸缩

  • HPA:水平 Pod 自动扩缩,增减 Pod 数量,支持 CPU 内存、自定义指标。
  • VPA:垂直扩缩,修改 Pod CPU 内存资源。

Request / Limit

  • Request:调度的时候需要的最小资源;调度器看这个选节点。
  • Limit:Pod 最大可用资源,超过会被限制。

四、服务网格 Service Mesh (Istio)

两大平面

  1. 数据平面 Data Plane:由大量 Sidecar(Envoy 代理)组成。

Sidecar 和业务容器部署在同一个 Pod,拦截业务服务全部进出流量;真正执行流量转发、熔断、限流、监控。业务代码零侵入。

  1. 控制平面 Control Plane (Istiod):不处理业务流量。下发配置、策略、证书给所有 Sidecar。

核心能力

  1. 流量治理:灰度发布、金丝雀发布、A/B 测试、流量镜像、熔断、重试、超时。
  2. 安全:mTLS 双向加密,服务之间通信加密,身份认证授权。
  3. 可观测:自动采集指标、日志、调用链。

Sidecar 优缺点

✅优点:业务代码无侵入;微服务治理能力下沉基础设施;多语言服务统一治理。 ❌缺点:每个服务多一个代理,增加资源开销;架构复杂度上升;排障难度提升。

论文答题:传统微服务框架把治理逻辑写业务代码里,多语言支持差;服务网格将治理能力下沉到 Sidecar 代理,业务只关心业务逻辑。


五、十二要素延伸:不可变基础设施

虚拟机 / 容器实例一旦运行,绝不登录机器修改配置、修改程序。 所有变更:修改镜像或者配置,重新部署新实例,销毁旧实例。 禁止 ssh 进容器改代码改配置。 配合 IaC 基础设施即代码,资源全部代码管理,版本控制。


六、传统应用云原生改造

三阶段渐进改造,禁止一次性大重构

  1. 阶段一:容器化(重新打包,不改业务代码) 把原有单体应用打包 docker 镜像,部署 K8s。解决环境不一致问题。

优点:改动最小;缺点:没有发挥云原生能力,依然是单体。

  1. 阶段二:云原生增强
  • 配置从代码剥离,使用 ConfigMap/Secret;
  • 改造为无状态,会话迁移外部存储;
  • 接入监控、日志、链路追踪;
  • 使用 HPA 实现弹性伸缩;

应用整体还是单体,充分利用平台能力。

  1. 阶段三:微服务化拆分 基于 DDD 领域驱动,按业务域拆分成多个微服务;引入服务网格做流量治理;分布式事务处理。

案例答题模板:采用渐进式迁移策略,分容器化、云原生增强、微服务拆分三阶段,避免一次性大规模重构带来风险。


七、Serverless 无服务器

  1. FaaS 函数即服务:只写业务函数,不用管理服务器;事件触发执行。
  2. BaaS 后端即服务:直接使用云提供后端能力(对象存储、消息)。

✅优点:免运维;极致弹性;按实际使用计费。 ❌缺点:冷启动问题;执行时长限制;厂商绑定;不适合长连接、长时间运行任务。

适用场景:图片处理、定时任务、消息回调、API 短请求。 不适合:长连接、大计算长时间运行服务。


八、云原生数据库

核心特征:存算分离架构 计算层无状态,可以弹性扩缩;存储层共享存储,独立扩展。 优势:计算节点快速扩容;存储与计算独立伸缩;故障计算节点重建,数据不丢失。

更多推荐