

# REL11-BP04 恢复期间依赖于数据平面而不是控制平面
<a name="rel_withstand_component_failures_avoid_control_plane"></a>

 控制平面提供用于创建、读取和描述、更新、删除和列出（CRUDL）资源的管理 API，而数据平面则处理日常服务流量。在对可能影响弹性的事件实施恢复或缓解响应时，着眼于使用最少数量的控制平面操作，来实现对服务的恢复、重新扩展、恢复、修复或失效转移。在这些降级事件期间，数据平面操作应凌驾于任何活动之上。 

 例如，以下是所有控制平面操作：启动新的计算实例、创建数据块存储和描述队列服务。启动计算实例时，控制平面必须执行多项任务，例如查找具有容量的物理主机、分配网络接口、准备本地数据块存储卷、生成凭证以及添加安全规则。控制平面往往是复杂的编排。 

 **期望的结果：** 当资源进入受损状态时，系统能够通过将流量从受损资源转移到正常运行资源，来自动或手动恢复。 

 **常见反模式：** 
+  依赖于通过更改 DNS 记录来重新路由流量。 
+  由于预置资源不足，依赖控制平面扩展操作来替换受损组件。 
+  依靠广泛、多服务、多 API 控制平面操作来修复任何类别的受损情况。 

 **建立此最佳实践的好处：** 提高自动修复的成功率可以缩短平均恢复时间，并提高工作负载的可用性。 

 **未建立这种最佳实践的情况下暴露的风险等级：** 中。对于某些类型的服务降级，控制平面会受到影响。依赖于大量使用控制平面进行修复可能会增加恢复时间（RTO）和平均恢复时间（MTTR）。 

