无状态与外部存储
RDS/DynamoDB/S3;对照 scale-stateless。
30 分钟
无状态与外部存储
Lambda 实例 随时可能被回收;warm 容器上的内存 不能当唯一真相来源。Serverless 应用必须 无状态 Handler + 外部持久化——这与 scale-stateless 一脉相承,只是把「任意 Pod」换成「任意 invocation」。
学习目标
- 定义 Serverless 语境下的有状态反模式
- 选型 RDS、DynamoDB、S3 的典型场景
- 理解 VPC 内访问 RDS 与连接池约束
状态放哪里
| 存储 | 适合 | Serverless 注意点 |
|---|---|---|
| S3 | 文件、静态资源、大 payload | 事件触发;权限用 IAM |
| DynamoDB | 键值、单表设计、高并发写 | 见 ddb-intro |
| RDS | 关系型、复杂查询、事务 | 需 VPC;连接数 scarce |
| ElastiCache | Session、热点读 | 仍要无 Session 粘滞 |
// 反模式:static Map 存 upload 进度
// 正模式:progress → DynamoDB item;S3 存文件本体
RDS 与连接池
每个 warm Lambda 若各握一条 JDBC 连接,并发 100 可能 打满 RDS max_connections。常见做法:
- RDS Proxy:池化、复用
- 短连接 + 限并发(Provisioned Concurrency 控制上限)
- 能 NoSQL 则 DynamoDB:与 Lambda 同属 Serverless 故事
关系建模与迁移见 orm-jpa;DynamoDB 访问模式见 ddb-keys。
与十二要素、扩展性
- 十二要素 IV 后端服务:数据库是 附加资源,换环境只换连接串
- scale-replication 的读副本:Lambda 只读报表可走 reader endpoint
练习
- 设计「用户头像上传」:S3 key 规则 + 元数据存哪张表
- 对比 DynamoDB 与 RDS 存 Order 列表:各写一条选型理由
- 说明为何 Lambda 不宜用本地
/tmp当持久化(仅临时、有大小上限)
小结
函数无状态,数据进 S3/DynamoDB/RDS——实例可死,数据不死。 下一课专门谈 Schema 迁移在 Serverless 里怎么跑。