一、为什么要用十二要素来审视云原生应用

云原生十二要素本质上是一组关于应用设计、交付和运行方式的实践准则。

它的价值在于帮助我们回答三个关键问题:

  • 应用是否足够标准化,能否稳定交付到不同环境。
  • 应用是否足够解耦,能否适应弹性扩缩容和实例替换。
  • 应用是否足够自动化,能否被平台高效治理。

如果一个应用连这些基础条件都不满足,那么即使放进 Kubernetes,也很难真正发挥云原生平台的价值。

二、云原生十二要素逐条拆解

2.1 一份基准代码,多份部署

一个应用应该对应一个代码仓库,再通过不同配置适配开发、测试和生产环境。这样可以避免多仓库复制代码,确保版本管理一致。

2.2 显式声明依赖

所有依赖项和版本都应该通过 Maven、npm、Gradle 等工具明确声明,减少环境差异带来的运行问题,并为容器化构建提供稳定基础。

2.3 在环境变量中存储配置

数据库连接、API 密钥等配置应与代码分离,通过环境变量或配置中心管理,避免把环境差异硬编码进仓库或镜像。

2.4 把后端服务当做附加资源

数据库、缓存、消息队列等都应视为独立资源,通过网络进行访问,而不是与应用强耦合打包在一起。

2.5 严格分离构建、发布和运行

构建阶段产出制品,发布阶段注入配置,运行阶段启动应用。这样才能通过 CI/CD 流水线稳定交付,避免直接改生产代码。

2.6 应用无状态化

进程不保存关键本地状态,会话数据存放到 Redis 或数据库等外部服务里,从而支持水平扩展和实例替换。

2.7 通过端口绑定来提供服务

应用应自包含服务能力,直接通过端口对外提供访问,而不是过度依赖外部服务器注入运行环境。

2.8 通过进程模型进行扩展

扩展优先考虑增加实例数量,而不是只提升单机硬件配置,这样更符合云平台和 Kubernetes 的弹性伸缩方式。

2.9 快速启动和优雅终止

应用需要具备秒级启动能力,并能处理终止信号,在滚动更新、迁移和缩容时安全释放资源。

2.10 运行环境一致性

开发、测试和生产环境应保持高度一致,尤其是依赖版本和操作系统层面。容器化是实现一致性的关键手段之一。

2.11 日志当做事件流

日志应输出到标准输出,由外部日志系统统一收集和分析,而不是把日志散落在本地文件中。

2.12 后台管理任务当作一次性进程运行

数据迁移、初始化脚本和后台管理任务应作为独立进程执行,例如 Kubernetes Job,而不是混入主服务进程。

三、云原生应用有哪些基础最佳实践

除了十二要素之外,开发云原生应用时还应尽量做到下面这些实践:

  • 应用日志直接输出到控制台。
  • 应用数据不要直接写在本地。
  • 应用配置与代码严格分离。
  • 服务治理尽量借助云平台或平台侧能力实现。
  • 应用优先微服务化。
  • 应用具备容器化能力。
  • 提供可靠的健康检查接口。
  • 提供 Metrics 接口,方便平台做监控和自动化治理。

这些实践和十二要素并不冲突,可以把它们理解为更贴近平台落地的一组执行清单。

四、什么是云原生 AI(CNAI)

CNCF 官方链接:https://landscape.cncf.io/?group=cnai

云原生人工智能(CNAI)是指使用云原生技术构建和部署人工智能应用与工作负载。

它的核心不是简单地“把 AI 跑在云上”,而是把 AI 与云原生技术组合起来,例如:

  • 容器化
  • 微服务
  • DevOps
  • 平台自动化交付

最终目标是让 AI 应用的开发、部署与运维更高效、更灵活、更可靠。

CNAI 全景图

五、为什么学习云原生的人也要关注 AI 工作负载

随着 AI 应用和大模型推理逐渐平台化,未来很多企业平台都会同时承载传统业务服务和 AI 工作负载。

这意味着:

  • 平台不仅要管理容器化业务应用,也要管理模型服务和数据处理任务。
  • 交付流程不再只服务 Web 系统,还要服务训练、推理和批处理任务。
  • 资源治理会从 CPU、内存进一步扩展到 GPU、存储和更复杂的弹性调度。

因此,理解 CNAI 的意义,不只是了解一个新名词,而是提前看到云原生平台未来的演进方向:从承载应用,走向承载更广义的智能化工作负载。