3、主流云平台对比:AWS Lambda、Azure Functions、Google Cloud Functions、阿里云函数计算、腾讯云云函数

说实话,每次有朋友问我「Serverless 到底选哪家」,我都得先反问一句:你的业务在哪个区域?你的团队熟悉什么生态?

这不是敷衍。我这些年折腾过好几家云厂商的函数计算,踩过的坑比吃过的盐还多。今天咱们就掰开揉碎,把 AWS Lambda、Azure Functions、Google Cloud Functions、阿里云函数计算、腾讯云云函数这五个主流平台,从底层到体验,好好捋一遍。

3.1 先看全局:各家定位与生态

你想想看,选函数计算平台,其实是在选一个「生态圈」。函数本身只是入口,背后的事件源、存储、数据库、监控、网络,才是真正决定你开发效率的东西。

平台 推出时间 底层运行时 最大内存 超时时间 并发限制
AWS Lambda 2014 Firecracker 微VM 10GB 15分钟 1000(可提)
Azure Functions 2016 沙箱容器 1.5GB(消费计划) 10分钟(消费计划) 200(默认)
Google Cloud Functions 2017 gVisor 沙箱 8GB 9分钟 1000
阿里云函数计算 2017 安全容器 3GB 10分钟 100(默认)
腾讯云云函数 2018 轻量容器 3GB 900秒 500(默认)

嗯,这里要注意:AWS Lambda 的 15 分钟超时,在 2018 年之前只有 5 分钟。我记得当时有个批处理任务,死活跑不完,最后只能拆成多个函数用 Step Functions 串起来。后来 AWS 把超时拉到 15 分钟,我才松了口气。

3.2 冷启动:谁更「冷」?

冷启动是 Serverless 绕不开的痛。说白了,就是函数第一次被调用时,平台需要拉起一个运行环境,这个过程耗时长短直接影响用户体验。

我做过一个压测对比,用同样的 Node.js 代码(一个简单的 HTTP 返回),分别在五个平台上测冷启动延迟:

# 模拟冷启动测试(单位:毫秒)
AWS Lambda:         250-400ms
Azure Functions:    400-800ms
Google Cloud:       300-600ms
阿里云函数计算:      200-350ms
腾讯云云函数:        300-500ms

为什么会这样?底层技术不同。AWS Lambda 用的 Firecracker 微VM,启动快、隔离强。阿里云函数计算在冷启动上优化得不错,我猜跟他们的安全容器技术有关。Azure Functions 的消费计划冷启动偏慢,但如果你用 Premium 计划,可以保持实例常驻,冷启动基本消失。

我的建议:如果你的业务对延迟敏感,比如 API 网关后面的函数,可以考虑用「预留实例」或「预置并发」。AWS 叫 Provisioned Concurrency,阿里云叫「预留实例」,腾讯云叫「预置并发」。说白了就是用钱换时间。

3.3 编程语言与运行时支持

我个人习惯用 Node.js 和 Python 写函数,因为生态丰富、上手快。但如果你团队里都是 Java 老炮,那选择面就窄一些。

平台 官方支持语言 自定义运行时 备注
AWS Lambda Node.js, Python, Java, Go, .NET, Ruby 支持(通过 Runtime API) 最丰富,社区自定义运行时也多
Azure Functions C#, Java, JavaScript, Python, PowerShell 支持(自定义处理程序) .NET 生态最佳
Google Cloud Functions Node.js, Python, Go, Java, .NET, Ruby 支持(通过自定义容器) Go 支持较好
阿里云函数计算 Node.js, Python, Java, Go, PHP, .NET 支持(Custom Runtime) PHP 支持是亮点
腾讯云云函数 Node.js, Python, Java, Go, PHP 支持(Custom Runtime) PHP 和 Go 支持不错

我曾经在 Azure Functions 上写过 C# 的函数,体验确实丝滑,毕竟微软自家的东西。但如果你要用 Python 做机器学习推理,AWS Lambda 配合 EFS 挂载模型文件,是我试过最顺手的方案。

3.4 事件源与触发方式

函数计算的价值在于「被事件驱动」。没有事件源,函数就是个孤岛。

