定义:云原生架构是基于云原生技术的一组架构原则和设计模式的集合,旨在将云应用中的非业务代码部分进行最大化地剥离,让云设施接管应用中原有的大量非功能特性(如弹性、韧性、安全、可观测性、灰度等),使业务不再有非功能性业务中断困扰,同时具备轻量、敏捷、高度自动化的特点。
基于云原生的应用特点 3 条:① 代码结构发生巨大变化(不再需掌握文件及分布式处理、复杂网络技术,开发更敏捷快速);② 非功能性特性大量委托给云原生架构解决(高可用、容灾、安全、可运维、易用、可测试、灰度发布);③ 高度自动化的软件交付(可自动部署到成千上万节点)。
云原生七大原则(必背):
| 原则 | 要点 |
|---|---|
| ① 服务化原则 | 通过服务化架构把不同生命周期的模块分离出来,分别进行业务迭代 |
| ② 弹性原则 | 系统的部署规模可以随业务量变化而自动伸缩 |
| ③ 可观测原则 | 通过日志、链路跟踪和度量等手段,使多次服务调用的耗时、返回值和参数清晰可见 |
| ④ 韧性原则 | 软件依赖的软硬件组件出现异常时,软件表现出来的抵御能力 |
| ⑤ 所有过程自动化原则 | 让自动化工具理解交付目标和环境差异,实现整个软件交付和运维的自动化 |
| ⑥ 零信任原则 | 不信任网络内部和外部的任何人/设备/系统,基于认证和授权重构访问控制的信任基础 |
| ⑦ 架构持续演进原则 | 架构具备持续演进能力 |
主要架构模式 7 种:
| 模式 | 核心要点 |
|---|---|
| ① 服务化架构模式 | 以应用模块为粒度划分,以接口契约(IDL)定义业务关系,以标准协议(HTTP、gRPC)互联互通,结合 DDD、TDD、容器化部署 |
| ② Mesh 化架构模式 | 把中间件框架(RPC、缓存、异步消息)从业务进程中分离,中间件 SDK 与业务代码解耦,中间件升级对业务进程无影响 |
| ③ Serverless 模式 | 业务流量到来/事件发生时云启动业务进程,处理完自动关闭;开发者不关心运行地点、OS、网络配置、CPU 性能。适合事件驱动的数据计算任务、计算时间短的请求/响应应用、没有复杂相互调用的长周期任务 |
| ④ 存储计算分离模式 | CAP 困难主要针对有状态应用;无状态应用不存在一致性维度,可获得很好的可用性和分区容错性,弹性更好 |
| ⑤ 分布式事务模式 | XA(2PC 强一致但两次网络交互性能差)、BASE(基本可用+最终一致,性能高但通用性有限)、TCC(Try-Confirm-Cancel 二阶段,隔离性可控高效但业务侵入性强)、SAGA(正向事务配补偿事务,开发维护成本高)、SEATA 的 AT 模式(二阶段委托给底层框架、取消行锁,高性能无代码开发量) |
| ⑥ 可观测架构 | 三大支柱:Logging(多级别跟踪 INFO/DEBUG/WARNING/ERROR)、Tracing(请求从前端到后端的完整调用链路)、Metrics(并发度、耗时、可用时长、容量等多维量化度量) |
| ⑦ 事件驱动架构 EDA | 应用/组件间集成架构模式。适用:增强服务韧性、数据变化通知、构建开放式接口、事件流处理、CQRS(命令查询职责分离——影响状态的命令用事件发起,不影响状态的查询用同步 API) |
典型云原生反模式 3 种:① 庞大的单体应用(缺乏依赖隔离、代码耦合、边界不清晰、只能整体扩容);② 单体应用"硬拆"为微服务(强行拆分耦合度高、代码量少的模块;拆分后数据紧密耦合;分布式调用严重影响性能);③ 缺乏自动化能力的微服务(人均负责模块数上升、工作量增大)。
容器是标准化软件基础单元,将应用及其所有依赖项打包发布,使应用不再受环境限制,在不同计算环境间快速、可靠地运行。
容器编排技术 8 项能力:资源调度、应用部署与管理、自动修复、服务发现与负载均衡、弹性伸缩、声明式 API、可扩展性架构、可移植性。
K8s 核心概念:Pod(最小调度单元,一组容器的组合)、Service(一组 Pod 的稳定访问抽象)、控制平面(调度与状态管理)。核心思想是通过声明式 API 描述期望状态,控制器持续对比实际状态并向期望状态收敛。
| 约束 | 要点 |
|---|---|
| ① 微服务个体约束 | 微服务的功能在业务领域划分上应相互独立 |
| ② 微服务间横向关系 | 划分好边界后,从可发现性(服务 A 发布/扩缩容时,依赖它的服务 B 不重新发布就能自动感知)和可交互性(服务 A 用什么方式调用服务 B)处理关系 |
| ③ 微服务与数据层纵向约束 | 提倡数据存储隔离(DSS)原则:对数据的访问都必须通过相应微服务提供的 API 来访问 |
| ④ 全局视角下的分布式约束 | 高效运维整个系统,技术上实现全自动化 CI/CD 流水线,支持蓝绿、金丝雀等发布策略 |
四大特点(必背):
关注点:计算资源弹性调度(容错、资源利用率、性能、数据驱动)、负载均衡和流控、安全性。
旨在将微服务间的连接、安全、流量控制和可观测等通用功能下沉为平台基础设施,实现应用与平台基础设施的解耦。
传统应用上云的一般路径:单体应用 → 容器化改造(Docker 化)→ 微服务拆分 → 引入 K8s 编排 → Mesh 化/Serverless 化 → 全链路可观测与 DevOps 自动化。改造的核心判断标准是"哪些非功能特性可以剥离给云"——弹性伸缩、容灾、灰度、安全加固越能下沉,业务代码越专注,交付越敏捷。