第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的集成实战。到时候我会拿一个真实项目出来,带大家一步步搭建。嗯,敬请期待。