

# 权衡
<a name="a-tradeoffs"></a>

**Topics**
+ [PERF 8  如何使用权衡机制来提高性能？](w2aac19c11c11b5.md)

# PERF 8  如何使用权衡机制来提高性能？
<a name="w2aac19c11c11b5"></a>

 在构建解决方案时，确定权衡机制可以帮助您选出最佳方法。通常，您可以牺牲一致性、持久性和空间来换取缩短时间和延迟，从而提高性能。 

**Topics**
+ [PERF08-BP01 了解在哪些领域性能最为重要](perf_tradeoffs_performance_critical_areas.md)
+ [PERF08-BP02 了解设计模式和服务](perf_tradeoffs_performance_design_patterns.md)
+ [PERF08-BP03 确定权衡机制对客户和效率的影响](perf_tradeoffs_performance_understand_impact.md)
+ [PERF08-BP04 衡量性能提高产生的影响](perf_tradeoffs_performance_measure.md)
+ [PERF08-BP05 使用各种与性能相关的策略](perf_tradeoffs_performance_implement_strategy.md)

# PERF08-BP01 了解在哪些领域性能最为重要
<a name="perf_tradeoffs_performance_critical_areas"></a>

 了解并确定在哪些方面提高工作负载性能，会对效率或客户体验产生积极的影响。例如，拥有大量客户交互的网站会因为使用边缘服务在距离客户更近的位置向客户分发内容而受益。 

**期望的结果：** 通过了解架构、流量模式和数据访问模式，提高性能效率，并确定延迟和处理时间。确定随着工作负载增长可能会影响客户体验的潜在瓶颈。在确定这些领域时，查看可以通过部署哪项解决方案来解决相关的性能问题。

 **常见反模式：** 
+  您认为 `CPUUtilization` 或内存压力等标准计算指标足以捕获性能问题。 
+  您只使用由自己选定的监控软件记录的默认指标。 
+  您只在出现问题时审查指标。 

 **建立此最佳实践的好处：** 了解关键性能领域可以帮助工作负载负责人监控 KPI 并确定具有高影响力的优先改进。 

 **未建立这种最佳实践的情况下暴露的风险等级：** 高 

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

设置端到端的跟踪，用于确定流量模式、延迟和关键性能领域。针对速度缓慢的查询或性能欠佳的碎片和分区数据，监控数据访问模式。使用负载测试或监控来确定受约束的工作负载领域。

## 实施步骤
<a name="w2aac19c11c11b5b6c17"></a>

