关于无服务器(Serverless)的讨论,我见过两种极端:要么觉得它能解决一切问题,要么认为这是个错误。但真实的情况比这两种极端都更有价值。

每个推销无服务器的人都会强调三点:不用管服务器、自动扩缩容、按用量付费。技术上都没错,但都不是全部真相。我上线过真正的生产级无服务器API——Go语言写的Lambda,挂在API Gateway后面,支撑真实的用户产品。我不是来劝退你的,对于合适的工作负载,它确实很棒。

打开网易新闻 查看精彩图片

但宣传与现实之间的差距是具体的,提前知道这些,能让你在早期做决策时省大钱。

打开网易新闻 查看精彩图片

冷启动真实存在,但和你想的不一样

Lambda冷启动发生在AWS需要为你的函数新建执行环境时:运行时启动,初始化代码运行,然后才是处理函数执行。Go语言在arm64架构上通常是50-150毫秒;Node.js或Python如果依赖很重,可能达到500毫秒到2秒。

没人重点说的是:冷启动是概率性的,不是必然发生。流量稳定时,大多数调用会命中热实例。P50甚至P95都很少看到,但在P99及更极端的尾部延迟里会冒出来——就在流量 spike 之后,或者周末安静后的第一个请求。

实用建议:在添加预置并发(Provisioned Concurrency)之前,先用真实流量在生产环境做分析。预置并发花钱还增加复杂度。对大多数API来说,更聪明的做法是优化初始化代码:懒加载依赖、保持二进制文件小巧、只初始化第一个请求真正需要的东西。先解决实际问题,再碰昂贵的方案。

账单数学会让你意外

Lambda定价纸上看起来简单:按请求次数和GB-秒的执行时间付费。低流量时几乎免费。但规模上来后,或者特定使用模式下,惊喜就来了。

最坑团队的场景:每次调用都做实质性工作的Lambda。解析大载荷、内存中转换、多次下游调用。这些函数运行时间长、内存用得多,单次调用成本比定价页面暗示的涨得快得多。

几个真实工作负载的数字:

• 轻量级REST Lambda(Go,128MB,平均20毫秒):每百万请求约0.40美元

打开网易新闻 查看精彩图片

• 重处理型Lambda(Node,512MB,平均800毫秒):每百万请求约8.00美元

每百万请求20倍的成本差距,在有真实流量时累积很快。相比跑服务器还是便宜,但"无服务器总是低成本"这个假设需要验证,不能想当然。

API Gateway的定价也常被忽略。HTTP API每百万请求3.50美元,高流量的公开端点可能让Gateway比它前面的Lambda还贵。得算清总账。

调试和可观测性是另一回事

本地开发时,你可以单步调试、打断点、快速迭代。无服务器环境里,这些都没了。日志分散在CloudWatch,跨多个函数追踪请求需要额外工具(X-Ray或第三方),本地模拟AWS服务永远不是1:1还原。

我见过团队在调试生产问题时,花在"搞清楚到底发生了什么"上的时间,比修bug本身还长。这不是不能克服,但要把这部分成本算进决策里。

什么时候该用,什么时候不该

无服务器在几种场景下是 genuinely excellent:流量波动大、事件驱动处理、快速原型验证、团队不想管基础设施。但在这些情况下要三思:持续高流量(成本曲线会翻转)、需要严格延迟保证(尾部延迟问题)、复杂有状态交互、团队缺乏相应的运维经验。

关键不是选边站,而是知道具体 trade-off 在哪里,然后在项目早期、改动还便宜的时候,做出知情选择。