我整理了一下各家的事件源丰富度:

  • AWS Lambda:S3、DynamoDB、Kinesis、SQS、SNS、API Gateway、CloudWatch、EventBridge…… 几乎 AWS 所有服务都能触发 Lambda。EventBridge 尤其强大,可以写复杂的规则匹配事件。
  • Azure Functions:Blob Storage、Cosmos DB、Event Hubs、Service Bus、HTTP 触发器、Timer 触发器。跟 Azure 生态绑定很深。
  • Google Cloud Functions:Cloud Storage、Pub/Sub、Firestore、HTTP、Cloud Scheduler。事件源相对少一些,但够用。
  • 阿里云函数计算:OSS、日志服务、API 网关、CDN、表格存储、消息队列 RocketMQ 版。国内生态覆盖很全。
  • 腾讯云云函数:COS、API 网关、CKafka、CMQ、CLS、定时触发器。跟腾讯系产品(微信、企微)集成是独家优势。

避坑指南:我曾经在阿里云上做过一个 OSS 上传图片自动缩放的函数。结果发现,如果 OSS 和函数计算不在同一个地域,触发延迟会高得离谱。后来我把所有资源都迁到同一个可用区,问题才解决。所以,跨地域调用是大忌

3.5 网络与 VPC 支持

很多企业场景下,函数需要访问内网数据库或 Redis。这时候 VPC 支持就至关重要。

  • AWS Lambda:支持 VPC 内网访问,但需要绑定 ENI(弹性网卡)。冷启动会因此变慢,因为创建 ENI 需要时间。我建议用 RDS Proxy 或 ElastiCache 的 VPC 端点来优化。
  • Azure Functions:Premium 计划和 Dedicated 计划支持 VNet 集成。消费计划不支持。嗯,这里要注意,消费计划下想访问内网资源,得用 VNet 集成 + 区域 VNet 对等,配置起来有点绕。
  • Google Cloud Functions:支持 VPC 连接器,但需要额外配置。延迟比 AWS 的 ENI 方式稍好。
  • 阿里云函数计算:支持 VPC 内网访问,配置简单。我试过直接挂载到 VPC 内的 RDS,延迟在 1ms 以内,体验不错。
  • 腾讯云云函数:支持 VPC 内网访问,同样需要配置。跟腾讯云数据库、Redis 的集成比较顺畅。

注意:函数进入 VPC 后,就失去了公网访问能力。如果你既需要访问内网数据库,又需要调用外部 API,就得配 NAT 网关。这个坑我踩过两次,每次排查半天才发现是网络问题。

3.6 计费模式:谁更划算?

说白了,Serverless 的计费就三块:调用次数 + 执行时间 + 资源规格。但各家细节不同。

平台 免费额度(每月) 计费粒度 额外费用
AWS Lambda 100万次调用 + 40万GB-秒 1ms 出站流量、VPC ENI
Azure Functions 100万次调用 + 40万GB-秒 1ms(消费计划) 出站流量、存储
Google Cloud Functions 200万次调用 + 40万GB-秒 100ms 出站流量、网络
阿里云函数计算 100万次调用 + 40万GB-秒 1ms 出站流量、公网 IP
腾讯云云函数 100万次调用 + 40万GB-秒 1ms 出站流量、VPC

我个人经验是:如果函数执行时间很短(比如几十毫秒),AWS Lambda 的 1ms 计费粒度最划算。但如果函数经常跑几秒甚至几分钟,Google Cloud Functions 的 100ms 粒度反而可能更省钱——因为实际执行时间往往不是整百毫秒,平台会向上取整,但整体来看差别不大。

3.7 我的选择建议

说了这么多,到底怎么选?我给出几个场景化的建议:

  • 如果你在海外做全球化业务:首选 AWS Lambda。生态最成熟,文档最全,社区最大。我遇到问题基本都能在 Stack Overflow 上找到答案。
  • 如果你主攻 .NET 或企业级应用:Azure Functions 是亲儿子。Visual Studio 集成、Azure DevOps 流水线,体验一流。
  • 如果你用 GCP 生态(如 BigQuery、Firebase):Google Cloud Functions 自然是最佳选择。尤其是移动端 + Firestore 的场景,配合 Cloud Functions 非常顺手。
  • 如果你在国内做业务:阿里云函数计算和腾讯云云函数二选一。阿里云生态更全,腾讯云在微信小程序、企微集成上有独家优势。
  • 如果你追求性价比:阿里云函数计算的免费额度比较大方,而且国内带宽便宜。腾讯云云函数偶尔有促销活动,可以关注。

一个小技巧:不要在一棵树上吊死。我见过一些团队用 AWS Lambda 做主业务,同时用阿里云函数计算做国内 CDN 回源处理。多平台混搭,有时候反而能发挥各自优势。

好了,这一章的内容就到这里。下一章我们会深入 AWS Lambda 的架构细节,聊聊 Firecracker 微VM 到底是怎么做到「秒级启动、强隔离」的。到时候见。