选择跨可用区和区域的可用性方案
已完成比较高可用、Multi-AZ 和多区域设计。追踪完整请求路径,测试每种设计必须承受的故障。
检验理解两个 Web 副本运行在不同可用区,但都依赖一个可用区中的同一数据库。这能证明什么?完成练习
你将学到什么
- 解释可用区与区域的区别。
- 找出可能使可用性设计失效的共享依赖。
- 比较多区域部署的业务价值和运行成本。
从用户操作开始
高可用性(HA)旨在让服务在组件故障时仍可使用。选择架构前先定义“可使用”。如果预订页面能加载,但所有预订请求都失败,这就不是可用的预订服务。
为重要操作设置服务级别目标(SLO)。定义哪些请求计入、怎样算成功,以及测量周期。云服务 SLA 描述的是提供方的承诺,不能证明应用实测的可用性。
例如,在一个 30 天的月份中,按时间计算的 99.9% 可用性允许 43.2 分钟不可用。按请求计算的 SLO 使用不同分母。两种指标都不能说明允许丢失多少数据,也不能保证单次故障的最长持续时间。
理解故障边界
AWS 可用区(Availability Zone,AZ)是区域(Region)内隔离的基础设施位置。一个区域包含多个可用区。多区域设计将工作负载组件分布到不同区域。其他提供方有自己的边界和服务行为,应检查所选服务。
| 设计 | 可能帮助应对的故障 | 仍需设计的部分 |
|---|---|---|
| 一个可用区内的多个进程 | 进程或主机故障 | 可用区不可用和共享依赖 |
| 一个区域内的 Multi-AZ | 一个可用区不可用 | 区域故障、数据损坏和恢复 |
| 多个区域 | 一个区域不可用 | 路由、数据一致性、容量和共享服务 |
这些是设计可能性,不是可用性保证。标签不能证明每个必需组件都遵守预期边界。
追踪完整请求路径
考虑一个虚构预订服务。Web 副本运行在两个可用区,都使用可用区 A 中的同一个数据库和同一个出站网关。调用付款提供方必须经过该网关。
如果可用区 A 故障,可用区 B 中的 Web 副本可能仍然健康,但预订仍会失败。团队必须评估数据库、网络路径、身份提供方、付款依赖和路由。检查托管数据库的实际模式:复制、故障转移和读取行为会因产品与配置而不同。
也要检查容量。存活资源必须能够处理所需负载。如果设计依赖在事件期间创建容量,就会受到配额、可用资源和控制平面操作的影响。
开展受控演练,明确边界、停止条件和负责人。验证完整预订,包括付款对账。记录失败请求,以及恢复有效业务操作所需的时间。
判断增加一个区域能否解决问题
多区域运行会增加数据传输、重复资源、部署协调和运维工作。主备模式让一个环境随时准备接收流量。多活模式则在多个环境中同时处理流量。两种模式要求的准备程度和数据行为不同。
对于预订服务,并发写入带来一个问题:两个区域能否售出同一个座位?明确预订的决定权,以及复制中断时的行为。“复制数据库”不是完整答案。
检查允许的数据位置、加密密钥、证书、DNS、秘密信息和外部服务。共同依赖的身份服务故障,或一次错误发布,都可能影响多个区域。更多位置不能消除每一种共同原因。
将可用性与恢复连接
HA 应对运行期间指定的故障。灾难恢复则在业务受扰事件后,恢复可用服务及其数据。多区域服务仍需要针对误删或数据损坏的恢复计划。
记录选定的故障场景,以及业务方接受的其他场景。应用变化时,让测试和基础设施定义保持一致。继续学习 RTO、RPO 与灾难恢复。
完成练习
一个虚构预订服务在两个可用区运行 Web 副本。数据库和出站网关位于同一个可用区。画出请求路径,在纸上移除该可用区。识别哪些部分仍工作、哪些失败,以及用什么测试验证结论。
下载工作表(Markdown)取消勾选将删除此浏览器保存的全部进度。
进度保存在此浏览器中。无需账户,不追踪使用情况。
来源与延伸阅读
- AWS: Deploy the workload to multiple locations ↗
- AWS: Shared responsibility model for resiliency ↗
- Google SRE: Implementing SLOs ↗