spinny:~/writing $ less serverless-aws-lambda-vercel-cloudflare.md
12Serverless 计算让你无需管理服务器即可运行代码。你编写函数,部署它们,平台处理扩展、可用性和基础设施。在 2026 年,三个平台主导了 serverless 领域:**AWS Lambda**、**Vercel Serverless Functions** 和 **Cloudflare Workers**。每个都有不同的优势和权衡。34在本文中,我们通过真实示例、性能考量和定价分析来对它们进行比较。56## Serverless 如何工作78```mermaid9graph LR10 User -- "HTTP Request" --> Gateway[API Gateway / Edge]11 Gateway -- "Invoke" --> Function[Serverless Function]12 Function -- "Response" --> User13 Function -- "Read/Write" --> DB[(Database)]14```1516你部署一个函数。当请求到达时,平台会:171. 启动一个执行环境(或重用一个已热启动的环境)182. 运行你的函数193. 返回响应204. 空闲时缩减到零(你不需要为空闲时间付费)2122## 平台概览2324### AWS Lambda2526最初的 serverless 平台(2014 年推出)。最成熟、功能最丰富,与 AWS 生态系统深度集成。2728```javascript29// AWS Lambda handler30export const handler = async (event) => {31 const body = JSON.parse(event.body);3233 const result = await processData(body);3435 return {36 statusCode: 200,37 headers: { 'Content-Type': 'application/json' },38 body: JSON.stringify(result),39 };40};41```4243### Vercel Serverless Functions4445与 Next.js 和前端部署工作流紧密集成。函数与你的前端一起部署,无需配置。4647```typescript48// app/api/hello/route.ts (Next.js App Router)49import { NextResponse } from 'next/server';5051export async function GET(request: Request) {52 const { searchParams } = new URL(request.url);53 const name = searchParams.get('name') || 'World';5455 return NextResponse.json({ message: `Hello, ${name}!` });56}57```5859### Cloudflare Workers6061在全球 300 多个城市的 Cloudflare 边缘网络上运行。使用 V8 引擎(与 Chrome 相同)而非 Node.js,这意味着极快的冷启动。6263```javascript64// Cloudflare Worker65export default {66 async fetch(request, env) {67 const url = new URL(request.url);68 const name = url.searchParams.get('name') || 'World';6970 return new Response(71 JSON.stringify({ message: `Hello, ${name}!` }),72 { headers: { 'Content-Type': 'application/json' } }73 );74 },75};76```7778## 功能比较7980| 功能 | AWS Lambda | Vercel Functions | Cloudflare Workers |81|---------|-----------|-----------------|-------------------|82| **运行时** | Node.js, Python, Go, Rust, Java, .NET | Node.js, Python, Go, Ruby | V8 Isolates (JS/TS, Rust via WASM) |83| **最大执行时间** | 15 分钟 | 60s (Hobby), 300s (Pro) | 30s (免费), 15min (付费) |84| **内存** | 128MB - 10GB | 1024MB - 3008MB | 128MB |85| **冷启动** | 100-500ms | 100-300ms | < 5ms |86| **部署位置** | 单区域(或多区域但需额外工作) | 多区域 | 300+ 边缘位置 |87| **最大负载** | 6MB(同步),256KB(异步) | 4.5MB | 100MB |88| **内置存储** | 否(使用 DynamoDB、S3) | 否(使用外部数据库) | KV、D1 (SQLite)、R2(兼容 S3) |89| **定价模式** | 按请求 + 持续时间 | 包含在计划中 | 按请求 + 持续时间 |90| **免费额度** | 每月 1M 请求 | 每月 100K (Hobby) | 每天 100K 请求 |9192## 冷启动9394冷启动是初始化新函数实例所需的时间。这是 serverless 最大的性能顾虑。9596```mermaid97graph LR98 subgraph "Cold Start"99 A[Request] --> B[Provision Environment]100 B --> C[Load Code]101 C --> D[Initialize Runtime]102 D --> E[Execute Function]103 end104105 subgraph "Warm Invocation"106 F[Request] --> G[Execute Function]107 end108```109110| 平台 | 典型冷启动时间 | 原因 |111|----------|-------------------|-----|112| **Cloudflare Workers** | < 5ms | V8 隔离,不需要完整运行时 |113| **Vercel Functions** | 100-300ms | 边缘或区域的 Node.js 运行时 |114| **AWS Lambda** | 100-500ms | 完整容器初始化 |115| **AWS Lambda (Java)** | 1-5 秒 | JVM 启动开销 |116117Cloudflare Workers 在冷启动方面以巨大优势获胜,因为它们使用 V8 隔离而不是容器。118119## 定价比较120121### 免费额度122123| 平台 | 免费请求数 | 免费计算 |124|----------|--------------|--------------|125| **AWS Lambda** | 每月 1M | 400,000 GB-秒 |126| **Vercel** | 每月 100K | 包含在 Hobby 计划中 |127| **Cloudflare Workers** | 每天 100K(约每月 3M) | 每次调用 10ms CPU |128129### 大规模使用(每月 10M 请求,平均持续时间 50ms)130131| 平台 | 估计月费用 |132|----------|----------------------|133| **AWS Lambda** | ~$2.50(请求)+ ~$4.15(计算)= **~$6.65** |134| **Vercel** | **$20/月**(Pro 计划,包含函数) |135| **Cloudflare Workers** | **$5/月**(付费计划,包含 10M 请求) |136137对于大多数用例,Cloudflare Workers 是最便宜的。Vercel 的定价简单,但包含整个平台(托管、CDN、分析)。AWS Lambda 的定价最为精细。138139## 真实世界用例140141### AWS Lambda:最适合142143- **复杂的后端工作流** - step functions、事件驱动架构144- **与 AWS 服务集成** - S3 触发器、DynamoDB 流、SQS 队列145- **长时间运行的任务** - 最多 15 分钟的执行时间146- **多语言团队** - 支持最广泛的运行时147148```mermaid149graph TD150 S3[S3 Upload] --> Lambda1[Process Image]151 Lambda1 --> SQS[SQS Queue]152 SQS --> Lambda2[Generate Thumbnails]153 Lambda2 --> DDB[DynamoDB]154 DDB --> Lambda3[Send Notification]155 Lambda3 --> SNS[SNS / Email]156```157158### Vercel Functions:最适合159160- **Next.js 应用** - 零配置 API 路由161- **前端优先的团队** - 前端和后端一起部署162- **快速原型开发** - git push 即部署163- **Jamstack 架构** - 静态前端 + serverless API164165```typescript166// app/api/subscribe/route.ts167import { NextResponse } from 'next/server';168169export async function POST(request: Request) {170 const { email } = await request.json();171172 // Validate173 if (!email || !email.includes('@')) {174 return NextResponse.json(175 { error: 'Invalid email' },176 { status: 400 }177 );178 }179180 // Save to database181 await db.subscribers.create({ email });182183 return NextResponse.json({ success: true });184}185```186187### Cloudflare Workers:最适合188189- **低延迟 API** - 代码在全球 300 多个位置运行190- **边缘计算** - 转换响应、A/B 测试、个性化191- **高流量 API** - 大规模使用时最便宜,免费额度慷慨192- **全球应用** - 通过 KV 和 D1 将数据放在用户附近193194```javascript195// Edge-side A/B test196export default {197 async fetch(request, env) {198 const url = new URL(request.url);199200 // Assign user to variant201 const cookie = request.headers.get('Cookie') || '';202 let variant = cookie.includes('ab=b') ? 'b' : 'a';203204 if (!cookie.includes('ab=')) {205 variant = Math.random() < 0.5 ? 'a' : 'b';206 }207208 // Fetch the appropriate version209 const response = await fetch(`${url.origin}/variants/${variant}`);210 const newResponse = new Response(response.body, response);211212 // Set cookie for consistent experience213 newResponse.headers.set('Set-Cookie', `ab=${variant}; Path=/; Max-Age=86400`);214215 return newResponse;216 },217};218```219220## 何时选择哪个221222### 选择 AWS Lambda 如果:223- 你已经深入使用 AWS 生态系统224- 你需要长时间运行的函数(最多 15 分钟)225- 你需要复杂的事件驱动架构226- 你需要 JavaScript 之外的运行时(Python、Go、Rust、Java)227228### 选择 Vercel Functions 如果:229- 你正在使用 Next.js 或前端框架开发230- 你想要最简单的部署体验(git push)231- 你的团队以前端为主232- 你想要托管 + 函数 + CDN 集于一个平台233234### 选择 Cloudflare Workers 如果:235- 你需要全球最低的延迟236- 你想要大规模使用时最便宜的选项237- 你需要边缘计算能力238- 冷启动时间对你的用例至关重要239240## 可以组合使用吗?241242当然可以。一个常见的架构:243244```mermaid245graph TD246 User --> CF[Cloudflare Workers\nEdge caching, routing, A/B tests]247 CF --> Vercel[Vercel\nNext.js frontend + API routes]248 Vercel --> Lambda[AWS Lambda\nHeavy processing, background jobs]249 Lambda --> S3[S3 Storage]250 Lambda --> DB[(Database)]251```252253- **Cloudflare Workers**:边缘路由、缓存、安全254- **Vercel Functions**:前端 API 路由、SSR255- **AWS Lambda**:重度后端处理、定时任务、事件管道256257## 结论258259Serverless 已经显著成熟。在 2026 年,AWS Lambda、Vercel Functions 和 Cloudflare Workers 之间的选择取决于你的技术栈和优先级:260261- **最简单的开发者体验**:Vercel262- **最强大和灵活**:AWS Lambda263- **最佳性能和定价**:Cloudflare Workers264265三者都已经可用于生产环境并经过实战检验。从适合你当前技术栈的那个开始,随着需求的增长进行扩展。266
:Serverless 实践:AWS Lambda vs Vercel Functions vs Cloudflare Workerslines 1-266 (END) — press q to close