## 实施指导
<a name="implementation-guidance"></a>

 要限制数据平面操作，请评估每项服务，以了解恢复服务所需的操作。 

 利用 Amazon Application Recovery Controller (ARC) 来转移 DNS 流量。这些功能持续监控您的应用程序从故障中恢复的能力，并使您能够跨多个 AWS 区域、可用区和本地部署控制您的应用程序恢复。 

 Route 53 路由策略使用控制平面，因此不要依赖控制平面进行恢复。Route 53 数据平面会回复 DNS 查询，并执行和评估运行状况检查。它们分布在全球各地，专为 [100% 可用性的服务等级协议（SLA）](https://aws.amazon.com/route53/sla/)而设计。 

 您用于创建、更新和删除 Route 53 资源的 Route 53 管理 API 和控制台是在控制平面上运行的，而这些控制平面设计用于优先考虑您在管理 DNS 时所需的强一致性和持久性。为了实现这一点，控制平面位于单个区域“美国东部（弗吉尼亚州北部）”中。虽然这两个系统都非常可靠，但控制平面不包含在 SLA 中。在极少数情况下，数据平面的弹性设计允许它保持可用性，而控制平面做不到。对于灾难恢复和失效转移机制，使用数据平面功能可提供尽可能高的可靠性。 

 对于 Amazon EC2，使用静态稳定性设计来限制控制平面操作。控制平面操作包括单独扩展资源，或使用 Auto Scaling 群组（ASG）来扩展资源。要获得最高级别的弹性，请在集群中配置足够的容量用于失效转移。如果必须限制此容量阈值，请在整个端到端系统上设置限制，以安全地限制到达有限资源集的总流量。 

 对于诸如 Amazon DynamoDB、Amazon API Gateway、负载均衡器和 AWS Lambda 无服务器之类的服务，使用这些服务时可以利用数据平面。但是，创建新函数、负载均衡器、API 网关或 DynamoDB 表是一项控制平面操作，应在降级之前完成，以便为事件和演练失效转移操作做准备。对于 Amazon RDS，数据平面操作允许访问数据。 

 有关数据平面、控制平面以及 AWS 如何构建服务以满足高可用性目标的更多信息，请参阅 [使用可用区的静态稳定性](https://aws.amazon.com/builders-library/static-stability-using-availability-zones/)。 

 了解哪些操作位于数据平面，哪些位于控制平面。 

### 实施步骤
<a name="implementation-steps"></a>

 对于降级事件后需要恢复的每个工作负载，请评估失效转移运行手册、高可用性设计、自动修复设计或 HA 资源恢复计划。确定可能被视为控制平面操作的每个操作。 

 考虑将控制平面操作更改为数据平面操作： 
+  Auto Scaling（控制平面）与预扩展 Amazon EC2 资源（数据平面）的比较 
+  迁移到 Lambda 及其扩展方法（数据平面）或 Amazon EC2 和 ASG（控制平面） 
+  评估任何使用 Kubernetes 的设计以及控制平面操作的性质。在 Kubernetes 中，添加 Pod 是一项数据平面操作。操作应仅限于添加 Pod 而不是添加节点。使用 [过度预置的节点](https://www.eksworkshop.com/docs/autoscaling/compute/cluster-autoscaler/overprovisioning/) 是限制控制平面操作的首选方法 

 考虑允许数据平面操作影响相同修复措施的其他方法。 
+  Route 53 记录更改（控制平面）或 ARC（数据平面） 
+ [ Route 53 运行状况检查以获取更多自动更新 ](https://aws.amazon.com/blogs/networking-and-content-delivery/creating-disaster-recovery-mechanisms-using-amazon-route-53/)

 如果服务是任务关键型，可考虑使用辅助区域中的某些服务，以便在不受影响的区域内进行更多控制平面和数据平面操作。 
+  主区域中的 Amazon EC2 Auto Scaling 或 Amazon EKS 与辅助区域中的 Amazon EC2 Auto Scaling 或 Amazon EKS 的比较，以及将流量路由到辅助区域（控制平面操作） 
+  在辅助区域中创建只读副本或在主区域中尝试相同的操作（控制平面操作） 

## 资源
<a name="resources"></a>

 **相关最佳实践：** 
+  [可用性定义](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/availability.html) 
+  [REL11-BP01 监控工作负载的所有组件以检测故障](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/rel_withstand_component_failures_notifications_sent_system.html) 

 **相关文档：** 
+  [APN 合作伙伴：可以帮助您实现容错自动化的合作伙伴](https://aws.amazon.com/partners/find/results/?keyword=automation) 
+  [AWS Marketplace：可以支持容错的产品](https://aws.amazon.com/marketplace/search/results?searchTerms=fault+tolerance) 
+  [Amazon Builders' Library：通过控制较小的服务来避免分布式系统中出现过载](https://aws.amazon.com/builders-library/avoiding-overload-in-distributed-systems-by-putting-the-smaller-service-in-control/) 
+  [Amazon DynamoDB API（控制平面和数据平面）](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.API.html) 
+  [AWS Lambda 执行](https://docs.aws.amazon.com/whitepapers/latest/security-overview-aws-lambda/lambda-executions.html) （拆分为控制平面和数据平面） 
+  [AWS Elemental MediaStore 数据平面](https://docs.aws.amazon.com/mediastore/latest/apireference/API_Operations_AWS_Elemental_MediaStore_Data_Plane.html) 
+  [使用 Amazon Route 53 应用程序恢复控制器构建高弹性应用程序，第 1 部分：单区域堆栈](https://aws.amazon.com/blogs/networking-and-content-delivery/building-highly-resilient-applications-using-amazon-route-53-application-recovery-controller-part-1-single-region-stack/) 
+  [使用 Amazon Route 53 应用程序恢复控制器构建高弹性应用程序，第 2 部分：多区域堆栈](https://aws.amazon.com/blogs/networking-and-content-delivery/building-highly-resilient-applications-using-amazon-route-53-application-recovery-controller-part-2-multi-region-stack/) 
+  [使用 Amazon Route 53 创建灾难恢复机制](https://aws.amazon.com/blogs/networking-and-content-delivery/creating-disaster-recovery-mechanisms-using-amazon-route-53/) 
+  [什么是 Route 53 应用程序恢复控制器？](https://docs.aws.amazon.com/r53recovery/latest/dg/what-is-route53-recovery.html) 
+ [ Kubernetes 控制平面和数据平面 ](https://aws.amazon.com/blogs/containers/managing-kubernetes-control-plane-events-in-amazon-eks/)

 **相关视频：** 
+ [ Back to Basics - Using Static Stability ](https://www.youtube.com/watch?v=gy1RITZ7N7s)
+ [ Building resilient multi-site workloads using AWS global services ](https://www.youtube.com/watch?v=62ZQHTruBnk)

 **相关示例：** 
+  [Amazon Route 53 应用程序恢复控制器简介](https://aws.amazon.com/blogs/aws/amazon-route-53-application-recovery-controller/) 
+ [ Amazon Builders' Library：通过控制较小的服务来避免分布式系统中出现过载 ](https://aws.amazon.com/builders-library/avoiding-overload-in-distributed-systems-by-putting-the-smaller-service-in-control/)
+ [ 使用 Amazon Route 53 应用程序恢复控制器构建高弹性应用程序，第 1 部分：单区域堆栈 ](https://aws.amazon.com/blogs/networking-and-content-delivery/building-highly-resilient-applications-using-amazon-route-53-application-recovery-controller-part-1-single-region-stack/)
+ [ 使用 Amazon Route 53 应用程序恢复控制器构建高弹性应用程序，第 2 部分：多区域堆栈 ](https://aws.amazon.com/blogs/networking-and-content-delivery/building-highly-resilient-applications-using-amazon-route-53-application-recovery-controller-part-2-multi-region-stack/)
+ [ 使用可用区的静态稳定性 ](https://aws.amazon.com/builders-library/static-stability-using-availability-zones/)

 **相关工具：** 
+ [ Amazon CloudWatch ](https://aws.amazon.com/cloudwatch/)
+ [AWS X-Ray](https://docs.aws.amazon.com/xray/latest/devguide/security-logging-monitoring.html)