Serverless开发指南

Serverless vs 容器

方面Serverless(Lambda)容器(ECS/K8s)
扩缩容即时,每请求,可达数千并发基于 Pod,扩容需几分钟
成本按调用次数 + 时长计费按预留容量计费
冷启动首次请求 50ms~2s无(始终热机)
最长运行15 分钟(Lambda)无限制
状态无状态(需外部存储)可有状态
最适合流量突发、异步处理、API长时运行、持续负载

Lambda 函数模式

// AWS Lambda 处理器(Node.js) export const handler = async (event, context) => { // 针对 API Gateway if (event.httpMethod) { const body = JSON.parse(event.body || '{}'); return { statusCode: 200, headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ message: 'OK', data: body }) }; } // 针对 SQS 批量处理 if (event.Records) { const failures = []; for (const record of event.Records) { try { await processMessage(JSON.parse(record.body)); } catch (err) { failures.push({ itemIdentifier: record.messageId }); } } return { batchItemFailures: failures }; // 部分批次响应 } }; # SAM 模板 Resources: MyFunction: Type: AWS::Serverless::Function Properties: Handler: index.handler Runtime: nodejs20.x MemorySize: 256 Timeout: 30 Events: Api: Type: Api Properties: Path: /users Method: post

减少冷启动

技术效果说明
预置并发(Provisioned Concurrency)完全消除冷启动额外收费,保持实例常驻
使用 ARM64(Graviton)冷启动快约 20%同时计算成本降低约 20%
减少包体积包越小初始化越快摇树优化,去除未用依赖
选用编译型语言(Go/Rust)冷启动显著更快Go 约 50ms vs Node 约 300ms
初始化代码移到 handler 外热机复用DB 连接、SDK 客户端全局复用
Lambda SnapStart(Java)消除 JVM 初始化时间仅支持 Java 11+