第一章:云函数初探
大家好,我是老张。在云原生领域摸爬滚打了七八年,今天咱们来聊聊云函数。
说实话,我第一次接触云函数是在2017年。那时候AWS Lambda刚火起来,我还在用传统的ECS部署服务。记得有一次半夜三点被报警电话吵醒,就因为一台服务器挂了。嗯,从那以后,我就开始认真研究无服务器架构了。
什么是云函数?
云函数,说白了就是一段代码,你把它扔到云上,它自己就能跑起来。你不用管服务器、不用管操作系统、不用管扩容。你只需要关心一件事:你的业务逻辑。
我习惯这么跟新人解释:传统后端就像你租了一间办公室,水电物业都得自己操心。云函数呢,就像去咖啡厅办公,坐下就能干活,走人也不用管打扫。
云函数的核心特征:
- 事件驱动——有请求才执行,没请求就休眠
- 自动扩缩容——从0到1000并发,秒级完成
- 按量付费——用多少付多少,不用不花钱
- 无状态——每次调用都是全新的环境
你想想看,一个函数从接收到请求到返回结果,整个过程可能只需要几十毫秒。这背后云平台帮你做了多少事?容器调度、网络配置、安全隔离……全都不用你管。
云函数 vs 传统后端
我在项目中遇到过不少团队,纠结要不要上云函数。这里我给大家一个判断标准。
| 对比维度 | 传统后端(服务器) | 云函数 |
|---|---|---|
| 运维成本 | 高,需要配置Nginx、监控、日志 | 低,平台帮你搞定 |
| 扩缩容 | 手动或借助K8s,分钟级 | 自动,秒级 |
| 冷启动 | 无此问题 | 有,首次调用可能延迟 |
| 执行时长 | 无限制 | 通常有超时限制(如5分钟) |
| 适合场景 | 复杂业务、长连接、有状态服务 | API网关、数据处理、定时任务 |
我的建议:如果你的业务是典型的请求-响应模式,而且流量波动大,云函数是绝佳选择。但如果你要做WebSocket长连接或者需要操作本地文件系统,还是老老实实用服务器吧。
为什么会这样?因为云函数的本质是「无状态」。每次调用都是全新的环境,你不能依赖内存里的变量,也不能写本地磁盘。我曾经踩过这个坑——在函数里缓存了一个数据库连接池,结果第二次调用时连接早就断了。
主流云函数平台对比
目前市面上主流的云函数平台有三个:阿里云函数计算、腾讯云云函数、AWS Lambda。我都用过,说说我的感受。
阿里云函数计算(FC)
国内用得最多的平台。我个人习惯用FC做Web后端,配合API网关特别顺手。
- 支持Node.js、Python、Java、Go等主流语言
- 冷启动优化做得不错,预留实例可以解决大部分问题
- 集成度高,跟OSS、RDS、日志服务无缝对接
- 价格适中,有免费额度
腾讯云云函数(SCF)
如果你用微信生态,SCF是首选。我在做小程序后端时就用它。
- 跟微信云开发深度绑定
- 支持自定义运行时,可以跑PHP、Ruby
- 有层(Layer)功能,可以共享依赖包
- 冷启动比阿里云稍慢,但也在可接受范围
AWS Lambda
全球最成熟的云函数平台。我建议有出海业务的团队优先考虑。
- 支持语言最多,甚至能跑自定义二进制
- 生态最丰富,跟S3、DynamoDB、SQS配合完美
- 冷启动是老大难问题,但可以用Provisioned Concurrency解决
- 按毫秒计费,比国内平台更精细
避坑指南:我曾经在Lambda上跑过一个图像处理函数,每次处理需要30秒。结果发现Lambda的超时上限是15分钟,但API Gateway的超时只有29秒。嗯,这个问题折腾了我一整天。所以记住:云函数不是万能的,架构设计时一定要考虑上下游的约束。
一个简单的云函数示例
说了这么多,咱们来点实际的。下面是一个用Node.js写的云函数,功能很简单:接收用户ID,返回用户信息。
// 云函数:getUserInfo
exports.handler = async (event, context) => {
// 从事件中提取参数
const userId = event.queryStringParameters?.userId;
if (!userId) {
return {
statusCode: 400,
body: JSON.stringify({ error: '缺少userId参数' })
};
}
// 模拟数据库查询
const user = {
id: userId,
name: '张三',
age: 28,
createTime: new Date().toISOString()
};
return {
statusCode: 200,
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(user)
};
};
你看,就这么几行代码。没有Express、没有Nginx、没有PM2。部署到云上,配个API网关,一个完整的后端接口就出来了。
小技巧:写云函数时,我习惯把业务逻辑和入口函数分开。入口函数只做参数校验和错误处理,真正的逻辑放到单独的文件里。这样测试起来方便,也更容易复用。
什么时候不该用云函数?
最后说点实在的。云函数虽好,但不是银弹。我见过有人把整个电商后端都塞进云函数里,结果维护起来比传统架构还痛苦。
以下几种情况,我建议你慎重:
- 需要长时间运行的任务——比如视频转码,超过15分钟就尴尬了
- 有状态的服务——比如游戏服务器,需要维护玩家在线状态
- 对延迟极度敏感的场景——冷启动再优化,也比不上常驻进程
- 复杂的微服务编排——函数之间互相调用,调试起来想哭
好了,第一章就到这里。下一章咱们聊聊怎么搭建开发环境,手把手教你写出第一个云函数。
公众号:蓝海资料掘金营,微信deep3321