云原生架构设计理论与实践-软考架构师
一、云原生七大设计原则
考试经常给一段场景,让判断违反哪条原则;论文写作可以直接作为架构设计的 7 个维度。
- 服务化原则 将系统按照业务领域拆分为多个自治服务,服务之间通过标准接口交互,每个服务拥有独立的开发、测试、部署生命周期。
- 核心:高内聚低耦合,契约优先,避免过度拆分。
- 反例:所有业务打包一个大程序;服务之间直接访问对方数据库。
- 答题话术:按照 DDD 领域驱动进行业务域划分,实现服务解耦,每个服务独立迭代发布。
- 弹性原则 系统能够根据业务负载自动完成资源扩缩容,应对流量波峰波谷。
- HPA:水平 Pod 自动扩缩,增减 Pod 实例数量(最常用)。
- VPA:垂直扩缩,修改单个 Pod 的 CPU 内存配置。
- 核心:业务代码无感知,由平台完成弹性。
- 反例:流量暴涨只能人工手动加机器。
- 可观测原则 不依靠查看代码、登录服务器,从外部就可以判断系统运行状态。
三大支柱:指标 Metrics、日志 Logging、链路追踪 Tracing
- Metrics:数值指标,QPS、错误率、CPU、内存,Prometheus 采集。
- Logging:离散事件文本,异常报错、业务行为日志。
- Tracing:一次请求跨多个服务调用全流程,每个调用耗时、报错位置。
- SLI/SLO/SLA
- SLI:服务指标(实际测量值,如接口成功率)
- SLO:服务目标(我们承诺要达到的目标,如接口成功率 99.95%)
- SLA:服务等级协议,对外合同,达不到要赔偿。
- OpenTelemetry:统一可观测采集标准,一套 SDK 同时输出指标、日志、链路。
- 韧性原则(高可用、故障隔离) 云原生环境机器、网络随时可能故障,目标:局部故障不能演变为全局故障。 常用手段:熔断、限流、降级、重试、超时、故障转移、多副本。
- 熔断:调用下游持续失败,直接短路,不再调用下游,快速返回。
- 限流:限制请求量,保护系统不被打垮。
- 降级:非核心功能关闭,保障核心业务可用。
注意:韧性不是保证不故障,而是故障发生影响范围可控,具备自愈能力。
- 所有过程自动化原则 消除人工操作,一切自动化。
- IaC 基础设施即代码:基础设施用代码 / YAML 描述,纳入版本管理,不手工点页面配置。
- CI/CD 流水线:代码提交自动构建、测试、发布。
反例:登录服务器手动改配置、手动部署程序。
- 零信任原则 核心:永不信任,始终验证。不能内网就默认安全。
- 服务之间访问也要身份认证、加密;最小权限原则。
- mTLS 双向 TLS 加密,服务之间通信加密。
- 架构持续演进原则 拒绝一次性大重构,架构是持续迭代优化,增量改造。
案例高频:传统系统迁移云原生,不能一刀切重写,逐步改造。
二、12‑Factor 十二要素应用
云原生应用开发最佳实践,很多坑考试爱考。
- 基准代码:一套代码库,多份部署,不要多套代码分支对应不同环境。
- 依赖声明:所有依赖显式声明,不依赖服务器预装软件。
- 配置:配置和代码严格分离,通过环境变量传入,禁止硬编码配置。
- 后端服务:数据库、消息队列等,当做外部附加资源,环境切换只改配置。
- 构建‑发布‑运行严格分离 构建:代码→镜像;发布:镜像 + 配置;运行:启动实例。
不允许运行时修改程序代码。
- 无状态进程:进程内部不能保存会话、业务状态;状态放到外部存储(redis、数据库)。
❌错误:把用户 session 保存在本地内存。
- 端口绑定:应用监听端口对外提供服务,不依赖容器特殊环境。
- 并发:通过水平多进程实例扩容,而不是单实例内部多线程。
- 易处置:快速启动,优雅关闭,收到 SIGTERM 信号完成当前请求再退出。
- 开发、测试、生产环境等价,减少 “本地能跑线上不行”。
- 日志:日志输出标准输出 stdout,不要在容器本地写日志文件,由平台统一采集。
- 管理进程:数据库迁移、批量任务,作为一次性进程运行,不常驻后台。
选择题高频错误选项记忆:本地保存会话、本地写日志文件、运行时修改代码。
三、K8s 核心资源对象
Pod
K8s最小调度单元,不是容器!一个 Pod 可以包含一个或多个紧密耦合容器。
- 同一个 Pod 内容器:共享网络命名空间、共享存储;本地localhost互相访问。
- 三大探针:
livenessProbe存活探针:判断容器是否活着;失败就重启 Pod。readinessProbe就绪探针:判断容器是否准备好接收流量;失败把 Pod 从 Service 后端摘除,不重启 Pod。startupProbe启动探针:针对启动慢的程序,给程序足够启动时间,启动成功后才执行存活探针。
工作负载,分清使用场景
- Deployment:无状态应用(web 服务、微服务) 支持副本管理、滚动更新、版本回滚。底层通过 ReplicaSet 管理 Pod 副本。
无状态:实例之间没有区别,随便销毁重建。
- StatefulSet:有状态应用(MySQL、Redis 集群) 特点:稳定网络标识、稳定持久存储;有序部署、有序扩缩容;Pod 有固定名字,不是随机名称。
有状态:每个实例数据不一样,不能随便乱销毁。
-
DaemonSet:集群每个节点运行一个 Pod。典型用途:日志采集代理、监控代理。
-
Job:一次性任务,执行完成就结束。
-
CronJob:定时执行 Job。
Service
一组 Pod 的稳定访问入口,Pod 会动态销毁重建 IP 经常变,Service 提供固定 IP。 四种访问类型:
ClusterIP:集群内部访问,默认。NodePort:每个节点开放一个端口,外部通过节点 IP + 端口访问。LoadBalancer:云厂商提供负载均衡,外部访问。ExternalName:把服务映射外部域名。
Service 不直接转发 Pod,通过 kube‑proxy 实现网络规则。
Ingress
Service 是四层网络;Ingress 是七层 HTTP/HTTPS 路由,实现域名、路径转发。
配置管理
- ConfigMap:普通配置,明文,非敏感信息。
- 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)
两大平面
- 数据平面 Data Plane:由大量 Sidecar(Envoy 代理)组成。
Sidecar 和业务容器部署在同一个 Pod,拦截业务服务全部进出流量;真正执行流量转发、熔断、限流、监控。业务代码零侵入。
- 控制平面 Control Plane (Istiod):不处理业务流量。下发配置、策略、证书给所有 Sidecar。
核心能力
- 流量治理:灰度发布、金丝雀发布、A/B 测试、流量镜像、熔断、重试、超时。
- 安全:mTLS 双向加密,服务之间通信加密,身份认证授权。
- 可观测:自动采集指标、日志、调用链。
Sidecar 优缺点
✅优点:业务代码无侵入;微服务治理能力下沉基础设施;多语言服务统一治理。 ❌缺点:每个服务多一个代理,增加资源开销;架构复杂度上升;排障难度提升。
论文答题:传统微服务框架把治理逻辑写业务代码里,多语言支持差;服务网格将治理能力下沉到 Sidecar 代理,业务只关心业务逻辑。
五、十二要素延伸:不可变基础设施
虚拟机 / 容器实例一旦运行,绝不登录机器修改配置、修改程序。 所有变更:修改镜像或者配置,重新部署新实例,销毁旧实例。 禁止 ssh 进容器改代码改配置。 配合 IaC 基础设施即代码,资源全部代码管理,版本控制。
六、传统应用云原生改造
三阶段渐进改造,禁止一次性大重构。
- 阶段一:容器化(重新打包,不改业务代码) 把原有单体应用打包 docker 镜像,部署 K8s。解决环境不一致问题。
优点:改动最小;缺点:没有发挥云原生能力,依然是单体。
- 阶段二:云原生增强
- 配置从代码剥离,使用 ConfigMap/Secret;
- 改造为无状态,会话迁移外部存储;
- 接入监控、日志、链路追踪;
- 使用 HPA 实现弹性伸缩;
应用整体还是单体,充分利用平台能力。
- 阶段三:微服务化拆分 基于 DDD 领域驱动,按业务域拆分成多个微服务;引入服务网格做流量治理;分布式事务处理。
案例答题模板:采用渐进式迁移策略,分容器化、云原生增强、微服务拆分三阶段,避免一次性大规模重构带来风险。
七、Serverless 无服务器
- FaaS 函数即服务:只写业务函数,不用管理服务器;事件触发执行。
- BaaS 后端即服务:直接使用云提供后端能力(对象存储、消息)。
✅优点:免运维;极致弹性;按实际使用计费。 ❌缺点:冷启动问题;执行时长限制;厂商绑定;不适合长连接、长时间运行任务。
适用场景:图片处理、定时任务、消息回调、API 短请求。 不适合:长连接、大计算长时间运行服务。
八、云原生数据库
核心特征:存算分离架构 计算层无状态,可以弹性扩缩;存储层共享存储,独立扩展。 优势:计算节点快速扩容;存储与计算独立伸缩;故障计算节点重建,数据不丢失。
更多推荐



所有评论(0)