Serverless 实战:什么时候用?怎么用?
Serverless 让开发者专注业务代码,无需管理服务器。本文详解 Serverless 应用场景和实战技巧。
一、什么是 Serverless?
1.1 传统架构 vs Serverless
传统架构:
开发 → 买服务器 → 部署 → 运维(扩容、监控、安全)
Serverless:
开发 → 上传代码 → 自动运行 → 按调用付费
1.2 核心特点
| 特点 | 说明 |
|---|---|
| 无服务器管理 | 免运维 |
| 自动扩缩容 | 按需伸缩 |
| 按调用付费 | 用多少付多少 |
| 事件驱动 | 触发执行 |
二、适用场景
✅ 适合 Serverless
- API 网关后端
- 定时任务
- 文件处理
- 数据处理流水线
- 聊天机器人
- IoT 数据处理
❌ 不适合 Serverless
- 长时间运行任务 (>15分钟)
- 需要常驻内存的服务
- 低延迟要求极高 (<100ms)
- 大规模计算密集型
三、主流平台
| 平台 | 特点 |
|---|---|
| AWS Lambda | 功能最全面 |
| 阿里云函数计算 | 国内首选 |
| 腾讯云 SCF | 生态完善 |
| Vercel/Netlify | 前端友好 |
四、实战示例
4.1 函数计算快速开始
# index.py
import json
def handler(event, context):
"""
阿里云函数计算入口
"""
evt = json.loads(event)
name = evt.get('name', 'World')
return {
'statusCode': 200,
'headers': {'Content-Type': 'application/json'},
'body': json.dumps({'message': f'Hello, {name}!'})
}
4.2 Spring Cloud Function
@SpringBootApplication
public class FunctionApplication {
@Bean
public Function<Order, String> processOrder() {
return order -> {
// 处理订单逻辑
return "Processed: " + order.getId();
};
}
}
五、最佳实践
注意事项:
- 冷启动优化: 保持实例预热
- 状态管理: 使用外部存储(redis/s3)
- 超时设置: 合理设置超时时间
- 日志集中: 日志输出到统一平台
- 权限最小化: 遵循最小权限原则
六、成本对比
| 场景 | 传统服务器 | Serverless | 节省 |
|---|---|---|---|
| 低频API | ¥500/月 | ¥50/月 | 90% |
| 定时任务 | ¥200/月 | ¥10/月 | 95% |
| 突发流量 | 需预留 | 自动扩容 | 无浪费 |
七、冷启动优化
// 1. 使用 GraalVM 原生镜像
// 启动时间从 3s → 0.5s
// 2. 预留实例
ProvisionedConcurrencyConfig:
ProvisionedConcurrentExecutions: 10
// 3. 精简依赖
// 移除不需要的依赖,减小包体积
八、总结
何时使用:
- 事件驱动场景
- 流量波动大
- 快速验证想法
- 减少运维成本
避坑指南:
- 注意冷启动
- 避免长任务
- 状态外置
- 监控告警