1.  设置端到端的监控，用于收集所有工作负载组件和指标。 
   +  使用 [Amazon CloudWatch 真实用户监控（RUM，Real-User Monitoring）](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-RUM.html) 来收集真实用户客户端和前端会话的应用程序性能指标。
   +  设置 [AWS X-Ray](https://aws.amazon.com/xray/) 以通过应用程序层跟踪流量，并确定组件间的延迟以及依赖关系。使用 X-Ray 服务地图查看工作负载组件之间的关系和延迟。
   +  使用 [Amazon Relational Database Service Performance Insights](https://aws.amazon.com/rds/performance-insights/) 查看数据库性能指标并确定性能改进机会。
   +  使用 [Amazon RDS 增强监控](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Monitoring.OS.html) 查看数据库 OS 性能指标。
   +  收集每个工作负载组件和服务的 [CloudWatch 指标](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) ，确定哪些指标影响性能效率。
   +  设置 [Amazon DevOps Guru](https://aws.amazon.com/devops-guru/) 以获取额外的性能见解和推荐方案 

1.  执行测试以生成指标，确定流量模式、瓶颈和关键性能领域。 
   +  设置 [CloudWatch Synthetic Canary](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries.html) 以使用 `cron` 作业或速率表达式，通过编程方式模拟浏览器端的用户活动，从而生成一段时间内的稳定指标。
   +  使用 [AWS 分布式负载测试](https://aws.amazon.com/solutions/implementations/distributed-load-testing-on-aws/) 解决方案生成峰值流量，或者在预期增长速率下测试工作负载。

1.  评估指标和遥测数据，确定您的关键性能领域。与团队一起审查这些领域，讨论监控和解决方案以避免瓶颈。 

1.  试验性能改进，并利用数据来衡量这些更改。 
   +  使用 [CloudWatch Evidently](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Evidently.html) 测试新的改进以及对工作负载的性能影响。

 **实施计划的工作量级别：** 要建立这种最佳实践，您必须审查端到端指标并密切关注当前的工作负载性能。设置端到端监控和确定关键性能领域所需的工作量为中等。 

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

 **相关文档：** 
+  [Amazon Builders' Library](https://aws.amazon.com/builders-library) 
+  [X-Ray 文档](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray.html) 
+  [Amazon CloudWatch RUM](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-RUM.html) 
+  [Amazon DevOps Guru](https://aws.amazon.com/devops-guru/) 
+  [CloudWatch RUM 和 X-Ray](https://docs.aws.amazon.com/xray/latest/devguide/xray-services-RUM.html) 

 **相关视频：** 
+  [亚马逊开发构建者资料库简介（DOP328）](https://www.youtube.com/watch?v=sKRdemSirDM) 
+  [Amazon CloudWatch Synthetics 演示](https://www.youtube.com/watch?v=hF3NM9j-u7I) 

 **相关示例：** 
+  [使用 Amazon CloudWatch Synthetics 测量页面加载时间](https://github.com/aws-samples/amazon-cloudwatch-synthetics-page-performance) 
+  [Amazon CloudWatch RUM Web 客户端](https://github.com/aws-observability/aws-rum-web) 
+  [适用于 Node.js 的 X-Ray 开发工具包](https://github.com/aws/aws-xray-sdk-node) 
+  [适用于 Python 的 X-Ray 开发工具包](https://github.com/aws/aws-xray-sdk-python) 
+  [适用于 Java 的 X-Ray 开发工具包](https://github.com/aws/aws-xray-sdk-java) 
+  [适用于 .Net 的 X-Ray 开发工具包](https://github.com/aws/aws-xray-sdk-dotnet) 
+  [适用于 Ruby 的 X-Ray 开发工具包](https://github.com/aws/aws-xray-sdk-ruby) 
+  [X-Ray 进程守护程序](https://github.com/aws/aws-xray-daemon) 
+  [AWS 上的分布式负载测试](https://aws.amazon.com/solutions/implementations/distributed-load-testing-on-aws/) 

# PERF08-BP02 了解设计模式和服务
<a name="perf_tradeoffs_performance_design_patterns"></a>

 研究和理解有助于提高工作负载性能的各种设计模式和服务。在分析的过程中，确定您需要牺牲哪些方面来获得更高的性能。例如，使用缓存服务有助于减少数据库系统上的负载。然而，缓存会带来最终一致性问题，这就需要在业务要求和客户期望的范围内进行工程设计。

 **期望结果：** 通过研究设计模式，您可以选择将支持性能卓越系统的架构设计。了解您可以使用哪些性能配置选项以及这些配置选项对工作负载的影响。优化工作负载性能依赖于对以下内容的了解：这些选项如何与架构进行交互，以及这些选项对实际测量的性能和终端用户感知到的性能的影响。

 **常见反模式：** 
+  您可以假设所有传统 IT 工作负载性能策略最适合云工作负载。
+  您可以构建和管理缓存解决方案，而不使用托管服务。
+  您对所有工作负载都使用相同的设计模式，而不评估哪种模式会提高工作负载性能。

 **建立此最佳实践的好处：** 通过为您的工作负载选择正确的设计模式和服务，您将优化性能，实现卓越运营并提高可靠性。正确的设计模式将满足您当前的工作负载特征，并帮助您扩展以适应未来的增长或变更。

 **未建立这种最佳实践的情况下暴露的风险等级：** 高 

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

 了解哪些性能配置选项可用，以及这些配置选项对工作负载的影响。优化工作负载性能依赖于对以下内容的了解：这些选项如何与架构进行交互，以及这些选项对实际测量的性能和用户感知到的性能的影响。

 **实施步骤：** 

1. 评估和审核可以提高工作负载性能的设计模式。

   1. 如示例所示， [Amazon Builders’ Library](https://aws.amazon.com/builders-library/) 为您提供了有关亚马逊如何构建和运营技术的详细说明。这些文章均由亚马逊的高级工程师撰写，其中涵盖架构、软件交付和运营等诸多主题。

   1. [AWS 解决方案库](https://aws.amazon.com/solutions/) 是一个随时可部署的解决方案集合，汇集了服务、代码和配置。这些解决方案是由 AWS 和 AWS 合作伙伴基于按行业或工作负载类型分组的常见使用场景和设计模式创建而成。例如，您可以为工作负载设置 [分布式负载测试解决方案](https://aws.amazon.com/solutions/implementations/distributed-load-testing-on-aws/) 。

   1. [AWS Architecture Center](https://aws.amazon.com/architecture/) 提供按设计模式、内容类型和技术进行分组的参考架构图。

   1. [AWS 示例](https://github.com/aws-samples) 是一个包含大量实践示例的 GitHub 存储库，可帮助您探索常见的架构模式、解决方案和服务。它经常更新，提供最新的服务和示例。

1. 改进您的工作负载，以对所选的设计模式建模，并使用服务和服务配置选项来提高您的工作负载性能。

   1. 利用 [AWS Skills Guild](https://aws.amazon.com/training/teams/aws-skills-guild/)提供的资源对您的内部团队进行培训。

   1. 使用 [AWS Partner Network](https://aws.amazon.com/partners/) 快速提供专业知识，并增强自己作出改进的能力。

**实施计划的工作量级别：** 要建立这种最佳实践，您必须了解有助于提高工作负载性能的设计模式和服务。对设计模式进行评估后，实施设计模式的工作量比较 *大* 。

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

 **相关文档：** 
+  [AWS Architecture Center](https://aws.amazon.com/architecture/) 
+  [AWS Partner Network](https://aws.amazon.com/partners/) 
+  [AWS 解决方案库](https://aws.amazon.com/solutions/) 
+  [AWS Knowledge Center](https://aws.amazon.com/premiumsupport/knowledge-center/) 
+  [Amazon Builders’ Library](https://aws.amazon.com/builders-library/) 
+  [使用负载脱落来避免过载](https://aws.amazon.com/builders-library/using-load-shedding-to-avoid-overload/?did=ba_card&trk=ba_card) 
+ [缓存挑战和策略](https://aws.amazon.com/builders-library/caching-challenges-and-strategies/?did=ba_card&trk=ba_card)

 **相关视频：** 
+  [Amazon Builders’ Library 简介（DOP328）](https://www.youtube.com/watch?v=sKRdemSirDM) 
+  [这是我的架构](https://aws.amazon.com/architecture/this-is-my-architecture/) 

 **相关示例：** 
+  [AWS 示例](https://github.com/aws-samples) 
+  [AWS 开发工具包示例](https://github.com/awsdocs/aws-doc-sdk-examples) 

# PERF08-BP03 确定权衡机制对客户和效率的影响
<a name="perf_tradeoffs_performance_understand_impact"></a>

 在评估与性能相关的改进时，确定哪些选择会对客户和工作负载效率产生影响。例如，如果使用键值数据存储可以提高系统性能，那么评估它的最终一致性将对客户的影响就非常重要。 

 通过指标和监控确定系统中性能不佳的方面。确定如何提高性能、性能提高带来的利弊，并确定性能提高对系统和用户体验的影响。例如，缓存数据有助于大幅提高性能，但需要就如何以及何时更新缓存的数据或使其变得无效而制定明确的策略，以防止产生不正确的系统行为。 

 **常见反模式：** 
+  您可以假设所有性能收益都应实现，即使有一些权衡机制要实施，例如，最终一致性。 
+  在性能问题已经非常严重时，您只需评估对工作负载的更改。 

 **建立此最佳实践的好处：** 当您评估潜在性能相关的改进时，必须决定更改时所采用的权衡机制是否符合工作负载要求。在某些情况下，您可能需要实施额外的控制来补偿权衡机制。 

 **未建立此最佳实践暴露的风险等级：** 高 

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

 确定权衡机制：通过指标和监控确定系统中性能不佳的方面。确定如何进行改进，以及权衡机制将如何影响系统和用户体验。例如，实施缓存数据有助于大幅提高性能，但需要就如何以及何时更新缓存的数据或使其作废而制定明确的策略，以防止产生不正确的系统行为。 

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

 **相关文档：** 
+  [Amazon Builders’ Library](https://aws.amazon.com/builders-library) 
+  [Quick KPI](https://docs.aws.amazon.com/quicksight/latest/user/kpi.html) 
+  [Amazon CloudWatch RUM](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-RUM.html) 
+  [X-Ray 文档](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray.html) 

 **相关视频：** 
+  [Amazon Builders’ Library 简介 (DOP328)](https://www.youtube.com/watch?v=sKRdemSirDM) 
+  [制定监控计划](https://www.youtube.com/watch?v=OMmiGETJpfU&ref=wellarchitected) 
+  [通过 Amazon CloudWatch RUM 优化应用程序](https://www.youtube.com/watch?v=NMaeujY9A9Y) 
+  [Amazon CloudWatch Synthetics 演示](https://www.youtube.com/watch?v=hF3NM9j-u7I) 

 **相关示例：** 
+  [使用 Amazon CloudWatch Synthetics 测量页面加载时间](https://github.com/aws-samples/amazon-cloudwatch-synthetics-page-performance) 
+  [Amazon CloudWatch RUM Web 客户端](https://github.com/aws-observability/aws-rum-web) 

# PERF08-BP04 衡量性能提高产生的影响
<a name="perf_tradeoffs_performance_measure"></a>

 在进行更改以提高性能时，对收集的指标和数据进行评估。使用这些信息来确定性能提高对工作负载、工作负载组件和客户的影响。这种衡量可让您了解采用权衡机制后实现的性能提高，还可以帮助确定性能提高是否产生了任何不利的副作用。 

 架构完善的系统会使用各种与性能相关的策略。确定哪种策略会对给定的热点或瓶颈产生最大的积极影响。例如，对多个关系数据库系统中的数据进行分片可以提高整体吞吐量并保持对事务的支持，而且在每个分片内进行缓存有助于降低负载。 

 **常见反模式：** 
+  您可以手动部署和管理作为托管服务提供的技术。 
+  当有多个组件可用于提高工作负载的性能时，您可以只专注于一个组件，如联网。 
+  您依赖客户反馈和看法，将其作为唯一的基准。 

 **建立此最佳实践的好处：** 要实施性能策略，您必须选择多个服务和功能相结合的方式，以满足工作负载的性能要求。 

 **未建立这种最佳实践的情况下暴露的风险等级：** 中 

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

 架构完善的系统会结合使用各种与性能相关的策略。确定哪种策略会对给定的热点或瓶颈产生最大的积极影响。例如，对多个关系数据库系统中的数据进行分片可以提高整体吞吐量并保持对事务的支持，而且在每个分片内进行缓存有助于降低负载。 

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

 **相关文档：** 
+  [Amazon Builders’ Library](https://aws.amazon.com/builders-library) 
+  [Amazon CloudWatch RUM](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-RUM.html) 
+  [Amazon CloudWatch Synthetics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries.html) 
+  [AWS 上的分布式负载测试](https://docs.aws.amazon.com/solutions/latest/distributed-load-testing-on-aws/welcome.html) 

 **相关视频：** 
+  [Amazon Builders’ Library 简介 (DOP328)](https://www.youtube.com/watch?v=sKRdemSirDM) 
+  [通过 Amazon CloudWatch RUM 优化应用程序](https://www.youtube.com/watch?v=NMaeujY9A9Y) 
+  [Amazon CloudWatch Synthetics 演示](https://www.youtube.com/watch?v=hF3NM9j-u7I) 

 **相关示例：** 
+  [使用 Amazon CloudWatch Synthetics 测量页面加载时间](https://github.com/aws-samples/amazon-cloudwatch-synthetics-page-performance) 
+  [Amazon CloudWatch RUM Web 客户端](https://github.com/aws-observability/aws-rum-web) 
+  [AWS 上的分布式负载测试](https://aws.amazon.com/solutions/implementations/distributed-load-testing-on-aws/) 

# PERF08-BP05 使用各种与性能相关的策略
<a name="perf_tradeoffs_performance_implement_strategy"></a>

 如果合适，使用多种策略来提高性能。例如，可以使用缓存数据等策略来防止出现过多的网络或数据库调用；使用数据库引擎的只读副本来提高读取速度；尽可能对数据进行分片或压缩以减少数据卷；在数据可用时进行缓冲和流式处理，避免拥堵。 

 对工作负载进行更改时，需要收集并评估各项指标，以确定更改产生的影响。衡量对系统和最终用户的影响，以便了解权衡机制如何影响工作负载。使用负载测试等系统的方法来确定权衡机制是否可以提高性能。 

 **常见反模式：** 
+  如果客户没有提出意见，您可以认为工作负载性能足够高。 
+  在进行性能相关的更改后，您只需收集关于性能的数据。 

 **建立此最佳实践的好处：** 要优化性能和提高资源利用率，您需要一个统一的运营视图、实时精细数据和历史参考。您可以创建控制面板并对数据执行指标计算，以便在工作负载随着时间的推移而变化时，获得工作负载的运营和利用率见解。 

 **未建立这种最佳实践的情况下暴露的风险等级：** 低 

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

 使用数据驱动型方法来改进架构：对工作负载进行更改时，需要收集并评估各项指标，以确定更改产生的影响。衡量对系统和最终用户的影响，以便了解权衡机制如何影响工作负载。使用负载测试等系统的方法来确定权衡机制是否可以提高性能。 

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

 **相关文档：** 
+  [Amazon Builders’ Library](https://aws.amazon.com/builders-library) 
+  [实施 Amazon ElastiCache 的最佳实践](https://docs.aws.amazon.com/AmazonElastiCache/latest/UserGuide/BestPractices.html) 
+  [AWS 数据库缓存 ](https://aws.amazon.com/caching/database-caching/?ref=wellarchitected) 
+  [Amazon CloudWatch RUM](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-RUM.html) 
+  [AWS 上的分布式负载测试](https://docs.aws.amazon.com/solutions/latest/distributed-load-testing-on-aws/welcome.html) 

 **相关视频：** 
+  [Amazon Builders’ Library 简介 (DOP328)](https://www.youtube.com/watch?v=sKRdemSirDM) 
+  [AWS 专用数据库（DAT209-L） ](https://www.youtube.com/watch?v=q81TVuV5u28&ref=wellarchitected) 
+  [通过 Amazon CloudWatch RUM 优化应用程序](https://www.youtube.com/watch?v=NMaeujY9A9Y) 

 **相关示例：** 
+  [使用 Amazon CloudWatch Synthetics 测量页面加载时间](https://github.com/aws-samples/amazon-cloudwatch-synthetics-page-performance) 
+  [Amazon CloudWatch RUM Web 客户端](https://github.com/aws-observability/aws-rum-web) 
+  [AWS 上的分布式负载测试](https://aws.amazon.com/solutions/implementations/distributed-load-testing-on-aws/) 