回想起曾经怎么都搞不懂无服务器,于是索性把那些疑问整理出来请教博士。

服务器消失了?魔法师的真面目

🧙‍♂️(博士)「🐣啊,今天我们要搞懂无服务器。名字听起来好像是“把服务器变没的魔法”,其实真相朴实得多,却藏着门道。」

🐣(学生)「没有服务器?难道博士像哈利·波特那样念“服务器,消失!”它就真的不见了?」

🧙‍♂️(博士)「哈哈哈,这正是十个人里九个的第一反应!其实并不是没有服务器。云的深处那些机器照样干得火热,只是使用者不用再操心它们的存在。」

🐣(学生)「那不就是骗人嘛。标着“无农药蔬菜”,背地里还猛喷药。」

🧙‍♂️(博士)「比喻离谱但抓到重点。“无服务器”的“无”是“无需管理”。过去得自己养服务器、装系统、救火,像在养仓鼠。无服务器则由云服务商全包了。」

🐣(学生)「仓鼠死了会哭,服务器挂了客户会骂,更惨。」

🧙‍♂️(博士)「而且服务器不像仓鼠,只会在凌晨三点把你叫醒:“数据库没有响应。”」


📌 注记:无服务器的基本概念 无服务器(Serverless)并不是“没有服务器”,而是“服务器的管理由云服务商代劳”的架构。

  • 传统模式:自行采购、部署、运维服务器
  • 无服务器:云厂商全权管理基础设施,使用者专注代码

无服务器的运作:只在被召唤时现身的忍者

🐣(学生)「听起来难用啊,跟普通服务器到底有啥不同?」

🧙‍♂️(博士)「确实。无服务器是被叫到才“砰”地弹出,处理完立刻消失。所以应用要设计成“短跑选手”,不适合马拉松。」

🐣(学生)「也就是说喊“快算一下!”它就出现,完成就消失?」

🧙‍♂️(博士)「正是如此!就像忍者,呼叫才现身。平时隐身,不用为空闲时间付房租。」

🐣(学生)「可是忍者每次都从不同地方冒出来吧。那 IP 地址怎么办?」

🧙‍♂️(博士)「问得好!他们没有固定住址。每次都是新的服务器,于是云端的 API 网关就像“忍者村门房”,把外部请求分派给合适的忍者。」

🐣(学生)「原来如此。但既然每次出现的忍者都不同,那岂不是没有前一次的记忆?」

🧙‍♂️(博士)「没错。所以必须是无状态的设计。不能说“接着昨天”,每次都是“初次见面”,记忆像金鱼。」

🐣(学生)「那不是很不方便?登录、会话怎么管?」

🧙‍♂️(博士)「要把状态存到外部数据库或 Redis。忍者本体不带记忆,但会把卷轴交给仓库保管。」


📌 注记:无状态设计的重要性 无服务器函数每次执行都会在新的容器里启动,本地状态(变量、文件、会话)不会保留。

  • 状态管理:需使用外部数据库、Redis、S3 等
  • 会话:利用 JWT 令牌或外部存储
  • 文件:除临时处理外必须放在外部存储

与传统服务器的差异:宠物 vs 忍者

🐣(学生)「具体点是什么样?」

🧙‍♂️(博士)「比如“上传图片就生成缩略图”。传统模式得有台 24 小时待命的服务器一直等,耗电又可能故障。」

🐣(学生)「就像守门人一直站在门口“有人来吗”。」

🧙‍♂️(博士)「没错,还会感冒倒下。无服务器则是在“图片上传了!”这个铃声响时忍者出现,快手生成缩略图后消失。」

🐣(学生)「确实合理。但忍者出现会不会慢?」

🧙‍♂️(博士)「那就是冷启动问题。忍者从睡梦中醒来准备要几秒。尤其 Java 那些重量级语言,就像迷糊的忍者先铺瑜伽垫再吃早餐才开工。」

🐣(学生)「听着就着急。那是不是不适合实时处理?」

🧙‍♂️(博士)「有预热机制,但总体还是擅长批处理和异步。“立刻回复!”这类就不拿手。」


用实例理解:照片分享应用

🐣(学生)「举个例子呗。如果要做照片分享应用呢?」

🧙‍♂️(博士)「好例子。传统模式是这样:」

传统服务器:

24 小时运行的 Web 服务器(月费 5000 日元)
↓
「照片已上传」
↓
服务器内执行缩略图生成
↓
存入数据库

🧙‍♂️(博士)「这种方式就算没人传照片也得付 5000 日元,就像“没客人也照样交房租的店铺”。」

🐣(学生)「太浪费了。」

🧙‍♂️(博士)「无服务器则是这样:」

无服务器版:

图像上传到 S3
↓
S3 事件触发 Lambda 函数
↓
Lambda 函数启动(0.1 秒)
↓
生成缩略图并存入另一个 S3 存储桶
↓
Lambda 函数消失
↓
计费:只按执行时间收费(每次约 0.001 日元)

