5月27日 16:26
Serverless 高可用与灾难恢复怎么设计?
Serverless 高可用与灾难恢复怎么设计?
Serverless 把服务器运维交给了云厂商,但这不等于高可用和灾难恢复可以自动解决。理解云厂商提供什么、业务需要补什么,是设计 Serverless 高可用架构的核心思路。
高可用架构设计
多可用区部署
Serverless 函数(如 AWS Lambda、阿里云函数计算)默认跨多个可用区运行,单个 AZ 故障时流量会自动路由到健康实例。但要注意:
- 函数本身跨 AZ 是自动的,但依赖的数据层(数据库、缓存)需要手动开启多 AZ 支持
- DynamoDB、Aurora 等托管数据库提供 Multi-AZ 选项,创建时必须显式启用
- S3 等对象存储默认跨 AZ 冗余,无需额外配置
负载均衡与流量管理
API Gateway 作为 Serverless 应用的统一入口,自动将请求分发到多个函数实例。配合以下手段可以进一步提升可用性:
- CDN 缓存层:CloudFront 或 Cloudflare 在边缘节点缓存响应,减少函数调用次数,降低故障面
- 健康检查与自动剔除:API Gateway 内置健康检测,异常实例会被自动移除
- 流量切换:结合 Route 53 或云 DNS 的健康检查策略,在区域级故障时切换到备用区域
自动扩展与限流保护
Serverless 的弹性扩展是天然优势,但也有边界条件需要处理:
- 弹性扩展:流量突增时函数实例自动扩容,但存在冷启动延迟,高频场景需考虑 Provisioned Concurrency(预留并发)
- 预留并发:为关键函数锁定最低并发数,避免被其他函数抢占配额
- 限流保护:设置 API Gateway 的 throttling 限制,防止下游服务被过载请求打崩;同时实现客户端退避重试
灾难恢复策略
灾难恢复关注的是整个区域或服务级别的故障场景,核心指标是 RPO(Recovery Point Objective,可接受的数据丢失量)和 RTO(Recovery Time Objective,可接受的恢复时间)。
数据备份
- 自动备份:托管数据库(RDS、Aurora)支持自动快照,建议开启跨区域快照复制
- 跨区域复制:S3 开启 Cross-Region Replication,DynamoDB 开启 Global Table,确保主区域不可用时数据仍在
- 版本控制:S3 Bucket 启用 Versioning,防止误删或覆盖导致数据丢失;基础设施代码用 Git 管理,避免配置漂移
故障切换
- 多区域部署(Active-Active):在两个以上区域同时运行完整应用栈,DNS 层做流量分配,任一区域故障时流量自动切走。成本较高但 RTO 最短,可达到分钟级切换
- Warm Standby:备用区域保持最小规模运行,故障时快速扩容接管。成本和 RTO 的折中方案,适合中等业务
- DNS 故障切换:Route 53 的 failover routing policy 可以在主端点健康检查失败时自动切换到备用端点
恢复计划
- 明确 RPO/RTO 目标:不同业务模块的容忍度不同,核心交易系统要求 RPO 接近零、RTO 分钟级;日志分析系统可以接受小时级 RTO
- 定期演练:GameDay 演练验证故障切换流程是否真正可用,仅靠文档不够
- 自动化恢复流程:用 Step Functions 或 EventBridge 编排自动恢复动作,减少人工介入的延迟和失误
监控与告警
高可用不是一次性设计,需要持续监控来保证。
健康监控
- 服务可用性:通过 CloudWatch 或自定义指标监控函数调用成功率,目标通常设为 99.9% 以上
- 性能指标:关注 P99 延迟和冷启动频率,延迟突增往往是故障前兆
- 资源水位:监控并发配额使用率、数据库连接数、队列积压量,接近上限时提前告警
告警机制
- 分级告警:按严重程度划分(P0-P3),P0 级触发电话告警,P3 级仅发 Slack 通知
- 多渠道通知:邮件、短信、即时通讯工具组合覆盖,避免单一通道故障导致告警丢失
- 自动响应:将告警与自动恢复流程联动,如错误率超阈值时自动切换到降级模式
关键设计原则
- 最小化单点依赖:避免所有函数依赖同一个数据库实例,使用读写分离和多副本
- 幂等设计:函数必须幂等,同一事件重复触发不会产生副作用,这是可靠重试的前提
- 降级策略:非核心功能(如推荐、统计)故障时主动降级,保证核心交易链路可用
- 混沌工程:在生产环境或预发环境定期注入故障(如 Chaos Monkey),验证系统韧性
设计 Serverless 高可用和灾难恢复的关键在于:理解云厂商帮你做了什么(函数跨 AZ、自动扩展),以及你还需要自己做什么(数据跨区域、故障切换编排、监控告警闭环)。面试中能结合 RPO/RTO 目标讲清楚每层防护的选型逻辑,比罗列概念更有说服力。