一句话定义:云原生(Cloud-Native)是一种软件设计与运行方式,它从第一行代码起就假设:自己所在的机器会随时挂掉、进程会随时被回收、流量会随时暴涨十倍,而整个系统仍然要保持可用。
展开讲:从“养宠物”到“养牛群”
传统部署像养宠物:每台服务器都有名字,精心喂养,出问题全组人连夜抢救,绝不敢随便关机。云原生像养牛群:每头牛有编号,但没人指望某一头永远活着;倒下一头,牧场自动补一头,牛群总数不变。业界把这句话总结成“ Pets vs Cattle ”。
支撑这个转变的有几件事:
- 状态外置。业务进程不把重要数据写本地磁盘或内存,而是交给外部的数据库、对象存储、缓存。这样每个实例都是“用完即弃”的,杀掉它不心疼。
- 声明式与自愈。你告诉系统“我要 10 个副本、CPU 利用率超过阈值就加”,而不是“去启第 3 台机器”。控制器(Controller)持续对比“期望状态”和“实际状态”,不一致就动手修,像恒温空调而不是手动开关。
- 打包与调度解耦。容器(Container)把应用和依赖打成一个标准件,编排系统(Orchestrator,如 Kubernetes)负责把它塞到任意一台还有余量的机器上。于是换机器、扩缩容、滚动升级都成了日常操作,而不是“大事件”。
- 可观测性。既然没人能登录一台几分钟后就消失的机器排查问题,日志、指标、链路追踪就必须默认铺好。
容易混淆的几组概念
| 概念 | 关键差别 |
|---|---|
| 云原生 vs 上云 | 把老系统原样搬进虚拟机叫“平移上云”,它仍然是宠物;云原生要求能被随意重启和复制 |
| 云原生 vs 微服务 | 微服务是一种拆分方式;一个单体应用只要无状态、启动快、可水平复制,也可以是云原生的 |
| 云原生 vs 高可用 | 高可用的思路是“别让它挂”;云原生的思路是“它一定会挂,挂了怎么办” |
| 云原生 vs Serverless | Serverless 是云原生的一种极端形态,把服务器这个概念也藏了起来 |
对从业者的实际意义
写代码时多问一句:“这个进程被随时 kill 掉会怎样?”由此得到一串具体习惯:启动要快、支持优雅退出(Graceful Shutdown)、暴露健康检查接口、日志打到标准输出、配置走环境变量、不往本地写关键文件。做 AI 的尤其贴切:在线推理服务是典型的无状态进程,请求算完就走,会话状态放外面;分布式训练任务则是“可抢占”的,节点随时可能被回收,所以检查点(Checkpoint)必须频繁保存,这不是谨慎,是前提。
对普通职场人,云原生解释了两件身边事:为什么发布变得频繁而用户无感(滚动升级、灰度发布),以及为什么上云后账单不一定下降——容量从一次性采购变成了随时可拧的旋钮,成本管理从“买服务器”变成了“持续运营”。具体计费方式各家不同,以官方页面为准。