🐣(学生)「那没人用就免费?」

🧙‍♂️(博士)「没错!基本是“用多少付多少”。但一旦“突然爆红”,账单也会暴走。要是病毒视频触发一百万次处理……」

🐣(学生)「就来一张 1000 日元的账单!」

🧙‍♂️(博士)「算得对,但实际上还得加上传输费、API Gateway 费用、数据库费用,轻松飙到数十万。就是“火了却破产”的现代悲剧。」


📌 注记:按量计费的利与弊

优势

  • 初始成本几乎为零
  • 随使用量自动扩缩
  • 无需自行管理基础设施

风险

  • 意料之外的高额账单(尤其爆红时)
  • 费率结构复杂
  • 多个服务叠加后费用难以看清

对策

  • 设置计费告警
  • 实施速率限制
  • 事先做压测与费用评估

无服务器的派别:忍者的专长

🐣(学生)「听说无服务器还有很多类型?」

🧙‍♂️(博士)「主要有三大流派:FaaS(Function as a Service)、BaaS(Backend as a Service),以及无服务器容器。」

🐣(学生)「FaaS 是啥?」

🧙‍♂️(博士)「就是“只托管函数”的服务。AWS Lambda、Google Cloud Functions、Azure Functions 都算。你写个函数交给它,需要时就调用,费用按次算,像寿司店。」

🐣(学生)「那 BaaS 呢?」

🧙‍♂️(博士)「是“数据库、认证、推送通知都包办”的服务。Firebase、Supabase、AWS Amplify 之类。好比“妈妈全帮你搞定的老家生活”。」

🐣(学生)「住在老家轻松,但得听爸妈的。」

🧙‍♂️(博士)「正是!这就是供应商锁定的风险。回过神来就变成了“离不开这项服务的身体”。」


无服务器擅长与不擅长的事

🐣(学生)「那努力点自己扛不就行了?为什么还要用无服务器?」

🧙‍♂️(博士)「因为速度。想到点子就能立刻上线,使用少的时候几乎零成本。“今晚想到的 Web 服务明早就上线”完全可能。」

🐣(学生)「可也不是啥都适合吧?」

🧙‍♂️(博士)「当然,优缺点很鲜明。」

擅长:

  • 图像处理(上传→生成缩略图)
  • 数据转换(CSV→JSON)
  • 发送通知(邮件、推送)
  • 定时批处理(生成日报)
  • 轻量 API(用户搜索、数据读取)

不擅长:

  • 实时处理(聊天、游戏)
  • 长耗时任务(视频转码、机器学习)
  • 需要复杂状态管理的应用
  • 与遗留系统紧耦合

🐣(学生)「也就是“爆发力强但没耐力”?」

🧙‍♂️(博士)「对!百米冲刺很强,跑全马就不行的选手。」


计费陷阱:忍者按小时领工资

🐣(学生)「所以这是“肌肉型选手用不上,一不小心就被账单干掉,但聪明人能省钱”的东西?」

🧙‍♂️(博士)「没错!无服务器就是“动脑就赚,松懈就爆炸”。不了解计费机制就会下地狱。」

🐣(学生)「什么样的地狱?」

🧙‍♂️(博士)「比如写了个无限循环。传统服务器就是“服务器变慢”,无服务器却会“新的忍者被无穷召唤”。」

🐣(学生)「忍者大军 24 小时干活,然后不断来结时薪?恐怖片吧。」

🧙‍♂️(博士)「而且常常到月末收到账单才发现:“咦?为什么是 100 万日元?”AWS 被收好几百万的案例多得是。」

🐣(学生)「太吓人了。能防吗?」

🧙‍♂️(博士)「当然。设置计费告警、执行时间上限、并发数限制。就像认真写好“忍者的雇佣合同”。」


真实事故:爆红时的恐惧

🐣(学生)「真的有人被收过巨额账单吗?」

🧙‍♂️(博士)「多得是。有名的案例是“照片美化应用爆红被收 300 万日元”。」

🐣(学生)「哇……细说。」

🧙‍♂️(博士)「一家新创做了“用 AI 美化照片”的应用,预估每张 0.1 日元。」

🐣(学生)「结果呢?」

🧙‍♂️(博士)「被社交媒体刷屏,一天上传 100 万张,单张处理时间也超预期,实际变成“每张 3 日元”。」

🐣(学生)「100 万张 × 3 日元 = 300 万日元……」

🧙‍♂️(博士)「而且连跑了 30 天。“火了但公司倒了”的现代悲剧。」

🐣(学生)「没做防护?」

🧙‍♂️(博士)「没有设限。因为觉得“不可能那么火”。现在大家都知道要设“成功上限”。」

🐣(学生)「“成功上限”这词真讽刺。」

🧙‍♂️(博士)「“高兴得尖叫”真会变成悲鸣。」


开发体验的变化:魔法的快感与约束的苦涩

