1. Serverless 前世今生:从物理机到容器到 Serverless 的演进之路,以及为什么企业需要 Serverless

1.1 物理机时代:那个“抱着一台机器睡觉”的年代

我记得刚入行那会儿,公司机房里的服务器就跟宝贝似的。每台机器都有自己的名字,运维同事甚至给它们贴了标签——“小张的机器”、“老王的应用”。听起来挺亲切,但问题也来了。

一台物理机,只能跑一个应用。你想多跑几个?不行,端口冲突、依赖打架、资源争抢,分分钟让你崩溃。我有个项目,上线前申请了三台物理机,结果一台CPU跑满,另外两台闲着。你说浪费不浪费?

说白了,物理机时代最大的痛点是:资源利用率极低。一台机器可能只有10%的CPU利用率,但你还得为它付100%的电费和机柜费。而且扩容?至少等两周,采购、上架、装系统、部署应用,流程走完黄花菜都凉了。

核心痛点总结:

  • 资源隔离差,一个应用搞垮整台机器
  • 扩容周期长,以“周”为单位
  • 硬件故障恢复慢,得人工换硬盘、重启
  • 环境不一致,开发环境跑得好,生产环境就崩

1.2 虚拟机时代:总算能“切蛋糕”了

VMware和KVM的出现,让我眼前一亮。一台物理机可以切成好几台虚拟机,每个虚拟机有自己的操作系统,应用之间终于不打架了。

我在2012年做过一个电商项目,用虚拟机部署了十几套应用。扩容从两周缩短到半小时——克隆一个虚拟机镜像就行。听起来很美好对吧?

但用久了你会发现,虚拟机其实是个“胖家伙”。每个虚拟机都带着一整套操作系统,光系统本身就要占几个GB的磁盘和几百MB的内存。你想想看,一台物理机跑10个虚拟机,光操作系统就吃掉了一半资源。

而且启动速度也是个问题。我遇到过线上流量突增,紧急扩容虚拟机,结果等了5分钟才启动完。那5分钟里,用户请求全超时了。嗯,这里要注意:虚拟机的启动时间是以“分钟”计的,对于突发流量场景,根本来不及。

我的经验:虚拟机适合“稳态”业务,比如数据库、中间件。但对于“敏态”业务——比如促销活动、秒杀场景,虚拟机就显得笨重了。

1.3 容器时代:轻量、快速、标准化

Docker在2013年横空出世的时候,我第一反应是:“这不就是个轻量级虚拟机吗?”但真正用起来才发现,完全不是一回事。

容器共享宿主机的操作系统内核,只打包应用和它的依赖。一个容器镜像可能只有几十MB,启动时间从分钟级降到了秒级。我做过一个压测,同样的应用,虚拟机启动要45秒,容器只要3秒。差距就是这么大。

Kubernetes的出现更是让容器如虎添翼。自动调度、弹性伸缩、服务发现,这些以前需要运维手动做的事情,现在全自动化了。我曾经帮一个客户迁移了200多个微服务到K8s集群,资源利用率从15%提升到了60%。

但容器也有它的“坑”。我踩过最深的一个坑是:容器内的文件系统是临时的。有一次线上日志没挂载外部存储,容器重启后所有日志全丢了。排查问题的时候,我对着空荡荡的日志目录,欲哭无泪。

避坑指南:我曾经因为没配置资源限制,导致一个容器把宿主机CPU吃满,影响了同节点的其他容器。记住:resources.limits 一定要设,别偷懒。

1.4 Serverless:让开发者只关心代码

容器虽然好,但你还是要管理集群、配置网络、处理节点故障。说白了,运维的活还是没少干。Serverless的出现,就是为了解决这个问题。

我第一次用AWS Lambda的时候,感觉像打开了新世界的大门。上传一个zip包,写几行代码,点击部署,完事。不用管服务器、不用管操作系统、不用管扩容。流量来了自动扩,没流量自动缩到零。你想想看,这得省多少事?

Serverless的核心思想是:把基础设施的复杂性完全抽象掉。你只需要关心业务逻辑,剩下的交给平台。我有个朋友,一个人用Serverless架构做了一个日活10万的H5游戏,后端代码不到1000行。换以前,至少得配一个3人团队。

但Serverless也不是银弹。我遇到过冷启动问题——函数长时间没被调用,再次触发时会有几秒的延迟。对于延迟敏感的场景,比如实时交易系统,这就很要命。

演进路线对比:

维度 物理机 虚拟机 容器 Serverless
资源粒度 整机 GB级 MB级 毫秒级计费
启动时间 小时级 分钟级 秒级 毫秒级
运维成本 极高 极低
弹性能力 手动 自动 自动+极致
适用场景 遗留系统 稳态应用 微服务 事件驱动、API

1.5 为什么企业需要 Serverless?

你可能要问:我们公司现在用K8s用得挺好的,为什么要换Serverless?

我个人的看法是:不是所有企业都需要,但大部分企业都能从中受益。尤其是这几类场景:

  • 业务波动大:比如电商、游戏、教育行业,流量高峰和低谷差距几十倍。Serverless的按需付费模式,能帮你省下大量闲置资源的成本。
  • 快速迭代:创业公司或者创新业务,需要快速验证想法。Serverless让你从“搭环境”中解放出来,专注业务逻辑。
  • 事件驱动型任务:比如图片处理、视频转码、数据清洗。这些任务不需要常驻服务,来一个事件触发一次,Serverless天然适合。
  • 降低运维门槛:小团队没有专职运维,Serverless平台帮你搞定高可用、容灾、监控。我见过一个5人团队,用Serverless架构支撑了百万用户的应用。

我的建议:不要一上来就全量迁移。选一个非核心、低风险的业务做试点。比如先做一个图片上传处理函数,跑通了再逐步扩大范围。我曾经帮一个客户从K8s迁移到Serverless,花了3个月时间,只迁移了30%的业务,但成本降低了40%。

当然,Serverless也有不适合的场景。比如长连接应用、需要GPU计算的任务、对延迟极其敏感的交易系统。这些场景,容器或者虚拟机可能更合适。

总结一下:从物理机到Serverless,本质上是不断抽象和简化基础设施的过程。每一次演进,都让开发者离业务更近,离机器更远。企业要不要上Serverless,取决于你的业务特点、团队能力和成本结构。但有一点是确定的:未来十年,Serverless一定会成为主流计算范式之一