常见缓解策略 - AWS Prescriptive Guidance

常见缓解策略

首先,考虑使用预防性缓解措施来防止故障模式影响用户故事。然后,应考虑纠正性缓解措施。纠正性缓解措施有助于系统自我修复或适应不断变化的条件。以下是每个故障类别的常见缓解措施列表,这些措施与韧性属性保持一致。

故障类别

所需韧性属性

缓解措施

单点故障(SPOF)

冗余和容错能力

  • 实施冗余:例如,通过在弹性负载均衡(ELB)背后使用多个 EC2 实例。

  • 移除对 AWS 全局服务控制面板的依赖,仅依赖全局服务数据面板。

  • 当资源不可用时,使用优雅降级,以使您的系统在出现单点故障时仍保持静态稳定。

负载过高

充足容量

延迟过长

及时输出

配置错误和错误

正确的输出

故障共担

故障隔离

  • 在您的系统中实施容错能力,并使用逻辑和物理故障隔离边界,例如多个计算或容器集群、多个 AWS 账户、多个 AWS Identity and Access Management(IAM)主体、多个可用区以及可能的多个 AWS 区域。

  • 基于单元的架构随机分片等技术也可改善故障隔离。

  • 考虑松耦合优雅降级等模式,以防止级联故障。确定用户故事的优先级时,您还可以使用该优先级排序来区分对主要业务功能至关重要的用户故事和可以优雅降级的用户故事。例如,在电子商务网站中,您不希望网站上的促销小部件出现故障影响到处理新订单的能力。

尽管其中一些缓解措施只需极少的精力即可实施,但另一些缓解措施(例如采用基于单元的架构以实施可预测的故障隔离和最大限度地减少共担故障)可能需要重新设计整个工作负载,而不仅仅是特定用户故事的组件。如前所述,重要的是要权衡故障模式的可能性和影响,以及为缓解故障模式所做的权衡取舍。

除了适用于每种故障模式类别的缓解技术外,您还应该考虑恢复用户故事或整个系统所需的缓解措施。例如,故障可能会停止工作流程并阻止将数据写入预期目标。在这种情况下,您可能需要运营工具来重新驱动工作流程或手动修复数据。您可能还必须在工作负载中构建检查点机制,以帮助防止在发生故障时丢失数据。或者,您可能需要构建一个按灯机制(andon cord),以暂停工作流程并停止接受新工作,从而防止进一步损害。在这些情况下,您应考虑所需的运营工具和护栏。

最后,在制定缓解策略时,您应该始终假设人为错误不可避免。尽管现代化 DevOps 实践力求实现自动化运营,但由于各种原因,人类仍然必须与工作负载进行交互。错误的人为操作可能会引起任何 SEEMS 类别的故障,例如在维护期间移除过多的节点并导致过载,或者错误地设置功能标志。这些场景实际上是预防性护栏的失效。根本原因分析绝不能止步于“人为失误”的结论,而应探究错误最初之所以发生的原因。因此,您的缓解策略应考虑人类运营人员如何与工作负载组件进行交互,以及如何通过安全护栏防止或最大限度地减少人为运营人员错误造成的影响。