🐣(学生)「开发起来是什么感觉?跟普通程序不一样?」

🧙‍♂️(博士)「一开始很爽。“写个函数点一下部署”就全世界上线,像成了魔法师。」

🐣(学生)「哇,确实听着开心。」

🧙‍♂️(博士)「但熟悉后各种问题浮现。本地不好测,调试也麻烦。想问“为什么不动?”时忍者已经消失,只能追日志。」

🐣(学生)「像到案发现场只剩证据?」

🧙‍♂️(博士)「比喻精准,而且那些日志散落在 CloudWatch、X-Ray、CloudTrail 等服务,得玩侦探游戏。」

🐣(学生)「真麻烦。直接搭服务器不是更省心?」

🧙‍♂️(博士)「这就是“无服务器的陷阱”。起初像魔法,后来像诅咒。但一旦习惯,就再也不想回去伺候服务器。」

🐣(学生)「意思是会上瘾?」

🧙‍♂️(博士)「是的。“不用管服务器”的快感像毒药,却换来“担心账单”和“设计限制”的压力。」


无服务器 vs 传统:成本现实

🐣(学生)「最后还是钱。哪边划算?」

🧙‍♂️(博士)「很复杂,取决于“用量”和“可预测性”。我们画个图想象:

传统服务器

  • 固定成本:每月 5 万日元
  • 变动成本:几乎为零
  • “定食店”模式

无服务器

  • 固定成本:几乎为零
  • 变动成本:依赖使用量
  • “回转寿司”模式」

🐣(学生)「哪边便宜取决于“吃多少”啊。」

🧙‍♂️(博士)「没错!小胃口去回转寿司,大胃口选定食店。具体来说:

每月请求少于 100 万次:无服务器压倒性便宜 每月请求超过 1000 万次:传统服务器更划算 介于两者之间:得同时考虑两种方案与运维成本」

🐣(学生)「要是预测错了呢?」

🧙‍♂️(博士)「那就是赌博。“去定食店准备大吃结果没胃口”“去回转寿司想随便吃结果成了大胃王”都会发生。」


无服务器会成功吗?

🐣(学生)「所以无服务器到底会成功还是失败?」

🧙‍♂️(博士)「不会有“完全胜利”或“彻底失败”。传统、容器、无服务器会共存,各用所长。世界需要忍者、骑士、魔法师。」

🐣(学生)「明白,没有任何技术能解决所有问题。」

🧙‍♂️(博士)「对。没有银弹,但在合适场景非常强。」

🐣(学生)「那推荐给什么人?」

🧙‍♂️(博士)「比如说:

适合无服务器的人

  • 想先快速做出能运行的东西
  • 有理解计费体系的算术能力
  • 更倾向于轻松管理而非完全掌控
  • 对新技术充满热情

不适合无服务器的人

  • 想全部自己管理的工匠型
  • 不擅长预算管理
  • 把稳定运行看得高于一切
  • 离不开遗留系统的人」

🐣(学生)「也就是“喜欢新东西又会精打细算”?」

🧙‍♂️(博士)「概括得妙。这项技术需要同时具备“创新”和“节俭”。」


结语:把无服务器当作生活方式

🐣(学生)「博士最后会推荐无服务器吗?」

🧙‍♂️(博士)「我不说“推荐”,我会说“理解后再用”。无服务器是把“便利的诱惑”和“风险的现实”放上天平的现代咒语。」

🐣(学生)「咒语啊……但咒语念错会反噬自己吧。」

🧙‍♂️(博士)「没错。所以要学会“正确的念法”。无服务器是“动脑就赚、疏忽就爆炸”。不适合蛮力型,但聪明用就成了武器。」

🐣(学生)「明白了,也就是说:

  • 服务器运维:靠肌肉硬撑的地狱修行
  • 无服务器:用脑袋控制的账单生存战 对吧?」

🧙‍♂️(博士)「总结完美。选择取决于情境,但“什么都不选”已经不是选项。当代工程师必须在“骑士、忍者、魔法师”之间抉择。」

🐣(学生)「明白。先打好基础,再考虑忍者。」

🧙‍♂️(博士)「保持这个心态,你也能成为优秀的“忍者使役者”。只是别忘了盯账单。」

🐣(学生)「好的!一定会设置计费告警!」


📌 最终注记:采用无服务器的决策框架

是否采用无服务器,需要综合评估下列因素:

技术因素

  • 处理性质(批处理 vs 实时)
  • 执行频率(低频 vs 高频)
  • 状态管理需求
  • 与遗留系统的联动

业务因素

  • 初始投资预算
  • 运维团队的技能
  • 增长预测的可靠性
  • 对供应商锁定的容忍度

结论:无服务器不是“万能解”,而是“在特定场景发挥威力的专门技术”。理解与准备充分时它是强大的武器,盲目引入则可能换来高额账单。

对于当代工程师而言,无服务器是“必须了解的选项之一”,也是“要因地制宜地分工使用的技术”。