第2章:Serverless基础

好,咱们正式开始聊Serverless。说实话,这个概念刚出来那会儿,我也觉得有点玄乎——「无服务器」?那代码跑在哪儿?后来真正上手做了几个项目,才明白这玩意儿到底解决了什么问题。

什么是Serverless?

Serverless,直译过来是「无服务器」。但别被字面意思骗了——服务器当然存在,只是你不用管了。你想想看,传统模式下,你要部署一个应用,得先买机器、装系统、配网络、搞监控……这些脏活累活,Serverless全帮你干了。

我个人习惯把Serverless理解成「把运维甩给云厂商」。你只管写代码,剩下的扩容、高可用、补丁升级,都是平台的事。说白了,就是让开发者回归业务本身。

核心思想:你不需要关心服务器在哪里、跑得怎么样,你只需要关心你的代码逻辑是否正确。

我在项目中遇到过不少团队,一开始觉得Serverless就是「云函数」,后来才发现这只是冰山一角。真正的Serverless生态,远不止函数计算这么简单。

核心概念:FaaS 和 BaaS

要搞懂Serverless,两个概念绕不开:FaaS 和 BaaS。它们就像Serverless的左右手,缺一不可。

FaaS(函数即服务)

FaaS 是 Serverless 最典型的形态。你上传一段代码,定义一个触发器(比如HTTP请求、消息队列、定时任务),平台自动帮你拉起实例、执行代码、然后销毁。按调用次数和运行时长计费,不跑就不花钱。

举个例子,一个图片缩略图处理函数:

// 伪代码 - 图片处理函数
exports.handler = async (event) => {
  const image = await getImage(event.bucket, event.key);
  const thumbnail = await resize(image, 200, 200);
  await saveToBucket('thumbnails', event.key, thumbnail);
  return { status: 'ok' };
};

这段代码,你不需要关心它跑在什么机器上,也不需要配置负载均衡。上传到云平台,绑定OSS的创建事件,每次有新图片上传,函数自动触发。嗯,就是这么简单。

我的经验:FaaS 最适合短任务、事件驱动的场景。如果你有个任务要跑几个小时,那还是考虑容器吧。我曾经见过有人用函数跑ETL,结果超时了——函数通常有最大执行时长限制,比如15分钟。

BaaS(后端即服务)

BaaS 是 Serverless 的另一半。它提供现成的后端服务,比如数据库、认证、存储、消息队列。你不需要自己搭建这些基础设施,直接调用API就行。

举个例子,你想给App加个用户登录功能。传统做法:搭个用户系统,写注册、登录、Token校验。用BaaS呢?直接调用云厂商的认证服务,几行代码搞定。

我建议初学者把BaaS理解成「乐高积木」。你需要什么功能,就去BaaS里找对应的积木,拼起来就行。不用自己从零造轮子。

注意:BaaS 虽然方便,但存在供应商锁定风险。你用了某家的数据库服务,换平台时可能得重写数据访问层。我的建议是:核心业务逻辑尽量抽象,BaaS只做胶水层。

主流平台对比

市面上主流的Serverless平台,我基本都用过。下面聊聊三个最常用的:AWS Lambda、阿里云函数计算、腾讯云函数。它们各有千秋,选哪个得看你的业务场景和团队技术栈。

特性 AWS Lambda 阿里云函数计算 腾讯云函数
运行时语言 Node.js、Python、Java、Go、.NET、Ruby、自定义运行时 Node.js、Python、Java、Go、PHP、.NET Core、自定义运行时 Node.js、Python、Java、Go、PHP、自定义运行时
最大执行时长 15分钟 12小时(异步) 900秒(15分钟)
并发限制 账户级别1000(可提额) 函数级别100(可提额) 函数级别128(可提额)
冷启动优化 Provisioned Concurrency 预留实例 预置并发
集成生态 极其丰富(S3、DynamoDB、SQS、SNS等) 丰富(OSS、OTS、RocketMQ等) 较丰富(COS、CMQ、CKafka等)
国内访问 需备案,延迟较高 优秀,有国内节点 优秀,有国内节点
计费模式 按调用次数+执行时长+内存 按调用次数+执行时长+内存+公网出流量 按调用次数+执行时长+内存+外网出流量

AWS Lambda

Lambda 是 Serverless 的鼻祖,生态最成熟。我在做全球化项目时首选它。它的集成能力太强了——S3、DynamoDB、SQS、API Gateway……几乎AWS所有服务都能跟Lambda无缝对接。

但有个坑:国内访问延迟高,而且需要备案。如果你主要服务国内用户,Lambda 不是最佳选择。

避坑指南:我曾经在Lambda里用Python处理大文件,结果内存不够。Lambda的内存上限是10GB,但CPU跟内存成正比。如果你需要大量CPU计算,记得选大内存配置。

阿里云函数计算

阿里云的函数计算,国内用户的首选。它的最大执行时长能到12小时(异步模式),这点很实用。我有个数据清洗任务,跑一次要半小时,用Lambda得拆成多个函数,用阿里云一个函数就搞定了。

另外,阿里云的预留实例功能做得不错。你可以指定一定数量的实例常驻,避免冷启动。对于延迟敏感的业务,这个功能很关键。

不过要注意,阿里云的函数计算默认有公网出流量费。如果你函数里访问了OSS(内网),记得用VPC绑定,不然流量费能让你肉疼。

腾讯云函数

腾讯云函数,跟微信生态结合得最好。如果你做小程序后端,腾讯云函数几乎是标配。它可以直接触发微信支付、模板消息等能力,开发效率很高。

但它的并发限制相对严格,默认只有128。如果你遇到流量突增,记得提前提额。我有个朋友做秒杀活动,没注意并发限制,结果函数被限流了——嗯,教训深刻。

我的建议:

  • 全球化业务 → AWS Lambda
  • 国内业务、阿里系生态 → 阿里云函数计算
  • 微信小程序、腾讯系生态 → 腾讯云函数
  • 想省钱、练手 → 哪个便宜用哪个,反正核心概念相通

小结

Serverless 不是什么黑科技,它只是把运维复杂度转移给了云厂商。你作为开发者,只需要关注两件事:写对业务逻辑,选对平台。

下一章,我们会深入API网关与Serverless的集成实战。到时候我会拿一个真实项目出来,带大家一步步搭建。嗯,敬请期待。