

# 选择
<a name="a-selection"></a>

**Topics**
+ [PERF 1  如何选择性能最好的架构？](perf-01.md)
+ [PERF 2  如何选择计算解决方案？](perf-02.md)
+ [PERF 3  如何选择存储解决方案？](perf-03.md)
+ [PERF 4  如何选择数据库解决方案？](perf-04.md)
+ [PERF 5  如何配置联网解决方案？](perf-05.md)

# PERF 1  如何选择性能最好的架构？
<a name="perf-01"></a>

 一个工作负载通常需要采用多种方法才能实现最佳性能。架构完善的系统会使用多种解决方案和功能来提高性能。 

**Topics**
+ [PERF01-BP01 了解可用的服务和资源](perf_performing_architecture_evaluate_resources.md)
+ [PERF01-BP02 制定架构选择流程](perf_performing_architecture_process.md)
+ [PERF01-BP03 在制定决策时考虑成本要求](perf_performing_architecture_cost.md)
+ [PERF01-BP04 使用策略或参考架构](perf_performing_architecture_use_policies.md)
+ [PERF01-BP05 使用云提供商或相关合作伙伴提供的指南](perf_performing_architecture_external_guidance.md)
+ [PERF01-BP06 对现有工作负载进行基准测试](perf_performing_architecture_benchmark.md)
+ [PERF01-BP07 对工作负载进行负载测试](perf_performing_architecture_load_test.md)

# PERF01-BP01 了解可用的服务和资源
<a name="perf_performing_architecture_evaluate_resources"></a>

 了解云中提供的各种服务和资源。识别与您的工作负载相关的服务和配置选项，并了解如何实现最佳的性能。 

 如果要评估现有工作负载，您必须生成评估所需使用的各种服务资源的清单。这份清单可帮助您评估可以用托管服务和较新技术替换的组件。 

 **常见反模式：** 
+  您可以将云用作联合数据中心。 
+  您可以使用共享存储来存储所有需要持久性存储的内容。 
+  请勿使用 Automatic Scaling。 
+  您应使用最符合您当前标准的实例类型，但应根据需要使用较大的实例。 
+  您可以部署和管理作为托管服务提供的技术。 

 **建立此最佳实践的好处：** 通过考量您可能不熟悉的服务，您也许能够大大降低基础设施的成本和维护服务所需的工作量。通过部署新服务和功能，您也许能够缩短上市时间。 

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

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

 盘点相关服务的工作负载软件和架构：收集工作负载清单，并确定要详细了解哪类产品。确定可以用托管服务替换的工作负载组件，以提高性能并降低运维复杂性。 

## 资源
<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 知识中心](https://aws.amazon.com/premiumsupport/knowledge-center/) 

 **相关视频：** 
+  [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) 

# PERF01-BP02 制定架构选择流程
<a name="perf_performing_architecture_process"></a>

 使用关于云的内部经验和知识或外部资源（例如，已发布的使用案例、相关文档或白皮书），制定资源和服务选择流程。您应该制定一个流程，以鼓励对可能会用于工作负载的不同服务进行试验和基准测试。 

 针对架构编写重要用户案例时，您应该纳入性能要求，例如，指定每个重要案例应以多快速度运行。对于这些重要案例，您应该实施额外的脚本化用户体验，以确保您可以深入了解这些案例如何根据您的要求执行。 

 **常见反模式：** 
+  您可以假设当前的架构将为静态并且不会随着时间的推移而更新。 
+  您可以随着时间的推移对架构进行更改，而无需提供理由。 

 **建立此最佳实践的好处：** 制定架构更改流程后，您可以允许使用所收集的数据来影响以后的工作负载设计。 

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

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

 选择架构方法：确定满足性能要求的架构类型。确定限制因素，例如，交付媒介（桌面、Web、移动设备、IoT）、传统要求和集成。确定重用（包括重构）的机会。咨询其他团队，查阅构架图和其他资源（例如，AWS 解决方案架构师、AWS 参考架构和 AWS 合作伙伴），以帮助您选择架构。 

 定义性能要求：根据客户体验来确定最重要的指标。确定每个指标的目标、衡量方式和优先程度。定义客户体验。记录客户所需的性能体验，包括客户如何判断工作负载的性能。优先考虑重要用户案例的体验问题。包括性能要求和实施脚本化的用户历程，以确保您知道如何根据您的要求执行用户案例。 

## 资源
<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 知识中心](https://aws.amazon.com/premiumsupport/knowledge-center/) 

 **相关视频：** 
+  [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) 

# PERF01-BP03 在制定决策时考虑成本要求
<a name="perf_performing_architecture_cost"></a>

 工作负载通常具有运营成本要求。根据预测的资源需求，使用内部成本控制机制来选择资源类型和规模。 

 确定可以将哪些工作负载组件替换为完全托管式服务，例如托管数据库、内存缓存和 ETL 服务。减少运营工作负载让您可以将资源集中到取得业务成果上。 

 有关成本要求最佳实践，请参阅 *具有成本效益的资源* 成本优化支柱白皮书 [部分](https://docs.aws.amazon.com/wellarchitected/latest/cost-optimization-pillar/welcome.html). 

 **常见反模式：** 
+  您只应使用一个系列的实例。 
+  您没有对授予许可解决方案与开源解决方案进行评估 
+  您只应使用数据块存储。 
+  您可以在 EC2 实例和 Amazon EBS 或临时卷上部署作为托管服务提供的常用软件。 

 **建立此最佳实践的好处：** 在制定决策时考虑成本将使您能够进行其他投资。 

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

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

 优化工作负载组件以降低成本：设置大小合适的工作负载组件并实现弹性，可降低成本并最大程度提高组件效率。确定哪些工作负载组件可在适当情况下由托管服务替代，例如，托管数据库、内存缓存和反向代理。 

## 资源
<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 知识中心](https://aws.amazon.com/premiumsupport/knowledge-center/) 
+  [AWS Compute Optimizer](https://aws.amazon.com/compute-optimizer/) 

 **相关视频：** 
+  [Amazon Builders’ Library 简介 (DOP328)](https://www.youtube.com/watch?v=sKRdemSirDM) 
+  [这就是我的架构](https://aws.amazon.com/architecture/this-is-my-architecture/) 
+  [优化 AWS 计算的性能和成本（CMP323-R1） ](https://www.youtube.com/watch?v=zt6jYJLK8sg&ref=wellarchitected) 

 **相关示例：** 
+  [AWS 示例](https://github.com/aws-samples) 
+  [AWS 开发工具包示例](https://github.com/awsdocs/aws-doc-sdk-examples) 
+  [在启用 Compute Optimizer 和内存利用率的情况下合理调整大小](https://www.wellarchitectedlabs.com/cost/200_labs/200_aws_resource_optimization/5_ec2_computer_opt/) 
+  [AWS Compute Optimizer 演示代码](https://github.com/awslabs/ec2-spot-labs/tree/master/aws-compute-optimizer) 

# PERF01-BP04 使用策略或参考架构
<a name="perf_performing_architecture_use_policies"></a>

 通过评估内部策略和现有参考架构，以及使用分析为工作负载选择服务和配置，来最大程度提高性能和效率。 

 **常见反模式：** 
+  您应该允许广泛使用可能会影响公司管理开销的各种技术。 

 **建立此最佳实践的好处：** 制定架构、技术和供应商选择策略将有助于快速做出决策。 

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

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

 使用现有策略或参考架构部署工作负载：将服务集成到您的云部署中，然后使用性能测试来确保您可以继续满足性能要求。 

## 资源
<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 知识中心](https://aws.amazon.com/premiumsupport/knowledge-center/) 

 **相关视频：** 
+  [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) 

# PERF01-BP05 使用云提供商或相关合作伙伴提供的指南
<a name="perf_performing_architecture_external_guidance"></a>

 使用云公司提供的资源，例如，解决方案架构师、专业服务或适当的合作伙伴来指导您的决策。这些资源可帮助进行审核，并改进您的架构，从而实现最佳性能。 

 如需其他指导或产品信息，请联系 AWS 以获取帮助。AWS 解决方案架构师和 [AWS 专业服务](https://aws.amazon.com/professional-services/) 提供解决方案实施指导。 [AWS 合作伙伴](https://aws.amazon.com/partners/) 提供 AWS 专业知识，可帮助您实现业务敏捷性和创新能力。 

 **常见反模式：** 
+  您使用 AWS 作为普通数据中心提供商。 
+  您没有按 AWS 服务的既定用途使用这些服务。 

 **建立此最佳实践的好处：** 咨询您的提供商或合作伙伴将使您在决策中充满信心。 

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

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

 联系 AWS 资源以获得帮助：AWS 解决方案架构师和专业服务提供解决方案实施指导。APN 合作伙伴提供 AWS 专业知识，可帮助您实现业务敏捷性和创新能力。 

## 资源
<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 知识中心](https://aws.amazon.com/premiumsupport/knowledge-center/) 

 **相关视频：** 
+  [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) 

# PERF01-BP06 对现有工作负载进行基准测试
<a name="perf_performing_architecture_benchmark"></a>

 对现有工作负载的性能进行基准测试，以了解工作负载在云上的运行情况。使用从基准测试中收集的数据来推动架构决策。 

 结合使用基准测试与综合测试和真实用户监控，生成有关工作负载组件性能的数据。相比负载测试，基准测试通常可以更快速地设置，适用于评估特定组件的技术。基准测试通常在新项目开始时进行，因为此时您还没有用于进行负载测试的完整解决方案。 

 您可以构建您自己的自定义基准测试，或者您可以使用行业标准的测试，例如 [TPC-DS](http://www.tpc.org/tpcds/) （对您的数据仓库工作负载进行基准测试）。行业基准适用于比较不同的环境。对于架构中的特定操作类型，自定义基准十分有用。 

 进行基准测试时，为了确保获得有效结果，预热您的测试环境尤为重要。多次运行同一基准测试，确保捕获在一段时间内的差异信息。 

 由于基准测试运行速度通常比负载测试快，它们可以在部署管道的早期使用，并能更快地提供有关性能偏差的反馈。当您评估一个组件或服务的重要更改时，您可以使用基准快速了解您是否有合理的理由来执行更改。结合使用基准测试与负载测试这一点很重要，因为负载测试会告诉您工作负载在生产环境中的表现如何。 

 **常见反模式：** 
+  您可以依赖于不表示工作负载特性的常见基准。 
+  您依赖客户反馈和看法，将其作为唯一的基准。 

 **建立此最佳实践的好处：** 对您的当前实施进行基准测试，以便衡量性能改进情况。 

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

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

 在开发期间监控性能：实施可以让您在工作负载的发展期间了解其性能的流程。 

 集成到您的交付管道：在您的交付管道中自动运行负载测试。将测试结果与预先定义的关键性能指标 (KPI) 和阈值进行比较，以确保您继续满足性能要求。 

 测试用户体验：使用合成或净化版本的生产数据（删除敏感信息或身份识别信息）进行负载测试。在应用程序中大规模使用重演或预先编程的用户体验，从而演练整个架构。 

 真实用户监控：使用 CloudWatch RUM 帮助您收集和查看有关应用程序性能的客户端数据。使用这些数据来帮助建立您的真实用户性能基准。 

## 资源
<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 知识中心](https://aws.amazon.com/premiumsupport/knowledge-center/) 
+  [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) 

 **相关视频：** 
+  [Amazon Builders’ Library 简介 (DOP328)](https://www.youtube.com/watch?v=sKRdemSirDM) 
+  [这就是我的架构](https://aws.amazon.com/architecture/this-is-my-architecture/) 
+  [通过 Amazon CloudWatch RUM 优化应用程序](https://www.youtube.com/watch?v=NMaeujY9A9Y) 
+  [Amazon CloudWatch Synthetics 演示](https://www.youtube.com/watch?v=hF3NM9j-u7I) 

 **相关示例：** 
+  [AWS 示例](https://github.com/aws-samples) 
+  [AWS 开发工具包示例](https://github.com/awsdocs/aws-doc-sdk-examples) 
+  [分布式负载测试](https://aws.amazon.com/solutions/implementations/distributed-load-testing-on-aws/) 
+  [使用 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) 

# PERF01-BP07 对工作负载进行负载测试
<a name="perf_performing_architecture_load_test"></a>

 使用不同的资源类型和大小在云上部署最新的工作负载架构。监控部署情况，捕获用于识别性能瓶颈或容量过剩的性能指标。使用此性能信息来设计或改进您的架构和资源选择。 

 负载测试使用 *您的实际* 工作负载，以便您可以了解解决方案在生产环境中的表现。负载测试必须使用生产数据的合成或净化版本（删除敏感信息或身份识别信息）运行。大规模使用重演或预设的工作负载用户旅程，演练整个架构。作为交付管道的一部分，自动执行负载测试，并将结果与预定义的 KPI 和阈值进行比较。这可以确保您持续获得所需的性能。 

 **常见反模式：** 
+  您可以对工作负载的各个部分进行单独负载测试，而不必测试整个工作负载。 
+  您可以在与生产环境不同的基础设施上进行负载测试。 
+  您只能对预期负载，而不能对其他负载进行负载测试，以帮助预测未来可能会出现问题的方面。 
+  在不通知 AWS 支持 的情况下执行负载测试，并让您的测试就像拒绝服务事件那样失败。 

 **建立此最佳实践的好处：** 通过负载测试来衡量您的性能，可向您说明随着负载的增加，您将在哪些方面受到影响。这样您便可以在更改影响您的工作负载之前，对所需进行的更改进行预测。 

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

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

 利用负载测试来验证方法：对概念验证方案进行负载测试，以确定您是否满足性能要求。您可以使用 AWS 服务来运行生产规模的环境，以测试您的架构。由于您只需在需要时为测试环境付费，因此，执行全面测试的成本远远低于使用本地环境的成本。 

 监控指标：Amazon CloudWatch 可以收集架构中各种资源的指标。您也可以收集和发布自定义指标，用于显示业务指标或派生指标。使用 CloudWatch 或第三方解决方案来设置指示超出阈值的警报。 

 大规模测试：负载测试时使用您的实际工作负载，以便您可以了解解决方案在生产环境中的表现。您可以使用 AWS 服务来运行生产规模的环境，以测试您的架构。由于您只需为所需的测试环境付费，因此，执行全面测试的成本要低于使用本地环境的成本。利用 AWS 云 测试您的工作负载，以发现工作负载的哪些部分无法扩展或者是否以非线性方式扩展。例如，您可以使用 Spot 实例以很低的成本生成负载，并在投入生产前发现瓶颈。 

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

 **相关文档：** 
+  [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) 
+  [使用 CloudFormer 构建 AWS CloudFormation 模板](https://aws.amazon.com/blogs/devops/building-aws-cloudformation-templates-using-cloudformer/) 
+  [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) 

 **相关示例：** 
+  [AWS 上的分布式负载测试](https://aws.amazon.com/solutions/implementations/distributed-load-testing-on-aws/) 

# PERF 2  如何选择计算解决方案？
<a name="perf-02"></a>

适合工作负载的最佳计算解决方案会根据应用程序设计、使用模式和配置设置而有所不同。架构可以使用不同的计算解决方案来支持各种组件，并且可以实现各种不同的功能来提高性能。为架构选择错误的计算解决方案可能会降低性能效率。

**Topics**
+ [PERF02-BP01 评估可用的计算方案](perf_select_compute_evaluate_options.md)
+ [PERF02-BP02 了解可用的计算配置选项](perf_select_compute_config_options.md)
+ [PERF02-BP03 收集与计算相关的指标](perf_select_compute_collect_metrics.md)
+ [PERF02-BP04 通过合理调整大小来确定需要的配置](perf_select_compute_right_sizing.md)
+ [PERF02-BP05 利用可用的资源弹性](perf_select_compute_elasticity.md)
+ [PERF02-BP06 根据指标持续评估计算需求](perf_select_compute_use_metrics.md)

# PERF02-BP01 评估可用的计算方案
<a name="perf_select_compute_evaluate_options"></a>

 了解您的工作负载如何从使用不同的计算方案（例如实例、容器和函数）中受益。 

 **期望结果：** 通过了解所有可用的计算方案，您可以发现提高性能、降低不必要的基础设施成本和减少维护工作负载所需的运营工作量的机会。部署新服务和功能后，您还能缩短上市时间。 

 **常见反模式：** 
+  在迁移后工作负载中，使用与本地使用的相同的计算解决方案。 
+  缺乏对云计算解决方案以及这些解决方案可如何提高计算性能的认识。 
+  为了满足扩展或性能需求，现有计算解决方案采用了过大的规模，而使用替代计算解决方案可以更准确地满足您的工作负载特性需求。 

 **建立此最佳实践的好处：** 通过确定计算需求和评估可用的计算解决方案，业务利益相关者和工程团队将了解使用所选计算解决方案的好处和局限性。所选计算解决方案应符合工作负载性能标准。关键标准包括：处理需求、流量模式、数据访问模式、扩展需求和延迟要求。 

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

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

 了解虚拟化、容器化和管理解决方案，这些解决方案可以为您的工作负载带来好处并满足性能要求。一个工作负载可以包含多种类型的计算解决方案。每种计算解决方案都有不同的特征。根据您的工作负载规模和计算要求，可以选择和配置计算解决方案以满足您的需求。云架构师应该了解实例、容器和函数的优缺点。以下步骤将帮助您了解如何选择计算解决方案，以符合您的工作负载特性和性能要求。 


|  **类型**  |  **服务器**  |  **容器**  |  **函数**  | 
| --- | --- | --- | --- | 
|  AWS 服务  |  Amazon Elastic Compute Cloud (Amazon EC2)  |  Amazon Elastic Container Service（Amazon ECS）、Amazon Elastic Kubernetes Service（Amazon EKS）  |  AWS Lambda  | 
|  主要特征  |  具有面向硬件许可要求的专用选项、放置选项，以及基于计算指标的大量不同实例系列选择  |  易于部署、一致的环境、在 EC2 实例之上运行、可扩展  |  运行时间短（15 分钟或更短），最大内存和 CPU 不如其他服务高，托管硬件层，可扩展到数百万并发请求  | 
|  常见使用案例  |  直接迁移、整体式应用程序、混合环境、企业应用程序  |  微服务、混合环境、  |  微服务、事件驱动的应用程序  | 

 

 **实施步骤：** 

1.  通过评估选择计算解决方案必须驻留的位置 [PERF05-BP06 根据网络要求选择工作负载的位置](perf_select_network_location.md)。此位置将限制可供您使用的计算解决方案的类型。

1.  确定符合位置要求和应用程序要求的计算解决方案类型  

   1.  [https://aws.amazon.com/ec2/](https://aws.amazon.com/ec2/) 虚拟服务器实例具有各种不同的系列和规模。它们提供各种功能，包括固态硬盘（SSD，Solid State Drive）和图形处理单元（GPU，Graphics Processing Unit）。EC2 实例在实例选择方面提供了最大的灵活性。启动 EC2 实例时，您指定的实例类型决定了实例的硬件。每种实例类型都提供不同的计算、内存和存储功能。我们按照这些功能把实例分组到实例系列。典型的使用案例包括：运行企业应用程序、高性能计算（HPC，High Performance Computing）、训练和部署机器学习应用程序以及运行云原生应用程序。

   1.  [https://aws.amazon.com/ecs/](https://aws.amazon.com/ecs/) 是一项完全托管的容器编排服务，通过此服务，您可以使用 AWS Fargate 在 EC2 实例或无服务器实例集群上自动运行和管理容器。您可以结合使用 Amazon ECS 与其他服务，如 Amazon Route 53、Secrets Manager、AWS Identity and Access Management（IAM）和 Amazon CloudWatch。如果您的应用程序是容器化的并且工程团队首选 Docker 容器，则建议使用 Amazon ECS。 

   1.  [https://aws.amazon.com/eks/](https://aws.amazon.com/eks/) 是一项完全托管的 Kubernetes 服务。您可以选择使用 AWS Fargate 运行 EKS 集群，而无需预置和管理服务器。由于与 AWS 服务（如 Amazon CloudWatch、自动扩缩组、AWS Identity and Access Management（IAM）和 Amazon Virtual Private Cloud（VPC））集成，Amazon EKS 的管理得到了简化。使用容器时，必须使用计算指标为您的工作负载选择最佳类型，类似于使用计算指标选择 EC2 或 AWS Fargate 实例类型的方式。如果您的应用程序是容器化的并且工程团队首选 Kubernetes 容器而不是 Docker 容器，则建议使用 Amazon EKS。 

   1.  您可以使用 [https://aws.amazon.com/lambda/](https://aws.amazon.com/lambda/) 运行支持允许的运行时、内存和 CPU 选项的代码。您只需上传代码，AWS Lambda 就会处理运行和扩展代码所需的一切工作。您可以将代码设置为从其他 AWS 服务自动触发或直接调用它。对于为云开发的短时间运行的微服务架构，建议使用 Lambda。  

1.  在试用新的计算解决方案后，规划迁移并验证性能指标。这是一个持续的过程，请参阅 [PERF02-BP04 通过合理调整大小来确定需要的配置](perf_select_compute_right_sizing.md).

 **实施计划的工作量级别：** 如果工作负载从一种计算解决方案转移到另一种计算解决方案，则重构应用程序可能需要 *中等* 工作量。   

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

 **相关文档：** 
+  [使用 AWS 进行云计算 ](https://aws.amazon.com/products/compute/?ref=wellarchitected) 
+  [EC2 实例类型 ](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html?ref=wellarchitected) 
+  [EC2 实例的处理器状态控制 ](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/processor_state_control.html?ref=wellarchitected) 
+  [EKS 容器：EKS Worker 节点 ](https://docs.aws.amazon.com/eks/latest/userguide/worker.html?ref=wellarchitected) 
+  [Amazon ECS 容器：Amazon ECS 容器实例 ](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_instances.html?ref=wellarchitected) 
+  [函数：Lambda 函数配置](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html?ref=wellarchitected#function-configuration) 
+  [容器规范性指南](https://aws.amazon.com/prescriptive-guidance/?apg-all-cards.sort-by=item.additionalFields.sortText&apg-all-cards.sort-order=desc&awsf.apg-new-filter=*all&awsf.apg-content-type-filter=*all&awsf.apg-code-filter=*all&awsf.apg-category-filter=categories%23containers&awsf.apg-rtype-filter=*all&awsf.apg-isv-filter=*all&awsf.apg-product-filter=*all&awsf.apg-env-filter=*all) 
+  [无服务器规范性指南](https://aws.amazon.com/prescriptive-guidance/?apg-all-cards.sort-by=item.additionalFields.sortText&apg-all-cards.sort-order=desc&awsf.apg-new-filter=*all&awsf.apg-content-type-filter=*all&awsf.apg-code-filter=*all&awsf.apg-category-filter=categories%23serverless&awsf.apg-rtype-filter=*all&awsf.apg-isv-filter=*all&awsf.apg-product-filter=*all&awsf.apg-env-filter=*all) 

 **相关视频：** 
+  [如何为初创公司选择计算方案](https://aws.amazon.com/startups/start-building/how-to-choose-compute-option/) 
+  [优化 AWS 计算的性能和成本（CMP323-R1）](https://www.youtube.com/watch?v=zt6jYJLK8sg) 
+  [Amazon EC2 foundations (CMP211-R2) ](https://www.youtube.com/watch?v=kMMybKqC2Y0&ref=wellarchitected) 
+  [推动下一代 Amazon EC2：深入了解 Nitro 系统 ](https://www.youtube.com/watch?v=rUY-00yFlE4&ref=wellarchitected) 
+  [使用 AWS Inferentia 提供高性能的 ML 推理（CMP324-R1） ](https://www.youtube.com/watch?v=17r1EapAxpk&ref=wellarchitected) 
+  [更好、更快、更便宜的计算：Amazon EC2 成本优化（CMP202-R1） ](https://www.youtube.com/watch?v=_dvh4P2FVbw&ref=wellarchitected) 

 **相关示例：** 
+  [将 Web 应用程序迁移到容器](https://application-migration-with-aws.workshop.aws/en/container-migration.html) 
+  [运行无服务器 Hello World](https://aws.amazon.com/getting-started/hands-on/run-serverless-code/) 

# PERF02-BP02 了解可用的计算配置选项
<a name="perf_select_compute_config_options"></a>

 每种计算解决方案都有可供您使用的选项和配置，以支持您的工作负载特性。了解各种选项如何补充您的工作负载，以及哪些配置选项最适合您的应用程序。这些选项的示例包括实例系列、规模、功能（GPU、I/O）、突增、超时、函数大小、容器实例和并发度。 

 **期望结果：** 包括 CPU、内存、网络吞吐量、GPU、IOPS、流量模式和数据访问模式在内的工作负载特性将整理在案，用于配置计算解决方案以匹配工作负载特性。这些指标加上特定于工作负载的自定义指标都会被记录并监控，然后用于优化计算配置以最好地满足要求。 

 **常见反模式：** 
+  使用与本地使用的相同的计算解决方案。 
+  不审核计算方案或实例系列以匹配工作负载特性。 
+  扩大计算规模以确保突增能力。 
+  您可以为同一工作负载使用多个计算管理平台。 

** 建立此最佳实践的好处：** 熟悉 AWS 计算产品/服务，以便为每个工作负载确定合适的解决方案。为工作负载选择计算产品/服务后，您可以快速试用这些计算产品/服务，以确定它们在多大程度上满足您的工作负载需求。为满足您的工作负载特性而优化的计算解决方案将会提高性能、降低成本并提高可靠性。

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

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

 如果您的工作负载已经使用相同的计算方案超过四周，并且您预计这些特征在未来将保持不变，那么您可以使用 [AWS Compute Optimizer](https://aws.amazon.com/compute-optimizer/) 根据您的计算特征向您提供建议。如果由于缺乏指标、实例类型不受支持或预计特征会发生变化而无法选择使用 AWS Compute Optimizer， [那么您必须](https://docs.aws.amazon.com/compute-optimizer/latest/ug/requirements.html#requirements-ec2-instances) 根据负载测试和实验来预测您的指标。  

 **实施步骤：** 

1.  您是否在 EC2 实例或具有 EC2 启动类型的容器上运行？ 

   1.  您的工作负载能否使用 GPU 来提高性能？ 

      1.  [加速计算型](https://aws.amazon.com/ec2/instance-types/?trk=36c6da98-7b20-48fa-8225-4784bced9843&sc_channel=ps&sc_campaign=acquisition&sc_medium=ACQ-P|PS-GO|Brand|Desktop|SU|Compute|EC2|US|EN|Text&s_kwcid=AL!4422!3!536392622533!e!!g!!ec2%20instance%20types&ef_id=CjwKCAjwiuuRBhBvEiwAFXKaNNRXM5FrnFg5H8RGQ4bQKuUuK1rYWmU2iH-5H3VZPqEheB-pEm-GNBoCdD0QAvD_BwE:G:s&s_kwcid=AL!4422!3!536392622533!e!!g!!ec2%20instance%20types#Accelerated_Computing) 实例是基于 GPU 的实例，可为机器学习训练、推理和高性能计算提供最高性能。 

   1.  您的工作负载是否运行机器学习推理应用程序？ 

      1.  [AWS Inferentia（Inf1）](https://aws.amazon.com/ec2/instance-types/inf1/) – Inf1 实例旨在支持机器学习推理应用程序。通过使用 Inf1 实例，客户可以运行大规模机器学习推理应用程序，例如图像识别、语音识别、自然语言处理、个性化和欺诈检测。您可以在 TensorFlow、PyTorch 或 MXNet 等流行的机器学习框架中构建模型，并使用 GPU 实例来训练模型。在对机器学习模型进行训练以满足要求之后，您可以使用 [AWS Neuron](https://aws.amazon.com/machine-learning/neuron/)在 Inf1 实例上部署模型，AWS Neuron 是一种专门的软件开发工具包（SDK），它由编译器、运行时和分析工具组成，可优化 Inferentia 芯片的机器学习推理性能。 

   1.  您的工作负载是否与底层硬件集成以提高性能？  

      1.  [现场可编程门阵列 (FPGA)](https://aws.amazon.com/ec2/instance-types/f1/) – 使用 FPGA，您可以通过为要求最苛刻的工作负载定制硬件加速执行来优化工作负载。您可以利用受支持的通用编程语言（例如 C 语言或 Go 语言）或面向硬件的语言（例如 Verilog 语言或 VHDL 语言）来定义算法。 

   1.  您是否有至少四周的指标，并且可以预测您的流量模式和指标在未来将保持不变？ 

      1.  使用 [Compute Optimizer](https://aws.amazon.com/compute-optimizer/) 获得关于哪种计算配置最符合您的计算特征的机器学习建议。 

   1.  您的工作负载性能是否受到 CPU 指标的限制？  

      1.  [计算优化型](https://aws.amazon.com/ec2/instance-types/?trk=36c6da98-7b20-48fa-8225-4784bced9843&sc_channel=ps&sc_campaign=acquisition&sc_medium=ACQ-P|PS-GO|Brand|Desktop|SU|Compute|EC2|US|EN|Text&s_kwcid=AL!4422!3!536392622533!e!!g!!ec2%20instance%20types&ef_id=CjwKCAjwiuuRBhBvEiwAFXKaNNRXM5FrnFg5H8RGQ4bQKuUuK1rYWmU2iH-5H3VZPqEheB-pEm-GNBoCdD0QAvD_BwE:G:s&s_kwcid=AL!4422!3!536392622533!e!!g!!ec2%20instance%20types#Compute_Optimized) 实例非常适合需要高性能处理器的工作负载。  

   1.  您的工作负载性能是否受到内存指标的限制？  

      1.  [内存优化型](https://aws.amazon.com/ec2/instance-types/?trk=36c6da98-7b20-48fa-8225-4784bced9843&sc_channel=ps&sc_campaign=acquisition&sc_medium=ACQ-P|PS-GO|Brand|Desktop|SU|Compute|EC2|US|EN|Text&s_kwcid=AL!4422!3!536392622533!e!!g!!ec2%20instance%20types&ef_id=CjwKCAjwiuuRBhBvEiwAFXKaNNRXM5FrnFg5H8RGQ4bQKuUuK1rYWmU2iH-5H3VZPqEheB-pEm-GNBoCdD0QAvD_BwE:G:s&s_kwcid=AL!4422!3!536392622533!e!!g!!ec2%20instance%20types#Memory_Optimized) 实例提供大量内存以支持内存密集型工作负载。 

   1.  您的工作负载性能是否受到 IOPS 的限制？ 

      1.  [存储优化型](https://aws.amazon.com/ec2/instance-types/?trk=36c6da98-7b20-48fa-8225-4784bced9843&sc_channel=ps&sc_campaign=acquisition&sc_medium=ACQ-P|PS-GO|Brand|Desktop|SU|Compute|EC2|US|EN|Text&s_kwcid=AL!4422!3!536392622533!e!!g!!ec2%20instance%20types&ef_id=CjwKCAjwiuuRBhBvEiwAFXKaNNRXM5FrnFg5H8RGQ4bQKuUuK1rYWmU2iH-5H3VZPqEheB-pEm-GNBoCdD0QAvD_BwE:G:s&s_kwcid=AL!4422!3!536392622533!e!!g!!ec2%20instance%20types#Storage_Optimized) 实例专为需要对本地存储进行大量顺序读写访问（IOPS）的工作负载而设计。 

   1.  您的工作负载特性是否表示需要在所有指标之间取得平衡？ 

      1.  您的工作负载 CPU 是否需要突增以处理流量峰值？ 

         1.  [可突增性能](https://aws.amazon.com/ec2/instance-types/?trk=36c6da98-7b20-48fa-8225-4784bced9843&sc_channel=ps&sc_campaign=acquisition&sc_medium=ACQ-P|PS-GO|Brand|Desktop|SU|Compute|EC2|US|EN|Text&s_kwcid=AL!4422!3!536392622533!e!!g!!ec2%20instance%20types&ef_id=CjwKCAjwiuuRBhBvEiwAFXKaNNRXM5FrnFg5H8RGQ4bQKuUuK1rYWmU2iH-5H3VZPqEheB-pEm-GNBoCdD0QAvD_BwE:G:s&s_kwcid=AL!4422!3!536392622533!e!!g!!ec2%20instance%20types#Instance_Features) 实例类似于计算优化型实例，不同之处在于它们提供了功能，可以突破计算优化型实例中确定的固定 CPU 基线。 

      1.  [通用型](https://aws.amazon.com/ec2/instance-types/?trk=36c6da98-7b20-48fa-8225-4784bced9843&sc_channel=ps&sc_campaign=acquisition&sc_medium=ACQ-P|PS-GO|Brand|Desktop|SU|Compute|EC2|US|EN|Text&s_kwcid=AL!4422!3!536392622533!e!!g!!ec2%20instance%20types&ef_id=CjwKCAjwiuuRBhBvEiwAFXKaNNRXM5FrnFg5H8RGQ4bQKuUuK1rYWmU2iH-5H3VZPqEheB-pEm-GNBoCdD0QAvD_BwE:G:s&s_kwcid=AL!4422!3!536392622533!e!!g!!ec2%20instance%20types#General_Purpose) 实例平衡了所有特性以支持各种工作负载。 

   1.  您的计算实例是否在 Linux 上运行并受到网络接口卡上的网络吞吐量的限制？ 

      1.  查看 [性能问题 5，最佳实践 2：评估可用的联网功能，](https://docs.aws.amazon.com/wellarchitected/latest/performance-efficiency-pillar/network-architecture-selection.html) 找到合适的实例类型和系列来满足您的性能需求。 

   1.  您的工作负载是否在特定可用区中需要一致、可预测的实例且您可以承诺一年的使用？  

      1.  [预留实例](https://aws.amazon.com/ec2/pricing/reserved-instances/) 确保特定可用区中的容量预留。预留实例是在特定可用区中提供所需计算能力的理想选择。  

   1.  您的工作负载是否具有需要专用硬件的许可证？ 

      1.  [专用主机](https://aws.amazon.com/ec2/dedicated-hosts/) 支持现有的软件许可证，并帮助您满足合规性要求。 

   1.  您的计算解决方案是否会出现突增并需要同步处理？ 

      1.  [按需实例](https://aws.amazon.com/ec2/pricing/on-demand/) 让您可以按小时或按秒使用计算容量，而无需做出长期承诺。这些实例非常适合超出性能基线需求的突增情况。 

   1.  您的计算解决方案是无状态、具备容错能力和异步的吗？  

      1.  [竞价型实例](https://aws.amazon.com/ec2/spot/) 让您可以将未使用的实例容量用于无状态的容错工作负载。  

1.  您是否在 [Fargate](https://aws.amazon.com/fargate/)上运行容器？ 

   1.  您的任务性能是否受到内存或 CPU 的限制？ 

      1.  使用 [任务大小](https://docs.aws.amazon.com/AmazonECS/latest/bestpracticesguide/capacity-tasksize.html) 调整内存或 CPU。 

   1.  性能是否受到流量模式突增的影响？ 

      1.  使用 [Auto Scaling](https://docs.aws.amazon.com/AmazonECS/latest/bestpracticesguide/capacity-autoscaling.html) 配置以匹配您的流量模式。 

1.  您的计算解决方案是否位于 [Lambda](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-features.html)？ 

   1.  您是否有至少四周的指标，并且可以预测您的流量模式和指标在未来将保持不变？ 

      1.  使用 [Compute Optimizer](https://aws.amazon.com/compute-optimizer/) 获得关于哪种计算配置最符合您的计算特征的机器学习建议。 

   1.  您是否没有足够的指标来使用 AWS Compute Optimizer？ 

      1.  如果您没有可用的指标来使用 Compute Optimizer，请使用 [AWS Lambda Power Tuning](https://docs.aws.amazon.com/lambda/latest/operatorguide/profile-functions.html) 帮助选择最佳配置。 

   1.  您的函数性能是否受到内存或 CPU 的限制？ 

      1.  配置 [Lambda 内存](https://docs.aws.amazon.com/lambda/latest/dg/configuration-function-common.html#configuration-memory-console) 以满足您的性能需求指标。 

   1.  您的函数在执行时是否超时？ 

      1.  更改 [超时设置](https://docs.aws.amazon.com/lambda/latest/dg/configuration-function-common.html) 

   1.  您的函数性能是否受到突发活动和并发性的限制？  

      1.  配置 [并发设置](https://docs.aws.amazon.com/lambda/latest/dg/configuration-concurrency.html) 以满足您的性能要求。 

   1.  您的函数是否异步执行并且在重试时失败？ 

      1.  在 [异步配置](https://docs.aws.amazon.com/lambda/latest/dg/invocation-async.html) 设置中配置事件的最大期限和最大重试次数限制。 

## 实施计划的工作量级别： 
<a name="level-of-effort-for-the-implementation-plan-to-establish-this-best-practice-you-must-be-aware-of-your-current-compute-characteristics-and-metrics.-gathering-those-metrics-establishing-a-baseline-and-then-using-those-metrics-to-identify-the-ideal-compute-option-is-a-low-to-moderate-level-of-effort.-this-is-best-validated-by-load-tests-and-experimentation."></a>

要建立此最佳实践，您必须了解当前的计算特征和指标。收集这些指标，建立基线，然后使用这些指标来确定理想的计算方案，这需要 *低* 到 *中等* 工作量。这最好通过负载测试和实验来验证。 

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

 **相关文档：** 
+  [使用 AWS 进行云计算 ](https://aws.amazon.com/products/compute/?ref=wellarchitected) 
+  [AWS Compute Optimizer](https://aws.amazon.com/compute-optimizer/) 
+  [EC2 实例类型 ](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html?ref=wellarchitected) 
+  [EC2 实例的处理器状态控制 ](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/processor_state_control.html?ref=wellarchitected) 
+  [EKS 容器：EKS Worker 节点 ](https://docs.aws.amazon.com/eks/latest/userguide/worker.html?ref=wellarchitected) 
+  [Amazon ECS 容器：Amazon ECS 容器实例 ](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_instances.html?ref=wellarchitected) 
+  [函数：Lambda 函数配置](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html?ref=wellarchitected#function-configuration) 

 **相关视频：** 
+  [Amazon EC2 foundations (CMP211-R2) ](https://www.youtube.com/watch?v=kMMybKqC2Y0&ref=wellarchitected) 
+  [推动下一代 Amazon EC2：深入了解 Nitro 系统 ](https://www.youtube.com/watch?v=rUY-00yFlE4&ref=wellarchitected) 
+  [优化 AWS 计算的性能和成本（CMP323-R1） ](https://www.youtube.com/watch?v=zt6jYJLK8sg&ref=wellarchitected) 

 **相关示例：** 
+  [在启用 Compute Optimizer 和内存利用率的情况下合理调整大小](https://www.wellarchitectedlabs.com/cost/200_labs/200_aws_resource_optimization/5_ec2_computer_opt/) 
+  [AWS Compute Optimizer 演示代码](https://github.com/awslabs/ec2-spot-labs/tree/master/aws-compute-optimizer) 

# PERF02-BP03 收集与计算相关的指标
<a name="perf_select_compute_collect_metrics"></a>

要了解计算资源的性能，您必须记录和跟踪各种系统的利用率。此数据可用于更准确地确定资源需求。  

 工作负载会生成大量数据，例如指标、日志和事件。确定您现有的存储、监控和可观察性服务是否可以管理生成的数据。确定反映资源利用率并且可以在单个平台上收集、聚合和关联的指标。这些指标应该代表您的所有工作负载资源、应用程序和服务，以便您可以轻松获得系统范围的可见性，并快速识别性能改进机会和问题。

 **期望结果：** 在单个平台上，识别、收集、聚合和关联涉及到计算相关资源的所有指标，并进行保留以支持成本和运营目标。 

 **常见反模式：** 
+  您只能手动搜索日志文件来查找指标。  
+  您只能将指标发布到内部工具。 
+  您只使用所选监控软件记录的默认指标。 
+  您只在出现问题时检查指标。 

 

 **建立此最佳实践的好处：** 要监控工作负载的性能，必须记录一段时间的多项性能指标。您可以利用这些指标来检测性能异常。这些指标还有助于根据业务指标衡量性能，以确保满足工作负载需求。 

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

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

 识别、收集、聚合和关联与计算相关的指标。使用 Amazon CloudWatch 之类的服务可以使实施速度更快并更易于维护。除了记录的默认指标外，还可以识别和跟踪工作负载中的其他系统级指标。记录 CPU 利用率、内存、磁盘 I/O 和网络入站和出站指标等数据，以深入了解利用率水平或瓶颈。这些数据对于了解工作负载的性能以及计算解决方案的使用方式至关重要。将这些指标用作数据驱动方法的一部分，以便主动调整和优化工作负载的资源。  

 **实施步骤：** 

1.  必须跟踪哪些计算解决方案指标？ 

   1.  [EC2 默认指标](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/viewing_metrics_with_cloudwatch.html) 

   1.  [Amazon ECS 默认指标](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/cloudwatch-metrics.html) 

   1.  [EKS 默认指标](https://docs.aws.amazon.com/prescriptive-guidance/latest/implementing-logging-monitoring-cloudwatch/kubernetes-eks-metrics.html) 

   1.  [Lambda 默认指标](https://docs.aws.amazon.com/lambda/latest/dg/monitoring-functions-access-metrics.html) 

   1.  [EC2 内存和磁盘指标](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/mon-scripts.html) 

1.  我目前是否有经过批准的日志记录和监控解决方案？ 

   1.  [Amazon CloudWatch](https://aws.amazon.com/cloudwatch/) 

   1.  [适用于 OpenTelemetry 的 AWS Distro](https://aws.amazon.com/otel/) 

   1.  [Amazon Managed Service for Prometheus](https://docs.aws.amazon.com/grafana/latest/userguide/prometheus-data-source.html) 

1.  我是否确定并配置了数据留存策略，以符合我的安全和运营目标？ 

   1.  [CloudWatch 指标的默认数据留存](https://aws.amazon.com/cloudwatch/faqs/#AWS_resource_.26_custom_metrics_monitoring) 

   1.  [CloudWatch Logs 的默认数据留存](https://aws.amazon.com/cloudwatch/faqs/#Log_management) 

1.  您如何部署指标和日志聚合代理？ 

   1.  [AWS Systems Manager Automation](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-automation.html?ref=wellarchitected) 

   1.  [OpenTelemetry Collector](https://aws-otel.github.io/docs/getting-started/collector) 

 **实施计划的工作量级别： **从所有计算资源中识别、跟踪、收集、聚合和关联指标所需的工作量为 *中* 。 

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

 **相关文档：** 
+  [Amazon CloudWatch 文档](https://docs.aws.amazon.com/cloudwatch/index.html?ref=wellarchitected) 
+  [使用 CloudWatch 代理从 Amazon EC2 实例和本地服务器收集指标和日志](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html?ref=wellarchitected) 
+  [访问 AWS Lambda 的 Amazon CloudWatch Logs](https://docs.aws.amazon.com/lambda/latest/dg/monitoring-functions-logs.html?ref=wellarchitected) 
+  [结合使用 CloudWatch Logs 与容器实例](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/using_cloudwatch_logs.html?ref=wellarchitected) 
+  [发布自定义指标](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/publishingMetrics.html?ref=wellarchitected) 
+  [AWS Answers：集中式日志记录](https://aws.amazon.com/answers/logging/centralized-logging/?ref=wellarchitected) 
+  [发布 CloudWatch 指标的 AWS 服务](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CW_Support_For_AWS.html?ref=wellarchitected) 
+  [在 AWS Fargate 上监控 Amazon EKS](https://aws.amazon.com/blogs/containers/monitoring-amazon-eks-on-aws-fargate-using-prometheus-and-grafana/) 

 

 **相关视频：** 
+  [AWS 上的应用程序性能管理](https://www.youtube.com/watch?v=5T4stR-HFas&ref=wellarchitected) 
+  [制定监控计划](https://www.youtube.com/watch?v=OMmiGETJpfU&ref=wellarchitected) 

 

 **相关示例：** 
+  [第 100 级：使用 CloudWatch 控制面板进行监控](https://wellarchitectedlabs.com/performance-efficiency/100_labs/100_monitoring_with_cloudwatch_dashboards/) 
+  [第 100 级：使用 CloudWatch 控制面板监控 Windows EC2 实例](https://wellarchitectedlabs.com/performance-efficiency/100_labs/100_monitoring_windows_ec2_cloudwatch/) 
+  [第 100 级：使用 CloudWatch 控制面板监控 Amazon Linux EC2 实例](https://wellarchitectedlabs.com/performance-efficiency/100_labs/100_monitoring_linux_ec2_cloudwatch/) 

# PERF02-BP04 通过合理调整大小来确定需要的配置
<a name="perf_select_compute_right_sizing"></a>

分析您的工作负载的各种性能特征，以及这些特征与内存、网络、I/O 和 CPU 使用率之间的关系。根据这些数据选择最适合您的工作负载配置文件的资源。例如，内存密集型工作负载（如数据库）可能会受益于更高的内存核心比。但是，计算密集型工作负载可能需要更高的核心数和频率，而每个核心配备较低的内存也可以满足要求。

 **常见反模式：** 
+  选择在所有工作负载可用的所有性能特征中具有最大值的实例。 
+  您应将所有实例类型标准化为一种类型，以便于管理。 
+  根据标准合成基准进行优化，而不验证特定工作负载的实际需求。 
+  在很长一段时间内保持相同的基础设施，而不重新评估和集成新产品。 

 **建立此最佳实践的好处：**熟悉工作负载的需求后，可以将这些需求与可用的计算产品进行比较，并快速试验以确定哪些产品最有效地满足工作负载的需求。这样就可以实现最佳性能，而不会为不需要的资源多付钱。 

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

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

通过合理调整大小来修改工作负载配置。要优化性能、整体效率和成本效益，请先确定工作负载需要哪些资源。为内存密集型工作负载（如数据库）选择内存优化型实例（如 R 系列实例）。对于需要更高计算能力的工作负载，请选择 C 系列实例，或选择具有更多核心数或更高核心频率的实例。根据工作负载的需求，而不是通过与标准的合成基准进行比较来选择 I/O 性能。要获得更高的 I/O 性能，请选择 I 系列实例，[选择 I/O 优化型 Amazon EBS 卷](https://aws.amazon.com/premiumsupport/knowledge-center/optimize-ebs-provisioned-iops/)，或选择具有[实例存储](https://aws.amazon.com/premiumsupport/knowledge-center/instance-store-vs-ebs/)的实例。有关特定实例类型的更多详细信息，请参阅 [Amazon EC2 实例类型](https://aws.amazon.com/ec2/instance-types/)。

 合理调整大小可确认您的工作负载表现得尽可能好，同时不会为不需要的资源多付钱。 

 **实施步骤** 
+  了解工作负载或分析其资源要求。 
+  单独评估工作负载。借助 AWS 云，您可以自行灵活和敏捷地合理调整每个工作负载，不需要作出妥协。 
+  创建测试环境，找到最适合您的工作负载的计算产品/服务。 
+  持续重新评估新的计算产品，并与工作负载的需求进行比较。 
+  定期审查新服务产品以获得更好的性价比。 
+  定期执行 Well-Architected Framework 审查。 

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

 **相关最佳实践：** 
+  [PERF02-BP03 收集与计算相关的指标](perf_select_compute_collect_metrics.md) 
+  [PERF02-BP06 根据指标持续评估计算需求](perf_select_compute_use_metrics.md) 

 **相关文档：** 
+  [AWS Compute Optimizer](https://aws.amazon.com/compute-optimizer/)  
+  [使用 AWS 进行云计算](https://aws.amazon.com/products/compute/) 
+  [Amazon EC2 实例类型](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) 
+  [Amazon ECS 容器：Amazon ECS 容器实例](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_instances.html) 
+  [Amazon EKS 容器：Amazon EKS Worker 节点](https://docs.aws.amazon.com/eks/latest/userguide/worker.html) 
+  [函数：Lambda 函数配置](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html#function-configuration) 

 **相关视频：** 
+  [Amazon EC2 基础（CMP211-R2）](https://www.youtube.com/watch?v=kMMybKqC2Y0) 
+  [更好、更快、更便宜的计算：成本优化Amazon EC2（CMP202-R1）](https://www.youtube.com/watch?v=_dvh4P2FVbw) 
+  [使用 AWS Inferentia 提供高性能的 ML 推理（CMP324-R1）](https://www.youtube.com/watch?v=17r1EapAxpk) 
+  [优化 AWS 计算的性能和成本（CMP323-R1）](https://www.youtube.com/watch?v=zt6jYJLK8sg) 
+  [推动下一代 Amazon EC2：深入了解 Nitro 系统](https://www.youtube.com/watch?v=rUY-00yFlE4) 
+  [如何为初创公司选择计算方案](https://aws.amazon.com/startups/start-building/how-to-choose-compute-option/) 
+  [优化 AWS 计算的性能和成本（CMP323-R1）](https://www.youtube.com/watch?v=zt6jYJLK8sg) 

 **相关示例：** 
+  [在启用 Compute Optimizer 和内存利用率的情况下合理调整大小](https://www.wellarchitectedlabs.com/cost/200_labs/200_aws_resource_optimization/5_ec2_computer_opt/) 
+  [AWS Compute Optimizer 演示代码](https://github.com/awslabs/ec2-spot-labs/tree/master/aws-compute-optimizer) 

# PERF02-BP05 利用可用的资源弹性
<a name="perf_select_compute_elasticity"></a>

云让您能够通过各种机制灵活地动态扩展和缩减资源，以便满足不断变化的需求。将这种弹性与计算相关指标相结合，工作负载可以自动响应更改，以使用所需的资源，并且仅使用所需的资源。

 **常见反模式：** 
+  为了涵盖可能的峰值而过度预置。 
+  通过手动增加容量来对警报作出反应。 
+  增加容量而不考虑预置时间。 
+  在扩展事件之后，您将保留增加的容量，而不是缩减容量。 
+  监控的指标不直接反映工作负载的真实需求。 

 **建立此最佳实践的好处：**需求可以固定、可变、遵循一种模式或突增。实现供需匹配能够尽可能降低工作负载的成本。监控、测试和配置工作负载弹性可优化性能、节省成本以及在使用需求变化时提高可靠性。尽管也可以通过手动方法实现此目标，但在更大规模上这么做是不切实际的。基于指标的自动化方法可确保资源在任何给定时间满足需求。 

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

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

应使用基于指标的自动化来利用弹性，目标是让您拥有的资源供应与工作负载所需的资源需求相匹配。例如，您可以使用 [Amazon CloudWatch 指标来监控资源](https://aws.amazon.com/startups/start-building/how-to-monitor-resources/)，或使用 Amazon CloudWatch 指标来监控 Auto Scaling 组。

 结合与计算相关的指标，工作负载可以自动响应这些变化，并利用一系列最优的资源来实现其目标。您还必须为预置时间和潜在的资源缺乏做好计划。 

 实例、容器和函数都能够作为服务的一项功能、以 [Application Auto Scaling](https://aws.amazon.com/autoscaling/) 的形式或与 [Amazon EC2 Auto Scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguide/what-is-amazon-ec2-auto-scaling.html) 相结合来提供可实现弹性的机制。在架构中利用弹性，可确认您有足够的容量来满足各种使用规模的性能要求。 

 验证您的指标是否可以根据所部署的工作负载类型来扩展或缩减弹性资源。例如，如果您正在部署一个视频转码应用程序，CPU 利用率预计为 100%，并且不应将此作为您的主要指标。或者，您也可以衡量等待缩放您的实例类型的转码作业的队列深度。 

 工作负载部署需要处理扩展事件和缩减事件。安全地缩减工作负载组件，与在需要时扩展资源同样重要。 

 创建扩缩事件的测试方案，以确认工作负载按预期方式运行。 

 **实施步骤** 
+  利用历史数据来分析一段时间内工作负载的资源需求。提出特定问题，例如： 
  +  您的工作负载是否稳定并随着时间的推移以已知的速率增加？ 
  +  您的工作负载是否按季节性、可重复的模式增加和减少？ 
  +  您的工作负载是否会突增？ 是否可以预测峰值？ 
+  尽可能利用监控服务和历史数据。 
+  标记资源有助于进行监控。使用标签时，请参阅[标记最佳实践](https://docs.aws.amazon.com/whitepapers/latest/tagging-best-practices/tagging-best-practices.html)。此外，[标签可帮助您管理、识别和整理资源](https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html)。 
+  借助 AWS，您可以使用大量不同方法以实现供需匹配。成本优化支柱最佳实践（[COST09-BP01 至 COST09-03](https://docs.aws.amazon.com/wellarchitected/latest/cost-optimization-pillar/manage-demand-and-supply-resources.html)）说明了如何使用以下方法计算成本： 
  + [COST09-BP01 对工作负载需求执行分析](https://docs.aws.amazon.com/wellarchitected/latest/cost-optimization-pillar/cost_manage_demand_resources_cost_analysis.html)
  + [COST09-BP02 实施缓冲区或节流来管理需求](https://docs.aws.amazon.com/wellarchitected/latest/cost-optimization-pillar/cost_manage_demand_resources_buffer_throttle.html)
  + [COST09-BP03 动态供应资源](https://docs.aws.amazon.com/wellarchitected/latest/cost-optimization-pillar/cost_manage_demand_resources_dynamic.html)
+  创建缩减事件的测试方案，以确认工作负载按预期方式运行。 
+  大多数非生产实例在不使用时都应该停止。 
+  对于使用 Amazon Elastic Block Store（Amazon EBS）时的存储需求，充分利用[基于卷的弹性](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-modify-volume.html)。 
+  对于 [Amazon Elastic Compute Cloud（Amazon EC2）](https://aws.amazon.com/ec2/)，请考虑使用 [Auto Scaling 组](https://docs.aws.amazon.com/autoscaling/ec2/userguide/auto-scaling-groups.html)，此功能通过在需求激增时自动增加计算实例数，并在需求减少时减小容量，从而能够优化性能并降低成本。 

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

 **相关最佳实践：** 
+  [PERF02-BP03 收集与计算相关的指标](perf_select_compute_collect_metrics.md) 
+  [PERF02-BP04 通过合理调整大小来确定需要的配置](perf_select_compute_right_sizing.md) 
+  [PERF02-BP06 根据指标持续评估计算需求](perf_select_compute_use_metrics.md) 

 **相关文档：** 
+  [使用 AWS 进行云计算](https://aws.amazon.com/products/compute/) 
+  [Amazon EC2 实例类型](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) 
+  [Amazon ECS 容器：Amazon ECS 容器实例](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_instances.html) 
+  [Amazon EKS 容器：Amazon EKS Worker 节点](https://docs.aws.amazon.com/eks/latest/userguide/worker.html) 
+  [函数：Lambda 函数配置](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html#function-configuration) 

 **相关视频：** 
+  [Amazon EC2 基础（CMP211-R2）](https://www.youtube.com/watch?v=kMMybKqC2Y0) 
+  [更好、更快、更便宜的计算：成本优化Amazon EC2（CMP202-R1）](https://www.youtube.com/watch?v=_dvh4P2FVbw) 
+  [使用 AWS Inferentia 提供高性能的 ML 推理（CMP324-R1）](https://www.youtube.com/watch?v=17r1EapAxpk) 
+  [优化 AWS 计算的性能和成本（CMP323-R1）](https://www.youtube.com/watch?v=zt6jYJLK8sg) 
+  [推动下一代 Amazon EC2：深入了解 Nitro 系统](https://www.youtube.com/watch?v=rUY-00yFlE4) 

 **相关示例：** 
+  [Amazon EC2 Auto Scaling 组示例](https://github.com/aws-samples/amazon-ec2-auto-scaling-group-examples) 
+  [Amazon EFS 教程](https://github.com/aws-samples/amazon-efs-tutorial) 

# PERF02-BP06 根据指标持续评估计算需求
<a name="perf_select_compute_use_metrics"></a>

使用数据驱动型方法，随着时间的推移，持续评估和优化工作负载的计算资源。

 **期望结果：**使用系统级指标来主动监控一段时间内工作负载的行为和要求。根据收集到的数据，通过比较可用资源来评估工作负载的需求，并对计算环境进行更改以实现与您的工作负载配置文件的最佳匹配。例如，随着时间的推移，工作负载可能比最初指定的要更频繁地使用内存，所以转为使用其他实例系列或调整实例大小可能会提高性能和效率。 

 **常见反模式：** 
+  监控系统级指标以深入了解您的工作负载，而不是重新评估计算需求。 
+  根据峰值工作负载要求设计计算需求。 
+  为了满足扩展或性能需求，现有计算解决方案采用了过大的规模，而迁移到替代计算解决方案可以更有效地匹配您的工作负载特性。 

 **建立此最佳实践的好处：**基于真实数据以及期望的成本和性能平衡来优化计算资源。 

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

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

使用数据驱动型方法，基于观察到的工作负载行为来优化计算资源。要实现最高性能和效率，请使用一段时间内从工作负载中收集的数据来持续调整和优化您的资源。查看工作负载对当前资源的使用趋势，并确定可以在哪些方面做出更改，以便更好地满足您的工作负载需求。过度使用资源时，系统性能会降低，而当资源没有得到充分利用时，会导致系统运行效率较低且成本较高。

 要优化性能和提高资源利用率，您需要一个统一的运营视图、实时粒度数据和历史参考。您可以创建自动控制面板来显示这些数据并获得运营和利用率洞察。 

 **实施步骤** 

1.  收集一段时间内与计算相关的指标： 

1.  将工作负载指标与所选计算解决方案中的可用资源进行比较。 

1.  通过合理调整现有解决方案的规模或评估替代计算解决方案，确定任何所需的配置更改。 

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

 **相关最佳实践：** 
+  [PERF02-BP01 评估可用的计算方案](perf_select_compute_evaluate_options.md) 
+  [PERF02-BP02 了解可用的计算配置选项](perf_select_compute_config_options.md) 
+  [PERF02-BP03 收集与计算相关的指标](perf_select_compute_collect_metrics.md) 
+  [PERF02-BP04 通过合理调整大小来确定需要的配置](perf_select_compute_right_sizing.md) 

 **相关文档：** 
+  [使用 AWS 进行云计算](https://aws.amazon.com/products/compute/?ref=wellarchitected) 
+  [AWS Compute Optimizer](https://aws.amazon.com/compute-optimizer/) 
+  [EC2 实例类型](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) 
+  [Amazon ECS 容器：Amazon ECS 容器实例](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_instances.html) 
+  [Amazon EKS 容器：Amazon EKS Worker 节点](https://docs.aws.amazon.com/eks/latest/userguide/worker.html) 
+ [使用 AWS Lambda 函数的最佳实践](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html#function-configuration)

 **相关视频：** 
+  [Amazon EC2 基础（CMP211-R2）](https://www.youtube.com/watch?v=kMMybKqC2Y0) 
+  [更好、更快、更便宜的计算：成本优化Amazon EC2（CMP202-R1）](https://www.youtube.com/watch?v=_dvh4P2FVbw) 
+  [使用 AWS Inferentia 提供高性能的 ML 推理（CMP324-R1）](https://www.youtube.com/watch?v=17r1EapAxpk) 
+  [优化 AWS 计算的性能和成本（CMP323-R1）](https://www.youtube.com/watch?v=zt6jYJLK8sg) 
+  [推动下一代 Amazon EC2：深入了解 Nitro 系统](https://www.youtube.com/watch?v=rUY-00yFlE4) 
+ [选择和优化 Amazon EC2 实例](https://www.youtube.com/watch?v=Vz0HZ6hlpgM)

 **相关示例：** 
+  [在启用 Compute Optimizer 和内存利用率的情况下合理调整大小](https://www.wellarchitectedlabs.com/cost/200_labs/200_aws_resource_optimization/5_ec2_computer_opt/) 
+  [AWS Compute Optimizer 演示代码](https://github.com/awslabs/ec2-spot-labs/tree/master/aws-compute-optimizer) 

# PERF 3  如何选择存储解决方案？
<a name="perf-03"></a>

 针对特定系统的最佳存储解决方案往往取决于访问类型（块、文件或者对象存储）、访问模式（随机或者连续）、数据吞吐量要求、访问频率（在线、离线、归档）、更新频度（WORM、动态）以及可用性与持久性限制等因素。架构良好的系统使用多种解决方案，并且可以实现各种不同的功能来提高性能。 

**Topics**
+ [PERF03-BP01 了解存储特征和要求](perf_right_storage_solution_understand_char.md)
+ [PERF03-BP02 评估可用的配置选项](perf_right_storage_solution_evaluated_options.md)
+ [PERF03-BP03 根据访问模式和指标做出决策](perf_right_storage_solution_optimize_patterns.md)

# PERF03-BP01 了解存储特征和要求
<a name="perf_right_storage_solution_understand_char"></a>

 确定和记录工作负载存储需求，并定义每个位置的存储特征。存储特征示例包括：可共享访问、文件大小、增长率、吞吐量、IOPS、延迟、访问模式和数据持久性。使用这些特征来评估数据块、文件、对象或实例存储服务是否是满足您的存储需求的最有效解决方案。 

 **期望结果：** 根据存储要求确定并记录存储要求，并评估可用的存储解决方案。基于关键存储特征，您的团队将了解所选存储服务将如何提高您的工作负载性能。关键标准包括数据访问模式、增长率、扩展需求和延迟要求。 

 **常见反模式：** 
+  对于所有工作负载，您都只使用一种存储类型，例如 Amazon Elastic Block Store（Amazon EBS）。 
+  您可以假设所有工作负载都具有相似的存储访问性能要求。 

 **建立此最佳实践的好处：** 根据已确定和所需的特征选择存储解决方案将有助于提高工作负载性能，降低成本并减少维护工作负载的运营工作量。您的工作负载性能将受益于存储服务的解决方案、配置和位置。 

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

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

 确定您的工作负载最重要的存储性能指标，并使用基准测试或负载测试，将其作为数据驱动型方法的一部分来实施改进。使用这些数据确定存储解决方案受限的方面，并检查可以改进解决方案的配置选项。确定工作负载的预期增长率，然后选择满足这些增长率的存储解决方案。研究 AWS 存储产品以确定适合您的各种工作负载需求的正确存储解决方案。通过在 AWS 中预置存储解决方案，您有更多机会测试存储产品并确定它们是否适合您的工作负载需求。 


| AWS 服务 | 主要特征 | 常见使用场景 | 
| --- | --- | --- | 
| Amazon S3 |  持久性高达 99.999999999%，无限增长，可从任何地方访问，多种基于访问和弹性的成本模式  |  云原生应用程序数据、数据存档和备份、分析、数据湖、静态网站托管、IoT 数据   | 
| Amazon Glacier |  几秒钟到几小时的延迟，无限增长，极低成本，长期存储  |  数据存档，媒体存档，长期备份保留。  | 
| Amazon EBS | 存储大小需要管理和监控，低延迟，持久性存储，99.8% 至 99.9% 的持久性，大多数卷类型只能从一个 EC2 实例访问。 |  COTS 应用程序，I/O 密集型应用程序，关系型和 NoSQL 数据库，备份和恢复  | 
| EC2 Instance Store |  预先确定的存储大小，极低延迟，不持久，只能从一个 EC2 实例访问  |  COTS 应用程序，I/O 密集型应用程序，内存中数据存储  | 
| Amazon EFS |  持久性高达 99.999999999%，无限增长，可由多项计算服务访问  |  现代化应用程序跨多项计算服务共享文件，文件存储用于扩展内容管理系统  | 
| Amazon FSx |  支持四个文件系统（NetApp、OpenZFS、Windows File Server 和 Amazon FSx for Lustre），每个文件系统的可用存储空间不同，可由多项计算服务访问  |  云原生工作负载，私有云爆发，需要特定文件系统的迁移工作负载，VMC，ERP 系统，本地文件存储和备份   | 
| Snow Family |  便携式设备，256 位加密，NFS 端点，机载计算，TB 级存储  |  将数据迁移到云端，存储，以及在极端的本地条件下的计算，灾难恢复，远程数据收集  | 
| AWS Storage Gateway |  提供对云支持存储的低延迟本地访问，完全托管本地缓存   |  本地数据到云的迁移，从本地数据源填充云数据湖，现代化的文件共享。  | 

 **实施步骤：** 

1. 使用基准测试或负载测试来收集您的存储需求的主要特征。主要特征包括： 

   1. 可共享（什么组件可以访问这个存储） 

   1. 增长率 

   1. 吞吐量 

   1. 延迟 

   1. I/O 大小 

   1. 持久性 

   1. 访问模式（读写、频率、峰值或一致） 

1. 确定支持您的存储特征的存储解决方案的类型。

   1. [Amazon S3](https://aws.amazon.com/s3/) 是一项对象存储服务，具有无限的可扩展性、高可用性和多种可访问性选项。在 Amazon S3 内外传输和访问对象可以使用诸如 [Transfer Acceleration](https://aws.amazon.com/s3/transfer-acceleration/) 或 [Access Points](https://aws.amazon.com/s3/features/access-points/) 之类的服务，来支持您的位置、安全需求和访问模式。使用 [Amazon S3 的性能准则](https://docs.aws.amazon.com/AmazonS3/latest/userguide/optimizing-performance-guidelines.html) 来帮助您优化 Amazon S3 配置，以满足工作负载性能需求。

   1. [Amazon Glacier](https://aws.amazon.com/s3/storage-classes/glacier/) 是 Amazon S3 的一个存储类，用于数据存档。有三种存档解决方案可供您选择，访问时间从几毫秒到 5-12 小时不等，具有不同的成本和安全选项。Amazon Glacier 通过实施支持业务需求和数据特征的数据生命周期，可以帮助您满足性能需求。 

   1. [Amazon Elastic Block Store（Amazon EBS）](https://aws.amazon.com/ebs/) 是一项专用于 Amazon Elastic Compute Cloud（Amazon EC2）的高性能数据块存储服务。您可以选择 [基于 SSD 或 HDD](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-volume-types.html) 的解决方案，这些解决方案具有不同的特征，并对 [IOPS](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/provisioned-iops.html) 或 [吞吐量](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/hdd-vols.html)划分了优先级。EBS 卷非常适合高性能工作负载，是文件系统、数据库或只能访问附加阶段系统的应用程序的主存储。

   1. [Amazon EC2 实例存储](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html) 与 Amazon EBS 类似，因为它附加到 Amazon EC2 实例，但是，该实例存储只是临时存储，最好是作为缓冲区、缓存或其他临时内容使用。如果实例关闭，则无法分离实例存储，并且所有数据都会丢失。实例存储可用于高 I/O 性能和低延迟使用场景，在这些使用场景中，数据不需要持续存在。 

   1. [Amazon Elastic File System（Amazon EFS）](https://aws.amazon.com/efs/) 是可由多种类型的计算解决方案访问的可挂载文件系统。Amazon EFS 会自动增大和缩小存储，并进行性能优化以提供一致的低延迟。EFS 有 [两种性能配置模式](https://docs.aws.amazon.com/efs/latest/ug/performance.html)：通用和最大 I/O。通用模式具有亚毫秒级读取延迟和几毫秒的写入延迟。最大 I/O 模式可以支持成千上万个需要共享文件系统的计算实例。Amazon EFS 支持 [两种吞吐量模式](https://docs.aws.amazon.com/efs/latest/ug/managing-throughput.html)：突增和预置。经历峰值访问模式的工作负载将受益于突增吞吐量模式，而一个持续较高的工作负载会在预置吞吐量模式下表现得很好。

   1. [Amazon FSx](https://aws.amazon.com/fsx/) 基于全新 AWS 计算解决方案而构建，支持四种常用文件系统：NetApp ONTAP、OpenZFS、Windows 文件服务器和 Lustre。Amazon FSx [延迟、吞吐量和 IOPS](https://aws.amazon.com/fsx/when-to-choose-fsx/) 因文件系统而不同，因此，在为您的工作负载需求选择合适的文件系统时应考虑这些因素。

   1. [AWS Snow Family](https://aws.amazon.com/snow/) 是存储和计算设备，支持在线和离线数据迁移到云端，以及本地数据存储和计算。AWS Snow 设备支持收集大量本地数据，对数据进行处理，并将数据迁移到云端。在文件数量、文件大小和压缩方面，有几种 [记录在案的性能最佳实践](https://docs.aws.amazon.com/snowball/latest/developer-guide/performance.html) 。

   1. [AWS Storage Gateway](https://aws.amazon.com/storagegateway/) 为本地应用程序提供对基于云的存储的访问。AWS Storage Gateway 支持多种云存储服务，包括 Amazon S3、Amazon Glacier、Amazon FSx 和 Amazon EBS。它支持多种协议，如 iSCSI、SMB 和 NFS。它通过在本地缓存频繁访问的数据来提供低延迟性能，并且只向 AWS 发送更改的数据和压缩数据。

1. 在试用新的存储解决方案并确定最佳配置后，规划迁移并验证性能指标。这是一个持续的过程，当主要特征更改或者可用服务或选项更改时，应重新对该过程进行评估。

 **实施计划的工作量级别： **如果工作负载从一种存储解决方案转移到另一种存储解决方案，则重构应用程序可能需要 *适中* 工作量。   

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

 **相关文档：** 
+  [Amazon EBS 卷类型](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html) 
+  [Amazon EC2 存储](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Storage.html) 
+  [Amazon EFS：Amazon EFS 性能](https://docs.aws.amazon.com/efs/latest/ug/performance.html) 
+  [Amazon FSx for Lustre 性能](https://docs.aws.amazon.com/fsx/latest/LustreGuide/performance.html) 
+  [Amazon FSx for Windows File Server 性能](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/performance.html) 
+ [Amazon FSx for NetApp ONTAP 性能](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/performance.html)
+ [Amazon FSx for OpenZFS 性能](https://docs.aws.amazon.com/fsx/latest/OpenZFSGuide/performance.html)
+  [Amazon Glacier：Amazon Glacier 文档](https://docs.aws.amazon.com/amazonglacier/latest/dev/introduction.html) 
+  [Amazon S3：请求速率和性能注意事项](https://docs.aws.amazon.com/AmazonS3/latest/dev/request-rate-perf-considerations.html) 
+  [使用 AWS 进行云存储](https://aws.amazon.com/products/storage/) 
+ [AWS Snow Family](https://aws.amazon.com/snow/#Feature_comparison)
+  [EBS I/O 特征](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ebs-io-characteristics.html) 

 **相关视频：** 
+  [深入讨论 Amazon EBS（STG303-R1）](https://www.youtube.com/watch?v=wsMWANWNoqQ) 
+  [利用 Amazon S3 优化存储性能（STG343）Amazon S3](https://www.youtube.com/watch?v=54AhwfME6wI) 

 **相关示例：** 
+  [Amazon EFS CSI 驱动程序](https://github.com/kubernetes-sigs/aws-efs-csi-driver) 
+  [Amazon EBS CSI 驱动程序](https://github.com/kubernetes-sigs/aws-ebs-csi-driver) 
+  [Amazon EFS 实用程序](https://github.com/aws/efs-utils) 
+  [Amazon EBS 自动扩展](https://github.com/awslabs/amazon-ebs-autoscale) 
+  [Amazon S3 示例](https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/s3-examples.html) 
+ [Amazon FSx for Lustre Container Storage Interface（CSI）驱动程序](https://github.com/kubernetes-sigs/aws-fsx-csi-driver)

# PERF03-BP02 评估可用的配置选项
<a name="perf_right_storage_solution_evaluated_options"></a>

 评估各种特性和配置选项以及它们与存储的关系。了解在何处以及如何使用预置 IOPS、SSD、磁性存储、对象存储、存档存储或短暂存储来针对工作负载优化存储空间和性能。 

 [Amazon EBS](https://aws.amazon.com/ebs) 提供了一系列选项，让您能够优化存储性能和工作负载成本。这些选项分为两大类：用于事务型工作负载、由 SSD 提供支持的存储，例如数据库和启动卷（性能主要取决于 IOPS）；用于吞吐量密集型工作负载、由 HDD 提供支持的存储，例如 MapReduce 和日志处理（性能主要取决于传输速度）。 

 SSD 支持的卷包括：具有最高性能的预调配 IOPS SSD 卷，适用于有低延迟要求的事务型工作负载；通用型 SSD 卷，可以针对各种事务数据实现价格和性能的平衡。 

 [Amazon S3 transfer acceleration](https://aws.amazon.com/s3/transfer-acceleration/) 可以在您的客户端与 S3 存储桶之间实现快速的远距离文件传输。Transfer Acceleration 利用 Amazon CloudFront 遍布全球的边缘站点，通过优化的网络路径来路由数据。对于 S3 存储桶中具有密集 GET 请求的工作负载，可结合使用 Amazon S3 与 CloudFront。上传大型文件时，使用分段上传同时上传多个部分，以便尽可能提高网络吞吐量。 

 [Amazon Elastic File System（Amazon EFS）](https://aws.amazon.com/efs/) 提供了一个简单、可扩展、完全托管式弹性 NFS 文件系统，可配合 AWS 云 服务和本地资源使用。为了支持各种云存储工作负载，Amazon EFS 提供了两种性能模式：通用性能模式和最大 I/O 性能模式。对于文件系统，还有两种吞吐量模式可供选择：突增吞吐量和预置吞吐量。要确定对工作负载使用哪种设置，请参阅 [Amazon EFS 用户指南](https://docs.aws.amazon.com/efs/latest/ug/performance.html)。 

 [Amazon FSx](https://aws.amazon.com/fsx/) 提供了四个文件系统供您选择： [Amazon FSx for Windows File Server](https://aws.amazon.com/fsx/windows/) （适合于企业工作负载）、 [Amazon FSx for Lustre](https://aws.amazon.com/fsx/lustre/) （适合于高性能工作负载）、 [Amazon FSx for NetApp ONTAP](https://docs.aws.amazon.com/fsx/latest/ONTAPGuide/index.html) （适合于 NetApp 流行的 ONTAP 文件系统），以及 [Amazon FSx for OpenZFS](https://docs.aws.amazon.com/fsx/latest/OpenZFSGuide/what-is-fsx.html) （适合于基于 Linux 的文件服务器）。FSx 由 SSD 提供支持，旨在提供快速、可预测、可扩展且稳定的性能。Amazon FSx 文件系统提供持续的高读写速度和稳定的低延迟数据访问。您可以选择所需的吞吐量级别来满足工作负载需求。 

 **常见反模式：** 
+  对于所有工作负载，您都只使用一种存储类型，例如 Amazon EBS。 
+  您对所有工作负载都使用预调配 IOPS，而没有对所有存储层进行真实测试。 
+  您可以假设所有工作负载都具有相似的存储访问性能要求。 

 **建立此最佳实践的好处：** 评估所有存储服务选项可以降低基础设施的成本和维护您的工作负载所需的工作量。这样可能会缩短您的上市时间，从而部署新服务和功能。 

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

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

 确定存储特征：评估存储解决方案时，请确定需要哪些存储特征，例如共享能力、文件大小、缓存大小、延迟、吞吐量和数据持久性。然后，使用最符合您的需求的 AWS 服务来满足您的要求。 

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

 **相关文档：** 
+  [使用 AWS 进行云存储](https://aws.amazon.com/products/storage/?ref=wellarchitected) 
+  [Amazon EBS 卷类型](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html) 
+  [Amazon EC2 存储](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Storage.html) 
+  [Amazon EFS：Amazon EFS 性能](https://docs.aws.amazon.com/efs/latest/ug/performance.html) 
+  [Amazon FSx for Lustre 性能](https://docs.aws.amazon.com/fsx/latest/LustreGuide/performance.html) 
+  [Amazon FSx for Windows File Server 性能](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/performance.html) 
+  [Amazon Glacier：Amazon Glacier 文档](https://docs.aws.amazon.com/amazonglacier/latest/dev/introduction.html) 
+  [Amazon S3：请求速率和性能注意事项](https://docs.aws.amazon.com/AmazonS3/latest/dev/request-rate-perf-considerations.html) 
+  [使用 AWS 进行云存储](https://aws.amazon.com/products/storage/) 
+  [使用 AWS 进行云存储](https://aws.amazon.com/products/storage/?ref=wellarchitected) 
+  [EBS I/O 特征](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ebs-io-characteristics.html) 

 **相关视频：** 
+  [深入讨论 Amazon EBS (STG303-R1)](https://www.youtube.com/watch?v=wsMWANWNoqQ) 
+  [利用 Amazon S3 优化存储性能 (STG343)Amazon S3](https://www.youtube.com/watch?v=54AhwfME6wI) 

 **相关示例：** 
+  [Amazon EFS CSI 驱动程序](https://github.com/kubernetes-sigs/aws-efs-csi-driver) 
+  [Amazon EBS CSI 驱动程序](https://github.com/kubernetes-sigs/aws-ebs-csi-driver) 
+  [Amazon EFS 实用程序](https://github.com/aws/efs-utils) 
+  [Amazon EBS 自动扩展](https://github.com/awslabs/amazon-ebs-autoscale) 
+  [Amazon S3 示例](https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/s3-examples.html) 

# PERF03-BP03 根据访问模式和指标做出决策
<a name="perf_right_storage_solution_optimize_patterns"></a>

 根据工作负载的访问模式选择存储系统，并通过确定工作负载访问数据的方式对其进行配置。通过选择对象存储而不是数据块存储来提高存储效率。按照您的数据访问模式，配置您选择的存储选项。 

 访问数据的方式将影响存储解决方案的效果。选择最适合您的访问模式的存储解决方案，或者考虑根据存储解决方案更改访问模式，以便尽可能提高性能。 

 通过创建 RAID 0 阵列，与在单个卷上进行预置相比，您可以实现更高的文件系统性能。当 I/O 性能比容错能力更重要时，请考虑使用 RAID 0。例如，您可以将其用于已经单独设置了数据复制的常用数据库。 

 在工作负载使用的所有存储选项中，为您的工作负载选择合适的存储指标。当利用使用突增积分的文件系统时，创建警报，以便系统在您即将达到积分限额时通知您。您必须创建存储控制面板以显示工作负载存储的总体运行情况。 

 对于固定大小的存储系统（例如 Amazon EBS 或 Amazon FSx），请确保您正在监控使用的存储量与总体存储量大小之间的关系，如果可以请创建自动化流程，以便在达到阈值时增加存储大小 

 **常见反模式：** 
+  如果客户没有提出意见，您可以认为存储性能足够高。 
+  如果所有工作负载都位于一个存储层，您只应使用该存储层。 

 **建立此最佳实践的好处：** 要优化性能和提高资源利用率，您需要一个统一的运营视图、实时粒度数据和历史参考。您可以创建自动控制面板，使用粒度为一秒的数据来对您的数据执行指标计算，并生成对您的存储需求的运维和利用率见解。 

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

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

 优化存储使用情况和访问模式：根据工作负载的访问模式和可用存储选项的特征选择存储系统。确定存储数据的最佳位置，确保在减少开销的同时满足您的要求。根据存储特性配置数据并与其进行交互时，使用性能优化和访问模式（例如卷条带化或将数据分区）。 

 为存储选项选择适当的指标：确保您为工作负载选择适当的存储指标。每个存储选项都提供了各种指标，用于跟踪您的工作负载随着时间的推移的性能情况。确保您在测量任何存储突增指标（例如，监控 Amazon EFS 的突增点数）。对于固定大小的存储系统（例如，Amazon Elastic Block Store 或 Amazon FSx），请确保您正在监控所使用的存储量与总存储大小。在可能的情况下创建自动化流程，以在快要达到阈值时增加存储大小。 

 监控指标：Amazon CloudWatch 可以收集架构中各种资源的指标。您也可以收集和发布自定义指标，用于显示业务指标或派生指标。使用 CloudWatch 或第三方解决方案来设置指示超出阈值的警报。 

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

 **相关文档：** 
+  [Amazon EBS 卷类型](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html) 
+  [Amazon EC2 存储](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Storage.html) 
+  [Amazon EFS：Amazon EFS 性能](https://docs.aws.amazon.com/efs/latest/ug/performance.html) 
+  [Amazon FSx for Lustre 性能](https://docs.aws.amazon.com/fsx/latest/LustreGuide/performance.html) 
+  [Amazon FSx for Windows File Server 性能](https://docs.aws.amazon.com/fsx/latest/WindowsGuide/performance.html) 
+  [Amazon Glacier：Amazon Glacier 文档](https://docs.aws.amazon.com/amazonglacier/latest/dev/introduction.html) 
+  [Amazon S3：请求速率和性能注意事项](https://docs.aws.amazon.com/AmazonS3/latest/dev/request-rate-perf-considerations.html) 
+  [使用 AWS 进行云存储](https://aws.amazon.com/products/storage/) 
+  [EBS I/O 特征](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ebs-io-characteristics.html) 
+  [使用 Amazon CloudWatch 监控和了解 Amazon EBS 性能](https://aws.amazon.com/blogs/storage/valuable-tips-for-monitoring-and-understanding-amazon-ebs-performance-using-amazon-cloudwatch/) 

 **相关视频：** 
+  [深入讨论 Amazon EBS (STG303-R1)](https://www.youtube.com/watch?v=wsMWANWNoqQ) 
+  [利用 Amazon S3 优化存储性能 (STG343)Amazon S3](https://www.youtube.com/watch?v=54AhwfME6wI) 

 **相关示例：** 
+  [Amazon EFS CSI 驱动程序](https://github.com/kubernetes-sigs/aws-efs-csi-driver) 
+  [Amazon EBS CSI 驱动程序](https://github.com/kubernetes-sigs/aws-ebs-csi-driver) 
+  [Amazon EFS 实用程序](https://github.com/aws/efs-utils) 
+  [Amazon EBS 自动扩展](https://github.com/awslabs/amazon-ebs-autoscale) 
+  [Amazon S3 示例](https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/s3-examples.html) 

# PERF 4  如何选择数据库解决方案？
<a name="perf-04"></a>

 针对特定系统的最优数据库解决方案取决于您的具体需求，包括可用性、一致性、分区容错性、延迟、持久性、可扩展性以及查询能力等等。许多系统会使用多种不同的数据库解决方案满足其各子系统的实际需要，并启用不同的功能来提高性能。为系统选择错误的数据库解决方案和功能可能会导致性能效率降低。 

**Topics**
+ [PERF04-BP01 了解数据特征](perf_right_database_solution_understand_char.md)
+ [PERF04-BP02 评估可用的选项](perf_right_database_solution_evaluate_options.md)
+ [PERF04-BP03 收集和记录数据库性能指标](perf_right_database_solution_collect_metrics.md)
+ [PERF04-BP04 根据访问模式选择数据存储](perf_right_database_solution_access_patterns.md)
+ [PERF04-BP05 根据访问模式和指标优化数据存储](perf_right_database_solution_optimize_metrics.md)

# PERF04-BP01 了解数据特征
<a name="perf_right_database_solution_understand_char"></a>

 选择数据管理解决方案，以最佳地匹配工作负载数据集的特征、访问模式和要求。在选择和实施数据管理解决方案时，您必须确保查询、扩展和存储特征支持工作负载数据要求。了解各种数据库选项如何匹配您的数据模型，以及哪些配置选项最适合您的使用案例。  

 AWS 提供了多种数据库引擎，包括关系、键值、文档、内存、图形、时间序列和分类账数据库。每种数据管理解决方案都有可供您使用的选项和配置，以支持您的使用案例和数据模型。根据数据特征，您的工作负载也许能够使用多种不同的数据库解决方案。通过选择针对特定问题的最佳数据库解决方案，您可以摆脱整体式数据库的束缚（整体式数据库采用具有限制性的一刀切方法），专注于管理数据以满足客户的需求。 

 **期望结果：** 工作负载数据特征的记录足够详细，可以帮助选择和配置支持的数据库解决方案，并深入了解潜在的替代方案。 

 **常见反模式：** 
+  没有考虑将大型数据集分割成具有相似特征的较小数据集合的方法，导致失去使用更符合数据和增长特征的专用数据库的机会。 
+  没有预先识别数据访问模式，导致以后进行成本高昂且复杂的重复工作。 
+  使用的数据存储策略无法按需求快速扩展，限制了增长 
+  为所有工作负载选择一个数据库类型和供应商。 
+  由于员工拥有某种特定类型的数据库解决方案的经验和知识，坚持使用该数据库解决方案。 
+  保持一种数据库解决方案，因为它在本地环境中运行良好。 

 **建立此最佳实践的好处：** 熟悉所有的 AWS 数据库解决方案，以便为各种工作负载确定正确的数据库解决方案。为您的工作负载选择合适的数据库解决方案后，您可以快速试用每种数据库产品/服务，以确定它们是否继续满足您的工作负载需求。 

 **未建立这种最佳实践的情况下暴露的风险等级：** 高 
+  可能无法确定潜在的成本节约机会。 
+  数据的保护级别可能达不到要求。 
+  数据访问和存储性能可能不是最佳的。 

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

 定义工作负载的数据特征和访问模式。查看所有可用的数据库解决方案，以确定哪种解决方案支持您的数据需求。对于给定的工作负载，可以选择多个数据库。评估每个服务或每组服务，并单独进行评估。如果为部分或全部数据确定了潜在的替代数据管理解决方案，那么可以试用替代实施方案，以获得成本、安全性、性能和可靠性方面的好处。如采用新的数据管理方法，需要更新现有文档。 


|  **类型**  |  **AWS 服务**  |  **主要特征**  |  **常见使用案例**  | 
| --- | --- | --- | --- | 
|  关系  |  Amazon RDS、Amazon Aurora  |  参照完整性、ACID 事务、写时模式  |  ERP、CRM、商用现货软件  | 
|  键值  |  Amazon DynamoDB  |  高吞吐量、低延迟、近乎无限的可扩展性  |  购物车（电子商务）、产品目录、聊天应用程序  | 
|  文档  |  Amazon DocumentDB  |  存储 JSON 文档并查询任何属性  |  内容管理（CMS）、客户资料、移动应用程序  | 
|  内存  |  Amazon ElastiCache、Amazon MemoryDB  |  微秒级延迟  |  缓存、游戏排行榜  | 
|  图形  |  Amazon Neptune  |  高度相关的数据，其数据之间的关系具有意义  |  社交网络、个性化引擎、欺诈检测  | 
|  时间序列  |  Amazon Timestream  |  以时间为主维度的数据  |  DevOps、IoT、监控  | 
|  宽列  |  Amazon Keyspaces  |  Cassandra 工作负载。  |  工业设备维护、路线优化  | 
|  分类账  |  Amazon QLDB  |  不可变且可加密验证的变更分类账  |  记录系统、医疗保健、供应链、金融机构  | 

 **实施步骤** 

1.  数据结构如何？（例如，非结构化、键值、半结构化、关系型） 

   1.  如果数据是非结构化的，请考虑使用对象存储，例如 [Amazon S3](https://aws.amazon.com/products/storage/data-lake-storage/) 或 NoSQL 数据库，如 [Amazon DocumentDB。](https://aws.amazon.com/documentdb/) 

   1.  对于键值数据，请考虑使用 [DynamoDB](https://aws.amazon.com/documentdb/)、 [ElastiCache for Redis](https://aws.amazon.com/elasticache/redis/) 或者 [MemoryDB。](https://aws.amazon.com/memorydb/) 

   1.  如果数据具有关系结构，那么需要什么级别的参照完整性？ 

      1.  对于外键约束，关系数据库（如 [Amazon RDS](https://aws.amazon.com/rds/) 和 [Aurora](https://aws.amazon.com/rds/aurora/) ）可以提供这种级别的完整性。 

      1.  通常，在 NoSQL 数据模型中，您可以将数据去规范化到单个文档或文档集合，以便在单个请求中进行检索，而不是跨各文档或各表联接。  

1.  是否要求符合 ACID（原子性、一致性、隔离性、持久性）？ 

   1.  如果需要与关系数据库关联的 ACID 属性，请考虑使用关系数据库，例如 [Amazon RDS](https://aws.amazon.com/rds/) 和 [Aurora。](https://aws.amazon.com/rds/aurora/) 

1.  需要什么样的一致性模型？ 

   1.  如果您的应用程序可以容许最终一致性，请考虑使用 NoSQL 实施。查看其他特征，以帮助选择最合适的 [NoSQL 数据库](https://aws.amazon.com/nosql/) 。 

   1.  如果需要强一致性，您可以使用 [DynamoDB](https://aws.amazon.com/documentdb/) 强一致性读取，或者使用关系数据库，如 [Amazon RDS](https://aws.amazon.com/rds/)。 

1.  必须支持哪些查询和结果格式？（例如，SQL、CSV、Parque、Avro、JSON 等） 

1.  存在哪些数据类型、字段大小和总体数量？（例如，文本、数字、空间、时间序列计算、二进制或 BLOB、文档） 

1.  存储需求将如何随时间变化？ 这对可扩展性有何影响？ 

   1.  无服务器数据库（如 [DynamoDB](https://aws.amazon.com/documentdb/) 和 [Amazon Quantum Ledger Database](https://aws.amazon.com/qldb/) ）将动态扩展至近乎无限的存储空间。 

   1.  关系数据库的预置存储空间设有上限，一旦达到这些限制，通常必须通过分片等机制进行水平分区。 

1.  读查询与写查询的比例是多少？ 缓存有可能提高性能吗？ 

   1.  包含大量读操作的工作负载可以受益于缓存层，如 [ElastiCache](https://aws.amazon.com/elasticache/) 或者 [DAX](https://aws.amazon.com/dynamodb/dax/) （如果数据库是 DynamoDB）。 

   1.  读操作也可以通过关系数据库（如 [Amazon RDS](https://aws.amazon.com/rds/)）分流到只读副本上。 

1.  存储和修改（OLTP – Online Transaction Processing，联机事务处理）还是检索和报告（OLAP – Online Analytical Processing，联机分析处理）具有更高的优先级？ 

   1.  对于高吞吐量事务处理，请考虑使用 NoSQL 数据库，如 DynamoDB 或 Amazon DocumentDB。 

   1.  对于分析查询，请考虑使用列存数据库（如 [Amazon Redshift](https://aws.amazon.com/redshift/) ），或者将数据导出到 Amazon S3 并使用 [Athena](https://aws.amazon.com/athena/) 或者 [QuickSight 执行分析。](https://aws.amazon.com/quicksight/) 

1.  这些数据有多敏感，需要什么级别的保护和加密？ 

   1.  所有的 Amazon RDS 和 Aurora 引擎都支持使用 AWS KMS 进行静态数据加密。Microsoft SQL Server 和 Oracle 在使用 Amazon RDS 时也支持本机透明数据加密（TDE，Transparent Data Encryption）。 

   1.  对于 DynamoDB，您可以使用 [IAM](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/access-control-overview.html) 的精细访问控制功能，在关键字级别控制谁可以访问哪些数据。 

1.  数据需要什么级别的持久性？ 

   1.  Aurora 自动在一个区域内的三个可用区复制您的数据，这意味着您的数据具有高度的持久性，数据丢失的可能性较小。 

   1.  DynamoDB 自动跨多个可用区复制，提供高可用性和数据持久性。 

   1.  Amazon S3 提供 11 个 9 的持久性。许多数据库服务（如 Amazon RDS 和 DynamoDB）支持将数据导出到 Amazon S3 以进行长期保留和归档。 

1.  恢复 [时间目标（RTO）或恢复点目标（RPO）](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/plan-for-disaster-recovery-dr.html) 要求是否影响解决方案？ 

   1.  Amazon RDS、Aurora、DynamoDB、Amazon DocumentDB 和 Neptune 全部支持时间点恢复以及按需备份和还原。  

   1.  对于高可用性要求，可以全局复制 DynamoDB 表（使用 [全局表](https://aws.amazon.com/dynamodb/global-tables/) 功能），并且可以使用全局数据库功能跨多个区域复制 Aurora 集群。此外，可以使用跨区域复制功能，跨 AWS 区域复制 S3 存储桶。  

1.  是否希望摆脱商用数据库引擎/许可成本？ 

   1.  考虑使用 Amazon RDS 或 Aurora 上的开源引擎，如 PostgreSQL 和 MySQL 

   1.  利用 [AWS DMS](https://aws.amazon.com/dms/) 和 [AWS SCT](https://aws.amazon.com/dms/schema-conversion-tool/) 执行从商用数据库引擎到开源引擎的迁移 

1.  对数据库的运维有什么期望？ 迁移到托管服务是主要的关注点吗？ 

   1.  利用 Amazon RDS 而不是 Amazon EC2，以及利用 DynamoDB 或 Amazon DocumentDB 而不是自行托管的 NoSQL 数据库可以减少运维开销。 

1.  当前如何访问数据库？ 是只有应用程序访问，还是有商业智能（BI，Business Intelligence）用户和其他互联的现成应用程序？ 

   1.  如果您依赖于外部工具，那么您可能必须保持与它们支持的数据库的兼容性。Amazon RDS 完全兼容其支持的不同引擎版本，包括 Microsoft SQL Server、Oracle、MySQL 和 PostgreSQL。 

1.  下面列出了潜在的数据管理服务，以及这些服务的最佳使用位置： 

   1.  关系数据库通过预定义 schema 及其之间的关系存储数据。这些数据库旨在支持 ACID（原子性、一致性、隔离性、持久性）事务，并保持参照完整性和数据强一致性。许多传统应用程序、企业资源规划（ERP, enterprise resource planning）、客户关系管理（CRM, customer relationship management）和电子商务都使用关系数据库来存储其数据。您可以在 Amazon EC2 上运行许多这些数据库引擎，或者从以下 AWS [托管数据库服务中进行选择](https://aws.amazon.com/products/databases/)： [Amazon Aurora](https://aws.amazon.com/rds/aurora)， [Amazon RDS](https://aws.amazon.com/rds)和 [Amazon Redshift](https://aws.amazon.com/redshift). 

   1.  键值数据库已针对常见的访问模式进行优化，通常用于存储和检索大量数据。这些数据库即使在出现大量并发请求的情况下也能实现快速响应。键值数据库的典型使用案例包括高流量 Web 应用程序，电子商务系统和游戏应用程序。在 AWS 中，您可以利用 [Amazon DynamoDB](https://aws.amazon.com/dynamodb/)数据库，这是一个完全托管的多区域、多主表持久数据库，具有适用于互联网规模的应用程序的内置安全性、备份和还原以及内存中的缓存。 

   1.  内存数据库用于需要实时访问数据、最低延迟和最高吞吐量的应用程序。对于毫秒级延迟不足以满足需求的应用程序，这些数据库通过直接将数据存储在内存中来提供微秒级延迟。您可以将内存数据库用于应用程序缓存、会话管理、游戏排行榜和地理空间应用程序。 [Amazon ElastiCache](https://aws.amazon.com/elasticache/) 是一种完全托管的内存数据存储，兼容 [Redis](https://aws.amazon.com/elasticache/redis/) 或者 [Memcached](https://aws.amazon.com/elasticache/memcached)。如果应用程序还有更高的持久性要求，可以结合 [适用于 Redis 的 Amazon MemoryDB](https://aws.amazon.com/memorydb/) 来提供持久的内存数据库服务，以实现超快的性能。 

   1.  文档数据库旨在将半结构化数据存储为类似 JSON 的文档。这些数据库可帮助开发人员快速构建和更新应用程序，例如内容管理、目录和用户配置文件。 [Amazon DocumentDB](https://aws.amazon.com/documentdb/) 是一种快速、可扩展、高度可用且完全托管的文档数据库服务，支持 MongoDB 工作负载。 

   1.  宽列存储是 NoSQL 数据库的一种类型。它使用表、行和列，但是与关系数据库不同的是，同一个表中各行的列名称和格式可能会有所不同。您通常会看到一个宽列存储在大规模工业应用程序中，用于设备维护、队列管理和路线优化。 [Amazon Keyspaces（Apache Cassandra 兼容）](https://aws.amazon.com/mcs/) 是一种宽列可扩展、高度可用且兼容 Apache Cassandra 的托管数据库服务。 

   1.  图形数据库适用于需要大规模以毫秒延迟在高度连接的图形数据集之间浏览和查询数百万关系的应用程序。许多公司将图形数据库用于欺诈检测、社交网络和推荐引擎。 [Amazon Neptune](https://aws.amazon.com/neptune/) 是一种快速、可靠、完全托管的图数据库服务，便于用户能轻松构建并运行适用于高度互连数据集的应用程序。 

   1.  时间序列数据库可以高效收集、合成数据，并从不断变化的数据中获得见解。IoT 应用程序、开发运营和工业遥测可以利用时间序列数据库。 [Amazon Timestream](https://aws.amazon.com/timestream/) 是适用于 IoT 和运营应用程序的快速、可扩展、完全托管的时间序列数据库服务，可用于轻松存储和分析每天数以万亿计的事件。 

   1.  分类账数据库提供可信中央机构，以维护每个应用程序的可扩展、不可变和允许以加密方式进行验证的交易记录。我们看到分类账数据库用于记录系统、供应链、注册甚至银行交易。 [Amazon Quantum Ledger Database (Amazon QLDB)](https://aws.amazon.com/qldb/) 是一种完全托管的分类账数据库，提供可信中央机构拥有的透明、不可变和允许以加密方式进行验证的交易日志。Amazon QLDB 跟踪每个应用程序数据更改，并持续维护完整且可验证的更改历史记录。 

 **实施计划的工作量级别： **如果工作负载从一种数据库解决方案转移到另一种计算解决方案，则重构数据和应用程序可能需要 *高* 工作量。   

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

 **相关文档：** 
+  [AWS 云数据库 ](https://aws.amazon.com/products/databases/?ref=wellarchitected) 
+  [AWS 数据库缓存 ](https://aws.amazon.com/caching/database-caching/?ref=wellarchitected) 
+  [Amazon DynamoDB Accelerator ](https://aws.amazon.com/dynamodb/dax/?ref=wellarchitected) 
+  [Amazon Aurora 最佳实践 ](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Aurora.BestPractices.html?ref=wellarchitected) 
+  [Amazon Redshift 性能 ](https://docs.aws.amazon.com/redshift/latest/dg/c_challenges_achieving_high_performance_queries.html?ref=wellarchitected) 
+  [Amazon Athena 10 大性能提示 ](https://aws.amazon.com/blogs/big-data/top-10-performance-tuning-tips-for-amazon-athena/?ref=wellarchitected) 
+  [Amazon Redshift Spectrum 最佳实践 ](https://aws.amazon.com/blogs/big-data/10-best-practices-for-amazon-redshift-spectrum/?ref=wellarchitected) 
+  [Amazon DynamoDB 最佳实践](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/BestPractices.html?ref=wellarchitected) 
+  [在 EC2 和 Amazon RDS 之间进行选择](https://docs.aws.amazon.com/prescriptive-guidance/latest/migration-sql-server/comparison.html) 
+  [实施 Amazon ElastiCache 的最佳实践](https://docs.aws.amazon.com/AmazonElastiCache/latest/UserGuide/BestPractices.html) 

 **相关视频：** 
+ [AWS 专用数据库（DAT209-L） ](https://www.youtube.com/watch?v=q81TVuV5u28) 
+ [Amazon Aurora 存储揭秘：工作原理（DAT309-R） ](https://www.youtube.com/watch?v=uaQEGLKtw54) 
+ [Amazon DynamoDB 深入研究：高级设计模式 (DAT403-R1) ](https://www.youtube.com/watch?v=6yqfmXiZTlM) 

 **相关示例：** 
+  [使用 Amazon Redshift 数据共享优化数据模式](https://wellarchitectedlabs.com/sustainability/300_labs/300_optimize_data_pattern_using_redshift_data_sharing/) 
+  [数据库迁移](https://github.com/aws-samples/aws-database-migration-samples) 
+  [MS SQL Server – AWS Database Migration Service（DMS）复制演示](https://github.com/aws-samples/aws-dms-sql-server) 
+  [数据库现代化动手实践研讨会](https://github.com/aws-samples/amazon-rds-purpose-built-workshop) 
+  [Amazon Neptune 示例](https://github.com/aws-samples/amazon-neptune-samples) 

# PERF04-BP02 评估可用的选项
<a name="perf_right_database_solution_evaluate_options"></a>

 在选择数据管理解决方案之前，需要了解可用的数据库选项及其如何优化性能。使用负载测试确定与您的工作负载相关的重要数据库指标。在研究数据库选项时，要考虑各种方面，如参数组、存储选项、内存、计算、只读副本、最终一致性、连接池和缓存选项。尝试使用这些不同的配置选项来改进指标。 

 **期望结果：** 基于数据类型，工作负载可以使用一个或多个数据库解决方案。数据库功能和优势与数据特征、访问模式和工作负载要求完美匹配。要优化您的数据库性能和成本，您必须评估数据访问模式以确定适当的数据库选项。评估可接受的查询时间，以确保选定的数据库选项可以满足要求。 

 **常见反模式：** 
+  未识别数据访问模式。 
+  不了解所选数据管理解决方案的配置选项。 
+  仅依赖于增加实例大小，而不考虑其他可用的配置选项。 
+  不测试所选解决方案的扩展特征。 

 

 **建立此最佳实践的好处：** 通过探索和试用数据库选项，您也许能够降低基础设施成本，提高性能和可扩展性，并减少维护工作负载所需的工作量。 

 **未建立这种最佳实践的情况下暴露的风险等级：** 高 
+  必须针对 *一刀切类型的* 数据库进行优化意味着做出不必要的妥协。 
+  由于没有配置数据库解决方案以匹配流量模式，导致成本增加。 
+  扩展问题可能会导致运维问题。 
+  数据的保护级别可能达不到要求。 

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

 了解您的工作负载数据特征，以便配置数据库选项。运行负载测试以确定您的关键性能指标和瓶颈。使用这些特征和指标来评估数据库选项并尝试使用不同的配置。 


|  AWS 服务  |  Amazon RDS、Amazon Aurora  |  Amazon DynamoDB  |  Amazon DocumentDB  |  Amazon ElastiCache  |  Amazon Neptune  |  Amazon Timestream  |  Amazon Keyspaces  |  Amazon QLDB  | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | 
|  扩展计算  |  增加实例大小，Aurora 无服务器实例自动扩展以响应负载变化  |  按需容量模式下的自动读/写扩展，或预置容量模式下的预置读/写容量自动扩展  |  增加实例大小  |  增加实例大小，将节点添加到集群  |  增加实例大小  |  自动扩展以调整容量  |  按需容量模式下的自动读/写扩展，或预置容量模式下的预置读/写容量自动扩展  |  自动扩展以调整容量  | 
|  横向扩展读取  |  所有引擎都支持只读副本。Aurora 支持只读副本实例的自动扩展  |  增加预置的读取容量单位  |  只读副本  |  只读副本  |  只读副本。支持只读副本实例的自动扩展  |  自动扩展  |  增加预置的读取容量单位  |  自动纵向扩展到规定的并发限制  | 
|  横向扩展写操作  |  增加实例大小，批处理应用程序中的写操作，或在数据库前面添加队列。通过跨多个实例的应用程序级分片进行横向扩展  |  增加预置的写入容量单位。确保最佳分区键，以防止分区级写操作节流  |  增加主实例大小  |  在集群模式下使用 Redis 跨分片分布写操作  |  增加实例大小  |  扩展时，写请求可能会受到限制。如果遇到节流异常，请继续以相同（或更高）吞吐量发送数据，以自动扩展。批量写入以减少并发写入请求  |  增加预置的写入容量单位。确保最佳分区键，以防止分区级写操作节流  |  自动纵向扩展到规定的并发限制  | 
|  引擎配置  |  参数组  |  不适用  |  参数组  |  参数组  |  参数组  |  不适用  |  不适用  |  不适用  | 
|  缓存  |  内存中的缓存，可通过参数组进行配置。与 ElastiCache for Redis 等专用缓存结合使用，分流对经常访问项的请求  |  DAX 完全托管式缓存可用  |  内存中的缓存。（可选）与 ElastiCache for Redis 等专用缓存结合使用，分流对经常访问项的请求  |  主要功能是缓存  |  使用查询结果缓存来缓存只读查询的结果  |  Timestream 有两个存储层；其中之一是高性能内存中存储层  |  部署单独的专用缓存（如 ElastiCache for Redis），分流对经常访问项的请求  |  不适用  | 
|  高可用性/灾难恢复  |  对于生产工作负载，推荐的配置是在第二个可用区中运行备用实例，以在一个区域内提供弹性。  对于跨区域的弹性，可以使用 Aurora 全球数据库  |  在一个区域内高度可用。可以使用 DynamoDB 全局表跨区域复制表  |  跨可用区创建多个实例以实现可用性。  快照可以跨区域共享，集群可以使用 DMS 进行复制，用于提供跨区域复制/灾难恢复  |  对于生产集群，推荐的配置是在备用可用区中至少创建一个节点。  ElastiCache 全局数据存储可用于跨区域复制集群。  |  其他可用区中的只读副本用作失效转移目标。  快照可以跨区域共享，集群可以使用 Neptune 流进行复制，用于在两个不同区域的两个集群之间复制数据。  |  在一个区域内高度可用。跨区域复制需要使用 Timestream SDK 进行自定义应用程序开发  |  在一个区域内高度可用。  跨区域复制需要自定义应用程序逻辑或第三方工具  |  在一个区域内高度可用。  要跨区域复制，请将 Amazon QLDB 日志的内容导出到 S3 存储桶，并配置该存储桶以进行跨区域复制。  | 

 

 **实施步骤** 

1.  哪些配置选项可用于选定的数据库？ 

   1.  利用 Amazon RDS 和 Aurora 的参数组，您可以调整常见的数据库引擎级别设置（例如为缓存分配的内存），或调整数据库的时区 

   1.  对于预置的数据库服务（如 Amazon RDS、Aurora、Neptune、Amazon DocumentDB）以及在 Amazon EC2 上部署的数据库服务，您可以更改实例类型、预置存储和添加只读副本。 

   1.  DynamoDB 允许您指定两种容量模式：按需和预置。考虑到不同的工作负载，您可以在这两种模式之间进行更改，并在预置模式下随时增加所分配的容量。 

1.  工作负载是否包含大量的读取或写入操作？  

   1.  哪些解决方案可用于分流读取操作（只读副本、缓存等）？  

      1.  对于 DynamoDB 表，您可以使用 DAX 缓存功能来分流读取操作。 

      1.  对于关系数据库，您可以创建一个 ElastiCache for Redis 集群，并将应用程序配置为首先从缓存中读取，并在请求的项目不存在时返回到数据库。 

      1.  关系数据库（如 Amazon RDS 和 Aurora）以及预置的 NoSQL 数据库（如 Neptune 和 Amazon DocumentDB）全部支持添加只读副本，以分流工作负载的读取部分。 

      1.  DynamoDB 等无服务器数据库将自动扩展。确保您预置了足够的读取容量单位（RCU，Read Capacity Unit）来处理工作负载。 

   1.  哪些解决方案可用于扩展写入操作（分区键分片、引入队列等）？ 

      1.  对于关系数据库，您可以增加实例的大小以适应增加的工作负载，或增加预调配 IOPS 以增加底层存储的吞吐量。 
         +  您还可以在数据库前面引入队列，而不是直接写入数据库。此模式允许您将摄取操作与数据库解耦，并控制流量，这样数据库就不会过载。  
         +  对写入请求进行批处理，而不是创建许多短期事务，这样有助于提高有大量写入的关系数据库的吞吐量。 

      1.  像 DynamoDB 这样的无服务器数据库可以自动扩展写入吞吐量，也可以根据容量模式调整预置的写入容量单位（WCU，Write Capacity Unit）。  
         +  但是，当达到给定分区键的吞吐量限制时，仍然会遇到 *热* 分区问题。这可以通过选择更均匀分布的分区键或对分区键进行写分片来缓解。  

1.  当前或预期的每秒事务数（TPS）峰值是多少？ 使用此流量和此流量 \$1X% 进行测试，以了解扩展特征。 

   1.  适用于 PostgreSQL 的 pg\$1bench 等原生工具可用于对数据库进行压力测试，以了解瓶颈和扩展特征。 

   1.  应该捕获类似生产的流量，以便重放这些流量，从而在合成工作负载之外模拟真实世界的情况。 

1.  如果使用无服务器或弹性可扩展计算，请测试此扩展对数据库的影响。如果合适，引入连接管理或池技术以降低对数据库的影响。  

   1.  RDS 代理可与 Amazon RDS 和 Aurora 结合使用，以管理与数据库的连接。  

   1.  DynamoDB 等无服务器数据库没有与之关联的连接，但会考虑预置容量和自动扩展策略来处理负载峰值。 

1.  负载是否可预测，是否会出现负载峰值和不活动时段？ 

   1.  如果有一段时间处于不活动状态，请考虑在这段时间内缩减预置的容量或实例大小。Aurora Serverless V2 将根据负载自动纵向扩展和缩减。 

   1.  对于非生产实例，请考虑在非工作时间暂停或停止这些实例。 

1.  您是否需要根据访问模式和数据特征对数据模型进行分段和拆分？ 

   1.  考虑使用 AWS DMS 或 AWS SCT 将您的数据移动到其他服务。 

## 实施计划的工作量级别： 
<a name="level-of-effort-for-the-implementation-plan-to-establish-this-best-practice-you-must-be-aware-of-your-current-data-characteristics-and-metrics.-gathering-those-metrics-establishing-a-baseline-and-then-using-those-metrics-to-identify-the-ideal-database-configuration-options-is-a-low-to-moderate-level-of-effort.-this-is-best-validated-by-load-tests-and-experimentation."></a>

要建立此最佳实践，您必须了解当前的数据特征和指标。收集这些指标，建立基线，然后使用这些指标来确定理想的数据库配置选项，这需要 *低* 到 *中等* 工作量。这最好通过负载测试和实验来验证。 

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

 **相关文档：** 
+  [AWS 云数据库 ](https://aws.amazon.com/products/databases/?ref=wellarchitected) 
+  [AWS 数据库缓存 ](https://aws.amazon.com/caching/database-caching/?ref=wellarchitected) 
+  [Amazon DynamoDB Accelerator ](https://aws.amazon.com/dynamodb/dax/?ref=wellarchitected) 
+  [Amazon Aurora 最佳实践 ](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Aurora.BestPractices.html?ref=wellarchitected) 
+  [Amazon Redshift 性能 ](https://docs.aws.amazon.com/redshift/latest/dg/c_challenges_achieving_high_performance_queries.html?ref=wellarchitected) 
+  [Amazon Athena 10 大性能提示 ](https://aws.amazon.com/blogs/big-data/top-10-performance-tuning-tips-for-amazon-athena/?ref=wellarchitected) 
+  [Amazon Redshift Spectrum 最佳实践 ](https://aws.amazon.com/blogs/big-data/10-best-practices-for-amazon-redshift-spectrum/?ref=wellarchitected) 
+  [Amazon DynamoDB 最佳实践](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/BestPractices.html?ref=wellarchitected) 

 

 **相关视频：** 
+  [AWS 专用数据库（DAT209-L） ](https://www.youtube.com/watch?v=q81TVuV5u28)
+ [Amazon Aurora 存储揭秘：工作原理（DAT309-R） ](https://www.youtube.com/watch?v=uaQEGLKtw54) 
+  [Amazon DynamoDB 深入研究：高级设计模式 (DAT403-R1) ](https://www.youtube.com/watch?v=6yqfmXiZTlM)

 **相关示例：** 
+  [Amazon DynamoDB 示例](https://github.com/aws-samples/aws-dynamodb-examples) 
+  [AWS 数据库迁移示例](https://github.com/aws-samples/aws-database-migration-samples) 
+  [数据库现代化研讨会](https://github.com/aws-samples/amazon-rds-purpose-built-workshop) 
+  [使用 Amazon RDS for Postgress DB 上的参数](https://github.com/awsdocs/amazon-rds-user-guide/blob/main/doc_source/Appendix.PostgreSQL.CommonDBATasks.Parameters.md) 

# PERF04-BP03 收集和记录数据库性能指标
<a name="perf_right_database_solution_collect_metrics"></a>

 要了解数据管理系统的运行情况，跟踪相关指标非常重要。这些指标将帮助您优化数据管理资源，确保满足您的工作负载需求，并确保您清楚地了解工作负载的运行情况。使用各种工具、库和系统来记录与数据库性能相关的性能测量值。 

 

 有些指标与数据库所在的系统有关（例如，CPU、存储、内存、IOPS），有些指标与访问数据本身有关（例如，每秒事务数、查询速率、响应时间、错误）。这些指标应便于任何支持或操作人员访问，并具有足够的历史记录，以便能够识别趋势、异常和瓶颈。 

 

 **期望结果：** 为了监控数据库工作负载的性能，您必须记录一段时间内的多个性能指标。这样您便可以检测异常并根据业务指标衡量性能，确保满足您的工作负载需求。 

 **常见反模式：** 
+  您只能手动搜索日志文件来查找指标。 
+  您只将指标发布到团队使用的内部工具，而没有全面了解您的工作负载。 
+  您只使用所选监控软件记录的默认指标。 
+  您只在出现问题时检查指标。 
+  您只监控系统级指标，而不捕获数据访问或使用情况指标。 

 **建立此最佳实践的好处：** 建立性能基准有助于了解工作负载的正常行为和需求。可以更快地识别和调试异常模式，从而提高数据库的性能和可靠性。可以配置数据库容量，以确保在不影响性能的情况下实现最佳成本。 

 **未建立这种最佳实践的情况下暴露的风险等级：** 高 
+  无法区分异常与正常的性能水平会给问题识别和决策带来困难。 
+  可能无法确定潜在的成本节约机会。 
+  无法识别增长模式，这可能导致可靠性或性能下降。 

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

 识别、收集、聚合和关联与数据库相关的指标。指标应包括支持数据库的底层系统指标和数据库指标。底层系统指标可包括 CPU 利用率、内存、可用磁盘存储、磁盘 I/O 和网络入站和出站指标，而数据库指标可包括每秒事务数、最多的查询、平均查询速率、响应时间、索引使用情况、表锁定、查询超时和打开的连接数。这些数据对于了解工作负载的性能以及数据库解决方案的使用方式至关重要。将这些指标用作数据驱动方法的一部分，以便调整和优化工作负载的资源。  

 **实施步骤：** 

1.  必须跟踪哪些数据库指标？ 

   1.  [监控 Amazon RDS 的指标](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Monitoring.html) 

   1.  [使用 Performance Insights 进行监控](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PerfInsights.html) 

   1.  [增强监控](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_Monitoring.OS.overview.html) 

   1.  [DynamoDB 指标](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/metrics-dimensions.html) 

   1.  [监控 DynamoDB DAX](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DAX.Monitoring.html) 

   1.  [监控 MemoryDB](https://docs.aws.amazon.com/memorydb/latest/devguide/monitoring-cloudwatch.html) 

   1.  [监控 Amazon Redshift](https://docs.aws.amazon.com/redshift/latest/mgmt/metrics.html) 

   1.  [时间序列指标和维度](https://docs.aws.amazon.com/timestream/latest/developerguide/metrics-dimensions.html) 

   1.  [Aurora 的集群级指标](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraMySQL.Monitoring.Metrics.html) 

   1.  [监控 Amazon Keyspaces](https://docs.aws.amazon.com/keyspaces/latest/devguide/monitoring.html) 

   1.  [监控 Amazon Neptune](https://docs.aws.amazon.com/neptune/latest/userguide/monitoring.html) 

1.  数据库监控是否会受益于检测操作异常和性能问题的机器学习解决方案？ 

   1.  [Amazon DevOps Guru for Amazon RDS](https://docs.aws.amazon.com/devops-guru/latest/userguide/working-with-rds.overview.how-it-works.html) 会显示性能问题，并提出纠正措施的建议。 

1.  您是否需要有关 SQL 使用情况的应用程序级详细信息？ 

   1.  [AWS X-Ray](https://docs.aws.amazon.com/xray/latest/devguide/xray-api-segmentdocuments.html#api-segmentdocuments-sql) 可以签入到应用程序中以获得见解，并为单个查询封装所有数据点。 

1.  您目前是否有经过批准的日志记录和监控解决方案？ 

   1.  [Amazon CloudWatch](https://aws.amazon.com/cloudwatch/) 可以收集架构中各种资源的指标。您也可以收集和发布自定义指标，用于显示业务指标或派生指标。使用 CloudWatch 或第三方解决方案来设置指示超出阈值的警报。 

1.  您是否确定并配置了数据留存策略以匹配我的安全和运营目标？ 

   1.  [CloudWatch 指标的默认数据留存](https://aws.amazon.com/cloudwatch/faqs/#AWS_resource_.26_custom_metrics_monitoring) 

   1.  [CloudWatch Logs 的默认数据留存](https://aws.amazon.com/cloudwatch/faqs/#Log_management) 

 **实施计划的工作量级别： **从所有数据库资源中识别、跟踪、收集、聚合和关联指标所需的工作量为 *中* 。 

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

 **相关文档：** 
+ [AWS 数据库缓存 ](https://aws.amazon.com/caching/database-caching/) 
+ [ Amazon Athena 10 大性能提示 ](https://aws.amazon.com/blogs/big-data/top-10-performance-tuning-tips-for-amazon-athena/)
+ [ Amazon Aurora 最佳实践 ](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Aurora.BestPractices.html)
+  [Amazon DynamoDB Accelerator ](https://aws.amazon.com/dynamodb/dax/)
+ [Amazon DynamoDB 最佳实践 ](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/BestPractices.html) 
+ [Amazon Redshift Spectrum 最佳实践 ](https://aws.amazon.com/blogs/big-data/10-best-practices-for-amazon-redshift-spectrum/) 
+ [Amazon Redshift 性能 ](https://docs.aws.amazon.com/redshift/latest/dg/c_challenges_achieving_high_performance_queries.html) 
+ [AWS 云数据库 ](https://aws.amazon.com/products/databases/) 
+  [Amazon RDS Performance Insights](https://aws.amazon.com/rds/performance-insights/) 

 **相关视频：** 
+ [AWS 专用数据库（DAT209-L） ](https://www.youtube.com/watch?v=q81TVuV5u28) 
+  [Amazon Aurora 存储揭秘：工作原理（DAT309-R） ](https://www.youtube.com/watch?v=uaQEGLKtw54)
+  [Amazon DynamoDB 深入研究：高级设计模式 (DAT403-R1) ](https://www.youtube.com/watch?v=6yqfmXiZTlM)

 **相关示例：** 
+  [第 100 级：使用 CloudWatch 控制面板进行监控](https://wellarchitectedlabs.com/performance-efficiency/100_labs/100_monitoring_with_cloudwatch_dashboards/) 
+  [AWS 数据集摄取指标收集框架](https://github.com/awslabs/aws-dataset-ingestion-metrics-collection-framework) 
+  [Amazon RDS 监控研讨会](https://www.workshops.aws/?tag=Enhanced%20Monitoring) 

# PERF04-BP04 根据访问模式选择数据存储
<a name="perf_right_database_solution_access_patterns"></a>

根据工作负载的访问模式和应用程序的要求来决定要使用的最佳数据服务和技术。

 **期望结果：**根据已识别和记录的数据访问模式选择数据存储。这可包括最常见的读取、写入和删除查询，对必要计算和聚合的需求，数据的复杂性，数据的相互依赖关系，以及所要求的一致性需求。 

 **常见反模式：** 
+ 仅选择一个数据库引擎来简化运营管理。
+  假设数据访问模式始终保持不变。 
+  在应用程序中实施复杂的事务、回滚和一致性逻辑。 
+  数据库配置为支持可能出现的高流量突增，从而导致数据库资源大部分时间保持空闲状态。 
+  使用共享数据库进行事务处理和分析。 

 **建立此最佳实践的好处：**根据访问模式选择和优化数据存储将有助于降低开发复杂性并优化性能。了解何时使用只读副本、全局表、数据分区和缓存将有助于减少运营开销，并可以根据工作负载需求进行扩展。 

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

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

识别和评估数据访问模式，以选择正确的存储配置。每个数据库解决方案都有配置和优化存储解决方案的选项。使用收集的指标和日志，并尝试使用各种选项以找到最佳配置。使用下表查看每个数据库服务的存储选项。


|  AWS Services  |  Amazon RDS  |  Amazon Aurora  |  Amazon DynamoDB  |  Amazon DocumentDB  |  Amazon ElastiCache  |  Amazon Neptune  |  Amazon Timestream  |  Amazon Keyspaces  |  Amazon QLDB  | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
|  Scaling Storage  | Storage can be scaled up manually or configured to scale automatically to a maximum of 64 TiB based on engine types. Provisioned storage cannot be decreased. |  Storage scales automatically up to maximum of 128 TiB and decreases when data is removed. Maximum storage size also depends upon specific Aurora MySQL or Aurora Postgres engine versions.  | Storage automatically scales. Tables are unconstrained in terms of size. | Storage scales automatically up to maximum of 64 TiB. Starting Amazon DocumentDB 4.0 storage can decrease by comparable amounts for data removal through dropping a collection or index. With Amazon DocumentDB 3.6 allocated space remains same and free space is reused when data volume increases. |  Storage is in-memory, tied to instance type or count.  |  Storage scales automatically can grow up to 128 TiB (or 64 TiB in few Regions). Upon data removal from, total allocated space remains same and is reused in the future.  | Organizes your time series data to optimize query processing and reduce storage costs. Retention period can be configured through in-memory and magnetic tiers. | Scales table storage up and down automatically as your application writes, updates, and deletes data. | Storage automatically scales. Tables are unconstrained in terms of size. | 

 

 **实施步骤：** 

1.  了解事务以及原子性、一致性、隔离和持久性（ACID） 合规性和一致性读取的要求。并非每个数据库都支持这些要求，大多数 NoSQL 数据库提供最终一致性模型。 

1.  考虑全球分布式应用程序需要的流量模式、延迟和访问要求，以便确定最佳存储解决方案。 

1.  分析查询模式、随机访问模式和一次性查询。还必须考虑针对文本和自然语言处理、时间序列和图形的高度专业化查询功能。 

1.  确定并记录数据和流量的预期增长。 

   1.  Amazon RDS 和 Aurora 支持存储自动扩展到规定的限制。除此之外，可以考虑将旧数据转移到 Amazon S3 进行归档，聚合历史数据进行分析，或通过分片进行横向扩展。 

   1.  DynamoDB 和 Amazon S3 将自动扩展到接近无限的存储量。 

   1.  在 EC2 上运行的 Amazon RDS 实例和数据库的大小可以手动调整，并且 EC2 实例可以在以后添加新的 EBS 卷以增加存储空间。  

   1.  实例类型可以根据活动的变化而改变。例如，您可以在测试时从较小的实例开始，然后在服务开始接收生产流量时扩展实例。Aurora Serverless V2 会自动扩缩以响应负载的变化。  

1. 有关正常和峰值性能（每秒事务数 TPS 和每秒查询数 QPS）及一致性（ACID 和最终一致性）的基准要求。

1.  记录解决方案部署方面和数据库访问要求（如全局复制、多可用区、读取复制和多个写入节点）。 

 **实施计划的工作量级别：**低。如果您未记录数据管理解决方案的日志或指标，那么您需要在识别和记录数据访问模式之前完成这项工作。一旦了解了数据访问模式，选择和配置数据存储的工作量就会比较低。 

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

 **相关文档：** 
+ [AWS 云数据库](https://aws.amazon.com/products/databases/)
+ [使用 Amazon RDS 数据库实例的存储](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PIOPS.StorageTypes.html)
+ [Amazon DocumentDB 存储](https://docs.aws.amazon.com/documentdb/latest/developerguide/how-it-works.html#how-it-works.storage)
+ [AWS 数据库缓存](https://aws.amazon.com/caching/database-caching/)
+ [Amazon Timestream 存储](https://docs.aws.amazon.com/timestream/latest/developerguide/storage.html)
+ [Amazon Keyspaces 中的存储](https://docs.aws.amazon.com/keyspaces/latest/devguide/Storage.html)
+ [Amazon ElastiCache 常见问题](https://aws.amazon.com/elasticache/faqs/)
+ [Amazon Neptune 存储、可靠性和可用性](https://docs.aws.amazon.com/neptune/latest/userguide/feature-overview-storage.html)
+ [Amazon Aurora 最佳实践](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Aurora.BestPractices.html) 
+ [Amazon DynamoDB Accelerator](https://aws.amazon.com/dynamodb/dax/) 
+ [Amazon DynamoDB 最佳实践](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/BestPractices.html) 
+  [Amazon RDS 存储类型](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Storage.html) 
+ [Amazon RDS 实例类的硬件规格](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.DBInstanceClass.html#Concepts.DBInstanceClass.Types)
+ [Aurora 存储限制](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/CHAP_Limits.html#RDS_Limits.FileSize.Aurora)

 **相关视频：** 
+ [AWS 专用数据库（DAT209-L）](https://www.youtube.com/watch?v=q81TVuV5u28) 
+  [Amazon Aurora 存储揭秘：工作原理（DAT309-R）](https://www.youtube.com/watch?v=uaQEGLKtw54)
+ [Amazon DynamoDB 深入研究：高级设计模式（DAT403-R1）](https://www.youtube.com/watch?v=6yqfmXiZTlM)

 **相关示例：** 
+  [使用 AWS 分布式负载测试进行试验和测试](https://aws.amazon.com/solutions/implementations/distributed-load-testing-on-aws/) 

# PERF04-BP05 根据访问模式和指标优化数据存储
<a name="perf_right_database_solution_optimize_metrics"></a>

 使用性能特性和访问模式来优化数据的存储和查询方式，以便实现最佳性能。衡量索引、键分配、数据仓库设计或缓存策略等优化对系统性能或整体效率的影响。 

 **常见反模式：** 
+  您只能手动搜索日志文件来查找指标。 
+  您只能将指标发布到内部工具。 

 **建立此最佳实践的好处：** 为了确保满足工作负载的指标要求，您必须监控与读写操作相关的数据库性能指标。您可以根据这些数据向数据存储层添加新的读写优化功能。 

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

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

 根据指标和模式优化数据存储：使用报告的指标来识别您的工作负载中任何性能欠佳的方面，并优化您的数据库组件。对于每个数据库系统，您都需要评估不同的性能相关特性，例如为数据建立索引的方式、缓存数据的方式，以及在多个系统中分配数据的方式。衡量优化所带来的影响。 

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

 **相关文档：** 
+  [AWS 数据库缓存](https://aws.amazon.com/caching/database-caching/) 
+  [Amazon Athena 10 大性能提示](https://aws.amazon.com/blogs/big-data/top-10-performance-tuning-tips-for-amazon-athena/) 
+  [Amazon Aurora 最佳实践](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Aurora.BestPractices.html) 
+  [Amazon DynamoDB Accelerator](https://aws.amazon.com/dynamodb/dax/) 
+  [Amazon DynamoDB 最佳实践](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/BestPractices.html) 
+  [Amazon Redshift Spectrum 最佳实践](https://aws.amazon.com/blogs/big-data/10-best-practices-for-amazon-redshift-spectrum/) 
+  [Amazon Redshift 性能](https://docs.aws.amazon.com/redshift/latest/dg/c_challenges_achieving_high_performance_queries.html) 
+  [AWS 云数据库](https://aws.amazon.com/products/databases/) 
+  [使用 DevOps Guru for RDS 分析性能异常](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/devops-guru-for-rds.html) 
+  [DynamoDB 的读/写容量模式](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.ReadWriteCapacityMode.html) 

 **相关视频：** 
+  [AWS 专用数据库（DAT209-L）](https://www.youtube.com/watch?v=q81TVuV5u28) 
+  [Amazon Aurora 存储揭秘：工作原理（DAT309-R）](https://www.youtube.com/watch?v=uaQEGLKtw54) 
+  [Amazon DynamoDB 深入研究：高级设计模式 (DAT403-R1)](https://www.youtube.com/watch?v=6yqfmXiZTlM) 

 **相关示例：** 
+  [Amazon DynamoDB 动手实验](https://amazon-dynamodb-labs.workshop.aws/hands-on-labs.html) 

# PERF 5  如何配置联网解决方案？
<a name="perf-05"></a>

 适合某个工作负载的最佳网络解决方案会因延迟、吞吐量要求、抖动和带宽而有所不同。物理限制（例如用户资源或本地资源）决定位置选项。这些限制可以通过边缘站点或资源置放来抵消。 

**Topics**
+ [PERF05-BP01 了解联网对性能的影响](perf_select_network_understand_impact.md)
+ [PERF05-BP02 评估可用的联网功能](perf_select_network_evaluate_features.md)
+ [PERF05-BP03 为混合工作负载选择适当大小的专用连接或 VPN](perf_select_network_hybrid.md)
+ [PERF05-BP04 利用负载均衡和加密卸载](perf_select_network_encryption_offload.md)
+ [PERF05-BP05 选择网络协议以提高性能](perf_select_network_protocols.md)
+ [PERF05-BP06 根据网络要求选择工作负载的位置](perf_select_network_location.md)
+ [PERF05-BP07 根据指标优化网络配置](perf_select_network_optimize.md)

# PERF05-BP01 了解联网对性能的影响
<a name="perf_select_network_understand_impact"></a>

 分析并了解与网络相关的决策对工作负载性能的影响。网络负责应用程序组件、云服务、边缘网络和本地数据之间的连接，因此，它会极大地影响工作负载性能。除了工作负载性能之外，用户体验还受网络延迟、带宽、协议、位置、网络拥塞、抖动、吞吐量和路由规则的影响。 

 **期望结果：** 清楚记录工作负载的联网要求列表，包括延迟、数据包大小、路由规则、协议和支持的流量模式。查看可用的联网解决方案，并确定哪种服务与您的工作负载联网特性相符。基于云的网络可以快速重建，因此有必要随着时间的推移改进网络架构，以提高性能效率。 

 **常见反模式：** 
+  所有流量都会流经您现有的数据中心。 
+  您不了解实际使用情况要求，建立了过多的 Direct Connect 会话。 
+  在确立联网解决方案时，您未考虑工作负载特性和加密开销。 
+  您将本地概念和策略用于云中的联网解决方案。 

 **建立此最佳实践的好处：** 通过了解联网如何影响工作负载性能，可帮助您识别潜在的瓶颈、改善用户体验、提高可靠性并在工作负载发生变化时减少运营维护。 

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

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

 确定工作负载的重要网络性能指标并捕获其联网特性。使用基准测试或负载测试，在数据驱动的方法中定义和记录需求。使用此数据确定网络解决方案受限的方面，并查看可以改进工作负载的配置选项。从需求出发，了解可用的云原生联网功能和选项，以及它们如何影响工作负载性能。每项联网功能均有优缺点，可以根据您的需求配置此功能，从而匹配工作负载特性和规模。 

 **实施步骤：** 

1.  定义和记录联网性能需求： 

   1.  包括网络延迟、带宽、协议、位置、流量模式（峰值和频率）、吞吐量、加密、检查和路由规则等指标 

1.  捕获您的基本联网特性： 

   1.  [VPC 流日志 ](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html) 

   1.  [AWS Transit Gateway 指标](https://docs.aws.amazon.com/vpc/latest/tgw/transit-gateway-cloudwatch-metrics.html) 

   1.  [AWS PrivateLink 指标](https://docs.aws.amazon.com/vpc/latest/privatelink/privatelink-cloudwatch-metrics.html) 

1.  捕获您的应用程序联网特性： 

   1.  [Elastic Network Adaptor](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-network-performance-ena.html) 

   1.  [AWS App Mesh 指标](https://docs.aws.amazon.com/app-mesh/latest/userguide/envoy-metrics.html) 

   1.  [Amazon API Gateway 指标](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-metrics-and-dimensions.html) 

1.  捕获您的边缘联网特性： 

   1.  [Amazon CloudFront 指标](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/viewing-cloudfront-metrics.html) 

   1.  [Amazon Route 53 指标](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/monitoring-cloudwatch.html) 

   1.  [AWS Global Accelerator 指标](https://docs.aws.amazon.com/global-accelerator/latest/dg/cloudwatch-monitoring.html) 

1.  捕获您的混合联网特性： 

   1.  [Direct Connect 指标](https://docs.aws.amazon.com/directconnect/latest/UserGuide/monitoring-cloudwatch.html) 

   1.  [AWS Site-to-Site VPN 指标](https://docs.aws.amazon.com/vpn/latest/s2svpn/monitoring-cloudwatch-vpn.html) 

   1.  [AWS Client VPN 指标](https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/monitoring-cloudwatch.html) 

   1.  [AWS 云 WAN 指标](https://docs.aws.amazon.com/vpc/latest/cloudwan/cloudwan-cloudwatch-metrics.html) 

1.  捕获您的安全联网特性： 

   1.  [AWS Shield、WAF 和 Network Firewall 指标](https://docs.aws.amazon.com/waf/latest/developerguide/monitoring-cloudwatch.html) 

1.  使用跟踪工具捕获端到端性能指标： 

   1.  [AWS X-Ray](https://aws.amazon.com/xray/) 

   1.  [Amazon CloudWatch RUM](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-RUM.html) 

1.  对网络性能进行基准测试和测试： 

   1.  [对网络](https://aws.amazon.com/premiumsupport/knowledge-center/network-throughput-benchmark-linux-ec2/) 吞吐量进行基准测试：当实例位于同一 VPC 中时，一些因素可能会影响 EC2 网络性能。测量同一 VPC 中的 EC2 Linux 实例之间的网络带宽。 

   1.  执行 [负载测试](https://aws.amazon.com/solutions/implementations/distributed-load-testing-on-aws/) 以试用各种联网解决方案和选项 

 **实施计划的工作量级别： **记录工作负载联网要求、选项和可用的解决方案所需的工作量为 *中* 。 

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

 **相关文档：** 
+ [Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html) 
+ [Linux 上的 EC2 增强联网 ](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/enhanced-networking.html) 
+ [Windows 上的 EC2 增强联网 ](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/enhanced-networking.html) 
+ [EC2 置放群组 ](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/placement-groups.html) 
+ [在 Linux 实例上启用 Elastic Network Adapter (ENA) 增强联网](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/enhanced-networking-ena.html) 
+ [Network Load Balancer ](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/introduction.html) 
+ [AWS 联网产品](https://aws.amazon.com/products/networking/) 
+  [Transit Gateway ](https://docs.aws.amazon.com/vpc/latest/tgw)
+ [过渡到 Amazon Route 53 中基于延迟的路由 ](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/TutorialTransitionToLBR.html) 
+ [VPC 终端节点 ](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints.html) 
+ [VPC 流日志 ](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html) 

 **相关视频：** 
+ [连接 AWS 和混合 AWS 网络架构（NET317-R1） ](https://www.youtube.com/watch?v=eqW6CPb58gs) 
+ [优化 Amazon EC2 实例的网络性能 (CMP308-R1) ](https://www.youtube.com/watch?v=DWiwuYtIgu0) 
+  [提高应用程序的全球网络性能](https://youtu.be/vNIALfLTW9M) 
+  [EC2 实例和性能优化最佳实践](https://youtu.be/W0PKclqP3U0) 
+  [优化 Amazon EC2 实例的网络性能](https://youtu.be/DWiwuYtIgu0) 
+  [使用 Well-Architected Framework 进行联网的最佳实践和技巧](https://youtu.be/wOMNpG49BeM) 
+  [大规模迁移中的 AWS 联网最佳实践](https://youtu.be/qCQvwLBjcbs) 

 **相关示例：** 
+  [AWS Transit Gateway 和可扩展的安全解决方案](https://github.com/aws-samples/aws-transit-gateway-and-scalable-security-solutions) 
+  [AWS 联网研讨会](https://networking.workshop.aws/) 

# PERF05-BP02 评估可用的联网功能
<a name="perf_select_network_evaluate_features"></a>

评估云中可能提高性能的联网功能。借助测试、指标和分析来衡量这些功能的影响。例如，利用可用的网络级功能来减少延迟、数据包丢失或抖动。

许多服务的创建旨在提高性能，而其他服务通常提供优化网络性能的功能。AWS Global Accelerator 和 Amazon CloudFront 等服务旨在提高性能，而大多数其他服务具有优化网络流量的产品功能。查看服务功能来提高工作负载性能，如 EC2 实例网络功能、增强联网实例类型、Amazon EBS 优化实例、Amazon S3 Transfer Acceleration 以及 CloudFront。

**期望结果：** 您已经记录了工作负载中的组件清单，并确定了每个组件的哪些网络配置将有助于满足性能需求。评估网络功能之后，您已经对性能指标进行了试验和测量，以确定如何使用可用的功能。

**常见反模式：** 
+ 您将所有工作负载都放在离总部最近的 AWS 区域，而不是放在接近终端用户的 AWS 区域。
+ 未能对您的工作负载性能进行基准测试，并根据该基准不断评估您的工作负载性能。
+ 您不查看服务配置以获得性能改进选项。

**建立此最佳实践的好处：** 评估所有服务功能和选项可以提高您的工作负载性能，降低基础设施的成本，减少维护工作负载所需的工作量，并提升您的整体安全状况。您可以利用 AWS 的全球骨干网，确保为客户提供出色的联网体验。

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

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

查看您可以使用哪些与网络相关的配置选项，以及这些配置选项对您的工作负载的影响。了解这些选项如何与架构进行交互，以及这些选项对实际测量的性能和用户感知到的性能的影响，对于性能优化至关重要。

**实施步骤：** 

1. 创建工作负载组件列表。

   1. 使用 [AWS 云 WAN](https://aws.amazon.com/cloud-wan/)构建、管理和监控您的组织网络。

   1. 使用 [Network Manager](https://docs.aws.amazon.com/vpc/latest/tgwnm/what-is-network-manager.html)查看您的网络。使用现有的配置管理数据库（CMDB）工具或 [AWS Config](https://aws.amazon.com/config/) 等工具创建工作负载清单及其配置方式。

1. 如果这是一个现有的工作负载，请确定并记录性能指标的基准，重点关注瓶颈和需要改进之处。基于业务要求和工作负载特征，与性能相关的网络指标将因工作负载而异。首先，对于您的工作负载，检查带宽、延迟、数据包丢失、抖动和重传等指标可能很重要。

1. 如果这是一个新的工作负载，请执行 [负载测试](https://aws.amazon.com/solutions/implementations/distributed-load-testing-on-aws/) 以识别性能瓶颈。

1. 对于识别的性能瓶颈，请查看解决方案的配置选项，以确定性能改进机会。

1. 如果您不知道网络路径或路由，请使用 [Network Access Analyzer](https://docs.aws.amazon.com/vpc/latest/network-access-analyzer/what-is-vaa.html) 来识别它们。

1. 查看您的网络协议，以进一步减少延迟。
   + [PERF05-BP05 选择网络协议以提高性能](perf_select_network_protocols.md) 

1. 如果您在多个位置使用 AWS Site-to-Site VPN 连接到 AWS 区域，请查看 [加速的 Site-to-Site VPN 连接，](https://docs.aws.amazon.com/vpn/latest/s2svpn/accelerated-vpn.html) 以获得提高联网性能的机会。

1. 当工作负载流量分散在多个账户中时，请评估您的网络拓扑结构和服务以减少延迟。
   + 当连接多个账户时，请评估 [VPC 对等](https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html) 和 [AWS Transit Gateway](https://aws.amazon.com/transit-gateway/) 之间的运营和性能权衡。AWS Transit Gateway 支持 AWS Site-to-Site VPN 吞吐量，通过使用多路径扩展到超过单一 [IPsec 最大限制](https://aws.amazon.com/blogs/networking-and-content-delivery/scaling-vpn-throughput-using-aws-transit-gateway/) 。Amazon VPC 和 AWS Transit Gateway 之间的流量保持在专用 AWS 网络上，而不会暴露在互联网上。AWS Transit Gateway 简化了您互连所有 VPC 的方式，这些 VPC 可以跨越数千个 AWS 账户并进入本地网络。在多个账户之间共享您的 AWS Transit Gateway（通过使用 [Resource Access Manager](https://aws.amazon.com/ram/)）。要查看您的全球网络流量，请使用 [Network Manager](https://aws.amazon.com/transit-gateway/network-manager/) 集中了解您的网络指标情况。

1. 查看您的用户位置，并尽量缩短用户与工作负载之间的距离。

   1. [AWS Global Accelerator](https://aws.amazon.com/global-accelerator/) 是一项网络服务，使用 Amazon Web Services 全球网络基础设施，可将用户流量的性能提高多达 60%。当互联网拥塞时，AWS Global Accelerator 会优化通往您的应用程序的路径，以始终保持较低的数据包丢失、抖动和延迟。它还提供了静态 IP 地址，可简化在可用区或 AWS 区域之间移动端点的过程，而无需更新 DNS 配置或更改面向客户端的应用程序。

   1. [Amazon CloudFront](https://aws.amazon.com/cloudfront/) 可在全球范围内提高工作负载内容交付性能并减少延迟。CloudFront 拥有超过 410 个分散在全球各地的入网点，可以缓存您的内容并减少终端用户的延迟。

   1. Amazon Route 53 提供 [基于延迟的路由](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-policy-latency.html)、[地理位置路由](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-policy-geo.html)、[地理位置临近度路由](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-policy-geoproximity.html)和 [基于 IP 的路由](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-policy-ipbased.html) 选项，以帮助您提高面向全球受众的工作负载性能。通过检查工作负载流量和用户位置，确定哪个路由选项将优化您的工作负载性能。

1. 评估其他 Amazon S3 功能以改进存储 IOPS。

   1.  [Amazon S3 Transfer Acceleration](https://aws.amazon.com/s3/transfer-acceleration/) 是一项功能，借助该功能，外部用户在向 Amazon S3 传输数据时可以通过 CloudFront 的网络优化获益。这就提高了将大量数据从没有专用连接的远程位置传输到 AWS 云 的能力。

   1.  [Amazon S3 多区域接入点](https://docs.aws.amazon.com/AmazonS3/latest/userguide/MultiRegionAccessPoints.html) 将内容复制到多个区域，并通过提供一个接入点简化了工作负载。使用多区域接入点时，您可以使用标识最低延迟桶的服务向 Amazon S3 请求或写入数据。

1. 查看您的计算资源网络带宽。

   1. EC2 实例、容器和 Lambda 函数使用的弹性网络接口（ENI）按流进行限制。查看您的置放群组以优化 [EC2 网络吞吐量](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-network-bandwidth.html)。为避免在每个流的基础上出现瓶颈，请将应用程序设计为使用多个流。要监控和查看与计算相关的网络指标，请使用 [CloudWatch Metrics](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2-instance-network-bandwidth.html) 和 [https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-network-performance-ena.html](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-network-performance-ena.html)。`ethtool` 包含在 ENA 驱动程序中，并公开了其他与网络相关的指标，这些指标可作为 [自定义指标](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/publishingMetrics.html) 发布到 CloudWatch。

   1. 较新的 EC2 实例可以利用增强联网。[N 系列的 EC2 实例](https://aws.amazon.com/ec2/nitro/)（例如 `M5n` 和 `M5dn`）利用第四代定制 Nitro 卡为单个实例提供高达 100Gbps 的网络吞吐量。与基础 `M5` 实例相比，这些实例提供了 4 倍的网络带宽和数据包处理能力，是网络密集型应用程序的理想选择。

   1. [Amazon Elastic Network Adapter](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/enhanced-networking-ena.html) （ENA）通过为 [集群放置组](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/placement-groups.html#placement-groups-cluster%23placement-groups-limitations-cluster)中的实例提供更好的吞吐量来提供进一步优化。

   1. [Elastic Fabric Adapter](https://aws.amazon.com/hpc/efa/) （EFA）是 Amazon EC2 实例的网络接口，使您能够在 AWS 上大规模运行需要高级别节点间通信的工作负载。借助 EFA，使用消息传递接口（MPI）的高性能计算（HPC）应用程序和使用 NVIDIA Collective Communications Library（NCCL）的机器学习（ML）应用程序可以扩展到数千个 CPU 或 GPU。

   1. [Amazon EBS 优化](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-optimized.html) 实例使用经过优化的配置堆栈，可以提供额外的专用容量来提高 Amazon EBS I/O。这种优化通过最小化您的 Amazon EBS I/O 与实例的其他流量之间的争用，来为 Amazon EBS 卷提供最佳性能。

**实施计划的工作量级别： **

要建立这种最佳实践，您必须了解目前影响网络性能的工作负载组件选项。收集组件、评估网络改进选项、试验、实施和记录这些改进的工作量为 *低* 到 *适中* 。

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

 **相关文档：** 
+  [Amazon EBS - 优化实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-optimized.html) 
+  [Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html) 
+  [Amazon EC2 实例网络带宽](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-network-bandwidth.html) 
+  [Linux 上的 EC2 增强联网](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/enhanced-networking.html) 
+  [Windows 上的 EC2 增强联网](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/enhanced-networking.html) 
+  [EC2 置放群组](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/placement-groups.html) 
+  [在 Linux 实例上启用 Elastic Network Adapter (ENA) 增强联网](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/enhanced-networking-ena.html) 
+  [Network Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/introduction.html) 
+  [AWS 联网产品](https://aws.amazon.com/products/networking/) 
+  [AWS Transit Gateway](https://docs.aws.amazon.com/vpc/latest/tgw) 
+  [过渡到 Amazon Route 53 中基于延迟的路由](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/TutorialTransitionToLBR.html) 
+  [VPC 终端节点](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints.html) 
+  [VPC 流日志](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html) 
+  [构建云 CMDB](https://aws.amazon.com/blogs/mt/building-a-cloud-cmdb-on-aws-for-consistent-resource-configuration-in-hybrid-environments/) 
+  [使用 AWS Transit Gateway 扩展 VPN 吞吐量](https://aws.amazon.com/blogs/networking-and-content-delivery/scaling-vpn-throughput-using-aws-transit-gateway/) 

 **相关视频：** 
+  [连接 AWS 和混合 AWS 网络架构（NET317-R1）](https://www.youtube.com/watch?v=eqW6CPb58gs) 
+  [优化 Amazon EC2 实例的网络性能（CMP308-R1）](https://www.youtube.com/watch?v=DWiwuYtIgu0) 
+  [AWS Global Accelerator](https://www.youtube.com/watch?v=lAOhr-5Urfk) 

 **相关示例：** 
+  [AWS Transit Gateway 和可扩展的安全解决方案](https://github.com/aws-samples/aws-transit-gateway-and-scalable-security-solutions) 
+  [AWS 联网研讨会](https://networking.workshop.aws/) 

# PERF05-BP03 为混合工作负载选择适当大小的专用连接或 VPN
<a name="perf_select_network_hybrid"></a>

 当需要使用公用网络连接 AWS 中的本地和云资源时，请确认您的带宽足以满足性能要求。估算混合工作负载的带宽和延迟要求。这些数字将确定连接选项的大小要求。 

 **期望结果：**当部署需要混合联网的工作负载时，您有多个连接配置选项，例如专用连接或虚拟专用网络（VPN）。为每个工作负载选择适当的连接类型，并确认在您的位置和云之间设置适当的带宽和加密要求。 

 **常见反模式：** 
+ 您无法理解或识别所有工作负载要求（带宽、延迟、抖动、加密和流量需求）。
+  不评估备份或并行连接选项。 

 **建立此最佳实践的好处：**通过选择并配置适当大小的混合网络解决方案，可以提高工作负载的可靠性并最大限度地增加性能提高机会。通过确定工作负载要求、提前规划和评估混合解决方案，您将最大限度地减少昂贵的物理网络变更和运营开销，并加快上市速度。 

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

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

根据您的带宽要求建立混合联网架构。估计混合应用程序的带宽和延迟要求。在使用专用网络连接或基于互联网的 VPN 之间考虑适当的连接选项。

专用连接通过专用线路建立网络连接。它适用于需要高带宽、低延迟，同时实现一致性能的情况。VPN 连接通过互联网建立安全连接。它适用于需要使用现有互联网连接进行加密连接的情况。

根据您的带宽要求，单个 VPN 或专用连接可能不够，您必须构建混合设置以实现多个连接之间的流量负载平衡。

 **实施步骤** 

1.  估计混合应用程序的带宽和延迟要求。 

   1.  对于迁移到 AWS 的现有应用程序，利用来自内部网络监控系统的数据。 

   1.  对于新应用程序或您没有监控数据的现有应用程序，请咨询产品所有者，以获得足够的性能指标并提供良好的用户体验。 

1.  选择专用连接或 VPN 作为连接选项。根据所有工作负载要求（加密、带宽和流量需求），您可以选择 AWS Direct Connect 或 AWS Site-to-Site VPN（或两者）。下图将帮助您选择适当的连接类型。 

   1.  如果您考虑使用专用连接，则可能需要 AWS Direct Connect，因为它具有专用网络连接，所以可以提供更可预测和一致的性能。AWS Direct Connect 使用专用连接或托管连接提供到 AWS 环境的专用连接（从 50Mbps 到 100Gbps）。这样一来，延迟得到管理和控制，并且拥有预置带宽，让您的工作负载能够高效地连接到其他环境。使用 AWS Direct Connect 合作伙伴，您可以从多个环境获得端到端连接，从而提供具有一致性能的扩展网络。AWS 使用原生 100Gbps、链接聚合组（LAG）或 BGP 同等成本多路径（ECMP）路由提供扩展 Direct Connect 连接带宽。 

   1.  如果您考虑使用 VPN 连接，则 AWS 托管 VPN 是推荐选项。AWS Site-to-Site VPN 提供支持 Internet 协议安全性（IPsec）协议的托管 VPN 服务。创建 VPN 连接时，每个 VPN 连接包括两条隧道以实现高可用性。借助 AWS Transit Gateway，您可以简化多个 VPC 之间的连接，通过单个 VPN 连接，还可以连接到已连接至 AWS Transit Gateway 的任何 VPC。AWS Transit Gateway 还通过在多个 VPN 隧道上启用同等成本多路径（ECMP）路由支持，使您能够扩展到超过 1.25Gbps IPsec VPN 吞吐量限制。 

![\[一个流程图，说明了在确定网络中是否需要确定性性能时您应该考虑的选项。\]](http://docs.aws.amazon.com/zh_cn/wellarchitected/2023-04-10/framework/images/deterministic-performance-flowchart.png)


 

 **实施计划的工作量级别：**高。在评估混合网络的工作负载需求和实施混合网络解决方案方面，需要做大量的工作。 

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

 **相关文档：** 
+ [网络负载均衡器](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/introduction.html) 
+ [AWS 联网产品](https://aws.amazon.com/products/networking/) 
+ [AWS Transit Gateway](https://docs.aws.amazon.com/vpc/latest/tgw) 
+ [过渡到 Amazon Route 53 中基于延迟的路由](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/TutorialTransitionToLBR.html) 
+ [VPC 终端节点](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints.html) 
+ [VPC 流日志](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html) 
+  [AWS Site-to-Site VPN](https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html) 
+  [构建可扩展且安全的多 VPC AWS 网络基础设施](https://docs.aws.amazon.com/whitepapers/latest/building-scalable-secure-multi-vpc-network-infrastructure/welcome.html) 
+  [AWS Direct Connect](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html) 
+  [Client VPN](https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/what-is.html) 

 **相关视频：** 
+ [连接 AWS 和混合 AWS 网络架构（NET317-R1）](https://www.youtube.com/watch?v=eqW6CPb58gs) 
+ [优化 Amazon EC2 实例的网络性能（CMP308-R1）](https://www.youtube.com/watch?v=DWiwuYtIgu0) 
+  [AWS Global Accelerator](https://www.youtube.com/watch?v=lAOhr-5Urfk) 
+  [AWS Direct Connect](https://www.youtube.com/watch?v=DXFooR95BYc&t=6s) 
+  [Transit Gateway Connect](https://www.youtube.com/watch?v=_MPY_LHSKtM&t=491s) 
+  [VPN 解决方案](https://www.youtube.com/watch?v=qmKkbuS9gRs) 
+  [VPN 解决方案的安全性](https://www.youtube.com/watch?v=FrhVV9nG4UM) 

 **相关示例：** 
+  [AWS Transit Gateway 和可扩展的安全解决方案](https://github.com/aws-samples/aws-transit-gateway-and-scalable-security-solutions) 
+  [AWS 联网研讨会](https://networking.workshop.aws/) 

# PERF05-BP04 利用负载均衡和加密卸载
<a name="perf_select_network_encryption_offload"></a>

使用负载均衡器实现目标资源的最佳性能效率，并提高系统的响应能力。

 **期望结果：**减少提供流量的计算资源数量。避免目标中的资源消耗不平衡。将计算密集型任务分流到负载均衡器。利用云弹性和灵活性来提高性能和优化架构。 

 **常见反模式：** 
+ 在选择负载均衡器类型时不考虑工作负载要求。
+ 不利用负载均衡器功能进行性能优化。
+  工作负载直接暴露给互联网，而不使用负载均衡器。 

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

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

 负载均衡器充当工作负载的接入点，它们从这里将流量分发到您的后端目标，例如计算实例或容器。优化架构的第一步是选择适合的负载均衡器类型。 

 首先列出工作负载特征，例如协议（如 TCP、HTTP、TLS 或 WebSocket）、目标类型（如实例、容器或无服务器）、应用程序要求（如长时间运行的连接、用户身份验证或粘性）和置放（如区域、Local Zone、Outpost 或区域隔离）。 

 选择适合的负载均衡器之后，您可以开始利用其功能来减少后端为提供流量所付出的工作量。 

 例如，您可以使用 Application Load Balancer（ALB）和 Network Load Balancer（NLB）执行 SSL/TLS 加密卸载，这是一个机会，可以避免目标完成 CPU 密集型 TLS 握手，同时还可以改进证书管理。 

 当您在负载均衡器中配置 SSL/TLS 卸载时，它负责加密进出客户端的流量，同时将未加密的流量传输到您的后端，释放后端资源和缩短客户端的响应时间。 

 Application Load Balancer 还可以提供 HTTP2 流量，无需在您的目标上支持它。因为 HTTP2 更有效地使用 TCP 连接，所以这个简单的决定可以缩短应用程序的响应时间。 

 负载均衡器还可以将流量分布到不同的后端类型（如容器和无服务器），从而使您的架构更加灵活。例如，Application Load Balancer 可配置[侦听器规则](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/listener-update-rules.html)，根据标头、方法或模式等请求参数将流量转发到不同的目标组。 

 在定义架构时还应考虑工作负载延迟要求。例如，如果您有延迟敏感型应用程序，则可以决定使用 Network Load Balancer，它提供极低的延迟。或者，您可以决定利用 [AWS Local Zones](https://aws.amazon.com/about-aws/global-infrastructure/localzones/) 或甚至是 [AWS Outposts](https://aws.amazon.com/outposts/rack/) 中的 Application Load Balancer，让工作负载更靠近客户。 

 延迟敏感型工作负载的另一个考虑因素是跨区域负载平衡。借助跨区域负载平衡，每个负载均衡器节点在所有已启用可用区中的已注册目标之间分配流量。这样可以提高可用性，但也会增加几毫秒的往返延迟。 

 最后，ALB 和 NLB 均提供日志和指标等监控资源。适当地设置监控有助于收集应用程序的性能洞察。例如，您可以使用 ALB 访问日志来查明哪些请求需要花更长的时间才能得到响应，或哪些后端目标会导致性能问题。 

 **实施步骤** 

1.  为工作负载选择适合的负载均衡器。 

   1.  为 HTTP/HTTPS 工作负载使用 Application Load Balancer。 

   1.  为在 TCP 或 UDP 上运行的非 HTTP 工作负载使用 Network Load Balancer。 

   1.  如果您想利用两个产品的功能，则可以使用以下组合：[ALB 作为 NLB 的目标](https://aws.amazon.com/blogs/networking-and-content-delivery/application-load-balancer-type-target-group-for-network-load-balancer/)。例如，如果想要将 NLB 的静态 IP 与 ALB 基于 HTTP 标头的路由结合使用，或者如果想要将 HTTP 工作负载向 [AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/privatelink-share-your-services.html) 公开，则可以使用此组合。 

   1.  有关负载均衡器的全面对比，请参阅 [ELB 产品对比](https://aws.amazon.com/elasticloadbalancing/features/)。 

1.  使用 SSL/TLS 卸载。 

   1.  配置 HTTPS/TLS 侦听器，将 [Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/create-https-listener.html) 和 [Network Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-tls-listener.html) 与 [AWS Certificate Manager](https://aws.amazon.com/certificate-manager/) 集成。 

   1.  请注意，出于合规性原因，有些工作负载可能需要端到端加密。在这种情况下，必须在目标上启用加密。 

   1.  有关安全最佳实践，请参阅 [SEC09-BP02 执行传输中加密](https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/sec_protect_data_transit_encrypt.html)。 

1.  选择适合的路由算法。 

   1.  路由算法会影响后端目标的使用情况，从而决定它们对性能的影响。例如，ALB 提供[两个路由算法选项](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-target-groups.html#modify-routing-algorithm)： 

   1.  **最少未完成请求：**用于在应用程序的请求复杂程度不同或目标处理能力不同的情况下，实现更好的后端目标负载分布。 

   1.  **循环：**当请求和目标类似，或需要在目标之间平均分配请求时使用。 

1.  考虑跨区域和区域隔离。 

   1.  使用跨区域关闭（区域隔离）来改善延迟和区域故障域。它在 NLB 中默认关闭，而在 [ALB 中，您可以按目标组来关闭](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/disable-cross-zone.html)。 

   1.  使用跨区域开启以提高可用性和灵活性。默认情况下，为 ALB 开启跨区域，而在 [NLB 中，您可以按目标组来开启](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/target-group-cross-zone.html)。 

1.  为 HTTP 工作负载开启 HTTP 保持活动。 

   1.  对于 HTTP 工作负载，在 Web 服务器设置中为后端目标开启 HTTP 保持活动。借助此功能，在保持活动超时到期之前，负载均衡器可以重复使用后端连接，从而改进 HTTP 请求和缩短响应时间，还可以降低后端目标的资源利用率。有关如何为 Apache 和 Nginx 执行此操作的详细信息，请参阅[使用 Apache 或 NGINX 作为 ELB 后端服务器的最佳设置是什么？](https://aws.amazon.com/premiumsupport/knowledge-center/apache-backend-elb/) 

1.  使用 Elastic Load Balancing 集成，更好地编排计算资源。 

   1.  使用与负载均衡器集成的 Auto Scaling。高效性能系统的其中一个关键方面与合理调整后端资源的大小有关。为此，您可以为后端目标资源使用负载均衡器集成。使用负载均衡器与 Auto Scaling 组的集成，根据需要在负载均衡器中添加或删除目标，以应对传入流量。 

   1.  对于容器化工作负载，负载均衡器也可与 Amazon ECS 和 Amazon EKS 集成。 
      + [使用 Elastic Load Balancing 在 Auto Scaling 组中的不同实例间分配流量](https://docs.aws.amazon.com/autoscaling/ec2/userguide/autoscaling-load-balancer.html)
      + [Amazon ECS - 服务负载均衡](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-load-balancing.html)
      + [Amazon EKS 上的应用程序负载均衡](https://docs.aws.amazon.com/eks/latest/userguide/alb-ingress.html)
      + [Amazon EKS 上的网络负载均衡](https://docs.aws.amazon.com/eks/latest/userguide/network-load-balancing.html)

1.  监控负载均衡器以找出性能瓶颈。 

   1.  启用 [Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/enable-access-logging.html) 和 [Network Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-access-logs.html) 的访问日志。 

   1.  对于 ALB，要考虑的主要方面是 `request_processing_time`、`request_processing_time`和 `response_processing_time`。 

   1.  对于 NLB，要考虑的主要方面是 `connection_time` 和 `tls_handshake_time`。 

   1.  准备好在需要时查询日志。您可以使用 Amazon Athena 来查询 [ALB 日志](https://docs.aws.amazon.com/athena/latest/ug/application-load-balancer-logs.html)和 [NLB 日志](https://docs.aws.amazon.com/athena/latest/ug/networkloadbalancer-classic-logs.html)。 

   1.  为性能相关指标（如[`TargetResponseTime` for ALB](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)）创建警报。 

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

 **相关最佳实践：** 
+  [SEC09-BP02 执行传输中加密](https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/sec_protect_data_transit_encrypt.html) 

 **相关文档：** 
+ [ELB 产品比较](https://aws.amazon.com/elasticloadbalancing/features/)
+ [AWS 全球基础设施](https://aws.amazon.com/about-aws/global-infrastructure/)
+ [使用可用区关联性提高性能和降低成本](https://aws.amazon.com/blogs/architecture/improving-performance-and-reducing-cost-using-availability-zone-affinity/)
+ [使用 Amazon Athena 进行日志分析的分步指南](https://github.com/aws/elastic-load-balancing-tools/tree/master/amazon-athena-for-elb)
+ [查询 Application Load Balancer 日志](https://docs.aws.amazon.com/athena/latest/ug/application-load-balancer-logs.html)
+ [监控 Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-monitoring.html)
+ [监控 Network Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-monitoring.html)

 **相关视频：** 
+ [AWS re:Invent 2018：[REPEAT 1] Elastic Load Balancing：深度挖掘和最佳实践（NET404-R1）](https://www.youtube.com/watch?v=VIgAT7vjol8)
+ [AWS re:Invent 2021 - 如何为 AWS 工作负载选择适合的负载均衡器](https://www.youtube.com/watch?v=p0YZBF03r5A)
+ [AWS re:Inforce 2022 - 如何使用 Elastic Load Balancing 全面改善安全状况（NIS203）](https://www.youtube.com/watch?v=YhNc5VSzOGQ)
+ [AWS re:Invent 2019：充分利用适用于不同工作负载的 Elastic Load Balancing（NET407-R2）](https://www.youtube.com/watch?v=HKh54BkaOK0)

 **相关示例：** 
+ [使用 Amazon Athena 进行日志分析的 CDK 和 CloudFormation 示例](https://github.com/aws/elastic-load-balancing-tools/tree/master/log-analysis-elb-cdk-cf-template)

# PERF05-BP05 选择网络协议以提高性能
<a name="perf_select_network_protocols"></a>

评估工作负载的性能要求，并选择可优化工作负载整体性能的网络协议。

延迟和带宽之间的关系可以实现高吞吐量。例如，如果文件传输使用传输控制协议（TCP），则延迟越高，整体吞吐量越低。有一些方法可以使用 TCP 调整和优化的传输协议来解决此问题，有些方法则使用用户数据报协议（UDP）。

 [可扩展的可靠数据报（SRD）](https://ieeexplore.ieee.org/document/9167399)协议是 AWS 为 Elastic Fabric Adapter 构建的网络传输协议，可提供可靠的数据报传送。与 TCP 协议不同，SRD 可以对数据包重新排序，并且不按顺序传送它们。SRD 的这种乱序传送机制通过备用路径并行发送数据包，可提高吞吐量。 

 **常见反模式：** 
+  无论有怎样的性能要求，都为所有工作负载使用 TCP。 

 **建立此最佳实践的好处：** 
+  为工作负载组件之间的通信选择适当的协议，可确保您获得该工作负载的最佳性能。 
+  确认已为用户和工作负载组件之间的通信使用适当的协议，有助于改善应用程序的整体用户体验。例如，同时使用 TCP 和 UDP，让 VDI 工作负载可以利用 TCP 对关键数据的可靠性以及 UDP 对实时数据的速度。 

 **在未建立这种最佳实践的情况下暴露的风险等级：**中等（使用不适当的网络协议会导致性能不佳，例如响应速度慢、延迟高和可扩展性差） 

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

提高工作负载性能的主要考虑因素是了解延迟和吞吐量要求，然后选择可优化性能的网络协议。

 **何时考虑使用 TCP** 

 TCP 提供可靠的数据传输，并可用于工作负载组件之间的通信，在这种情况下，可靠性和有保证的数据传输很重要。许多基于 Web 的应用程序依赖基于 TCP 的协议（例如 HTTP 和 HTTPS）来打开 TCP 套接字，以用于与 AWS 上的服务器通信。由于 TCP 能够控制数据交换速率和网络拥塞，所以电子邮件和文件数据传输是也可以使用 TCP 的常见应用。在 TCP 之上使用 TLS 会对通信增加一些开销，进而会导致延迟增加和吞吐量降低。该开销主要来自握手过程（需要多次往返才能完成）的额外开销。握手完成后，加密和解密数据的开销相对较小。 

 **何时考虑使用 UDP** 

 UDP 是一种面向无连接的协议，因此适用于需要快速、高效传输的应用，例如日志记录、监控和 VoIP 数据。此外，如果您的工作负载组件要响应来自大量客户端的小型查询，以确保工作负载实现最佳性能，则可考虑使用 UDP。数据报传输层安全性（DTLS）是 TLS 的 UDP 等效项。在 UDP 上使用 DTLS 时，因为简化了握手过程，所以开销来自加密和解密数据。因为 DTLS 包括额外的字段，用于指明安全性参数和检测篡改，所以它也会给 UDP 数据包增加少量的开销。 

 **何时考虑使用 SRD** 

 可扩展的可靠数据报（SRD）是一种针对高吞吐量工作负载而优化的网络传输协议，因为它能够跨多条路径对流量进行负载均衡，并能在发生丢包或链路故障时快速恢复。因此，SRD 非常适合在计算节点之间需要高吞吐量、低延迟通信的高性能计算（HPC）工作负载。这可能包括并行处理任务（例如，涉及在节点间进行大量数据传输的模拟、建模和数据分析）。 

 **实施步骤** 

1.  使用 [AWS Global Accelerator](https://aws.amazon.com/global-accelerator/) 和 [AWS Transfer Family](https://aws.amazon.com/aws-transfer-family/) 服务提高在线文件传输应用程序的吞吐量。AWS Global Accelerator 服务帮助您在客户端设备与 AWS 上的工作负载之间实现更低延迟。借助 AWS Transfer Family，您可以使用基于 TCP 的协议 [安全外壳文件传输协议（SFTP）和基于 SSL 的文件传输协议（FTPS）] 安全地扩展和管理到 AWS 存储服务的文件传输。 

1.  使用网络延迟来确定 TCP 是否适合工作负载组件之间的通信。如果客户端应用程序和服务器之间的网络延迟很高，则 TCP 三次握手需要一些时间，因而会影响应用程序的响应能力。可以使用第一个字节的时间（TTFB）和往返时间（RTT）来衡量网络延迟。如果您的工作负载向用户提供动态内容，请考虑使用 [Amazon CloudFront](https://aws.amazon.com/cloudfront/)，它会为动态内容建立到每个源的持久连接，以便减少连接设置时间，要不然会减慢每个客户端请求的速度。 

1.  由于在 TCP 或 UDP 上使用 TLS 会影响加密和解密，从而导致工作负载的延迟增加和吞吐量降低。对于此类工作负载，请考虑使用 [Elastic Load Balancing](https://aws.amazon.com/elasticloadbalancing/) 上的 SSL/TLS 卸载，允许负载均衡器处理 SSL/TLS 加密和解密过程，而不是让后端实例来处理，从而提高工作负载性能。这可以帮助降低后端实例上的 CPU 利用率，进而可以提高性能并增加容量。 

1.  使用 [Network Load Balancer（NLB）](https://aws.amazon.com/elasticloadbalancing/network-load-balancer/)来部署依赖 UDP 协议的服务（例如，身份验证和授权、日志记录、DNS、IoT 和串流媒体），以便提高工作负载的性能和可靠性。NLB 在多个目标之间分配传入的 UDP 流量，使您可以横向扩展工作负载、提高容量和减少单个目标的开销。 

1.  对于高性能计算（HPC）工作负载，考虑使用[弹性网络适配器（ENA）Express](https://aws.amazon.com/about-aws/whats-new/2022/11/elastic-network-adapter-ena-express-amazon-ec2-instances/) 功能，它使用 SRD 协议为 EC2 实例之间的网络流量提供更高的单流带宽（25Gbps）和更低的尾延迟（99.9 百分位数），从而提高网络性能。 

1.  使用 [Application Load Balancer（ALB）](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html)对工作负载组件之间或支持 gRPC 的客户端与服务之间的 gRPC（远程过程调用）流量进行路由和负载平衡。gRPC 使用基于 TCP 的 HTTP/2 协议进行传输，并且它可带来性能优势，例如更少的网络占用、压缩、高效的二进制序列化、支持众多语言以及双向流式传输。 

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

 **相关文档：** 
+  [Amazon EBS - 优化实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-optimized.html) 
+  [Application Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html) 
+  [Linux 上的 EC2 增强联网](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/enhanced-networking.html) 
+  [Windows 上的 EC2 增强联网](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/enhanced-networking.html) 
+  [EC2 置放群组](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/placement-groups.html) 
+  [在 Linux 实例上启用弹性网络适配器（ENA）增强联网](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/enhanced-networking-ena.html) 
+  [Network Load Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/introduction.html) 
+  [AWS 联网产品](https://aws.amazon.com/products/networking/) 
+  [Transit Gateway](https://docs.aws.amazon.com/vpc/latest/tgw) 
+  [过渡到 Amazon Route 53 中基于延迟的路由](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/TutorialTransitionToLBR.html) 
+  [VPC 终端节点](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints.html) 
+  [VPC 流日志](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html) 

 **相关视频：** 
+  [连接 AWS 和混合 AWS 网络架构（NET317-R1）](https://www.youtube.com/watch?v=eqW6CPb58gs) 
+  [优化 Amazon EC2 实例的网络性能（CMP308-R1）](https://www.youtube.com/watch?v=DWiwuYtIgu0) 
+ [调优云：提高应用程序的全球网络性能](https://www.youtube.com/watch?v=00ukhVcgWrs)
+ [使用 EFA 和 SRD 进行应用程序扩展](https://pages.awscloud.com/HPC-Application-Scaling-with-Elastic-Fabric-Adapter-EFA-and-Scalable-Reliable-Datagram-SRD_2020_0004-CMP_OD.html)

 **相关示例：** 
+  [AWS Transit Gateway 和可扩展的安全解决方案](https://github.com/aws-samples/aws-transit-gateway-and-scalable-security-solutions) 
+  [AWS 联网研讨会](https://networking.workshop.aws/) 

# PERF05-BP06 根据网络要求选择工作负载的位置
<a name="perf_select_network_location"></a>

评估资源置放选项，以便减少网络延迟和提高吞吐量，通过缩短页面加载和数据传输时间来提供最佳的用户体验。

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

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

Amazon EC2 实例等资源放入 [AWS 区域](https://aws.amazon.com/about-aws/global-infrastructure/regions_az/)、[AWS Local Zones](https://aws.amazon.com/about-aws/global-infrastructure/localzones/)、[AWS Outposts](https://aws.amazon.com/outposts/) 或 [AWS Wavelength](https://aws.amazon.com/wavelength/) 区域内的可用区。选择此位置会影响给定用户位置的网络延迟和吞吐量。[Amazon CloudFront](https://aws.amazon.com/cloudfront/) 和 [AWS Global Accelerator](https://aws.amazon.com/global-accelerator/) 等边缘服务也可用于在边缘站点缓存内容或为用户提供通过 AWS 全球网络到达工作负载的最佳路径，从而提高网络性能。

 **实施步骤** 

1.  请根据以下关键元素，为您的部署选择合适的 AWS 区域 或区域： 

   1.  **用户所在位置：**选择一个接近您的工作负载用户的区域，确保他们在使用工作负载时延迟低。

   1.  **数据所在位置：**对于数据密集型应用程序，数据传输的主要瓶颈是延迟。应用程序代码的执行应尽量接近数据。

   1.  **其他制约：**考虑安全性和合规性等制约（例如，数据驻留要求）。

1.  对于给定工作负载，如果某个组件包含一组相互依赖且需要低延迟的 Amazon EC2 实例，请考虑使用[集群置放群组](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/placement-groups.html)来影响这些实例的置放，以便满足工作负载的要求。对于 TCP/IP 流量，同一集群置放群组中的实例的单个流吞吐量限制更大，它们会放入网络的同一个高平分带宽段。建议将集群置放群组用于可受益于低网络延迟和/或高网络吞吐量的应用程序。 

1.  对于位置敏感型工作负载（例如具有低延迟或数据驻留要求的工作负载），请查看 [AWS Local Zones](https://aws.amazon.com/about-aws/global-infrastructure/localzones/) 或 [AWS Outposts](https://aws.amazon.com/outposts/)。 

   1.  AWS Local Zones 是一种基础设施部署类型，将计算、存储、数据库及其他所选 AWS 服务放置在靠近有大量人口和工业中心的地方。 

   1.  AWS Outposts 是一系列完全托管式解决方案，可向几乎任何本地或边缘站点提供 AWS 基础设施和服务，以实现真正一致的混合体验。 

1.  高分辨率实时视频流、高保真度音频和增强现实/虚拟现实（AR/VR）等应用要求 5G 设备具有超低延迟。对于此类应用，请考虑使用 [AWS Wavelength](https://aws.amazon.com/wavelength/)。AWS Wavelength 在 5G 网络内嵌入 AWS 计算和存储服务，为开发、部署和扩展超低延迟应用提供移动边缘计算基础设施。 

1.  如果您有地理位置分散的用户，则可使用内容分发网络（CDN），通过遍布全球的入网点（PoP）来传输数据，从而加快静态和动态 Web 内容的分发。CDN 通常还提供边缘计算功能，在边缘大规模执行延迟敏感型操作，例如 HTTP 标头操作以及 URL 重写和重定向。[Amazon CloudFront](https://aws.amazon.com/cloudfront/) 是一项 Web 服务，可加快静态和动态 Web 内容的分发。CloudFront 的使用案例包括加快静态网站内容传输，以及提供视频点播或视频直播。CloudFront 还可用于以更低的延迟为观众定制内容和体验。 

1.  有些应用程序需要固定入口点，或通过减少第一个字节延迟和抖动以及提高吞吐量来提高性能。在边缘站点提供静态任播 IP 地址和 TCP 终止的网络服务可以使这些应用程序受益。[AWS Global Accelerator](https://aws.amazon.com/global-accelerator/) 可以将应用程序的性能提高多达 60%，并为多区域架构提供快速失效转移。AWS Global Accelerator 为您提供静态任播 IP 地址，作为一个或多个 AWS 区域 中托管的应用程序的固定入口点。这些 IP 地址使流量在尽可能靠近用户的位置进入 AWS 全球网络。AWS Global Accelerator 在客户端和最靠近客户端的 AWS 边缘站点之间建立 TCP 连接，从而缩短初始连接设置时间。检查 AWS Global Accelerator 的使用情况，以提高 TCP/UDP 工作负载的性能，并为多区域架构提供快速失效转移。 

1.  如果您有本地应用程序或用户，则您的网络和云之间的专用网络连接可能会使您受益。专用网络连接可降低遇到拥塞或意外增加延迟的几率。[AWS Direct Connect](https://aws.amazon.com/directconnect/) 可将您的网络直接连接到 AWS 并绕过公有互联网，从而提高应用程序性能。创建新连接时，您可以选择 AWS Direct Connect 交付合作伙伴提供的托管连接，也可以选择 AWS 的专用连接，并在全球 100 多个 AWS Direct Connect 地点部署。您还可以利用 AWS 的低数据传输费率，并可选地配置 Site-to-Site VPN 进行失效转移，从而降低网络成本。 

1.  如果您配置 [Site-to-Site VPN](https://aws.amazon.com/vpn/site-to-site-vpn/) 以连接到 AWS 内的资源，您可以有选择地启用加速。加速 Site-to-Site VPN 连接使用 AWS Global Accelerator 将流量从本地网络路由到离客户网关设备最近的 AWS 边缘站点。 

1.  检查工作负载流量和用户位置，确定哪个 DNS 路由选项会优化工作负载性能。[Amazon Route 53](https://aws.amazon.com/route53) 提供[基于延迟的路由](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-policy-latency.html)、[地理位置路由](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-policy-geo.html)、[地理位置邻近度路由](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-policy-geoproximity.html)和[基于 IP 的路由](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-policy-ipbased.html)选项，帮助您为全球受众提高工作负载的性能。 

   1.  Route 53 还为终端用户提供低查询延迟。Route 53 使用遍布全球的 DNS 服务器的全球任播网络，旨在根据网络状况从最佳位置自动应答查询。 

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

 **相关最佳实践：** 
+ [COST07-BP02 根据成本考虑实施区域](https://docs.aws.amazon.com/wellarchitected/latest/framework/cost_pricing_model_region_cost.html)
+ [COST08-BP03 实施服务以便降低数据传输成本](https://docs.aws.amazon.com/wellarchitected/latest/framework/cost_data_transfer_implement_services.html)
+ [REL10-BP01 将工作负载部署到多个位置](https://docs.aws.amazon.com/wellarchitected/latest/framework/rel_fault_isolation_multiaz_region_system.html)
+ [REL10-BP02 为您的多位置部署选择合适的位置](https://docs.aws.amazon.com/wellarchitected/latest/framework/rel_fault_isolation_select_location.html)
+ [SUS01-BP01 选择 Amazon 可再生能源项目附近的区域以及其电网公布的碳强度低于其他位置（或区域）的区域](https://docs.aws.amazon.com/wellarchitected/latest/framework/sus_sus_region_a2.html)
+ [SUS02-BP04 针对用户位置优化工作负载的地理位置](https://docs.aws.amazon.com/wellarchitected/latest/framework/sus_sus_user_a5.html)
+ [SUS04-BP07 最大限度地减少跨网络的数据移动](https://docs.aws.amazon.com/wellarchitected/latest/framework/sus_sus_data_a8.html)

 **相关文档：** 
+ [AWS 全球基础设施](https://aws.amazon.com/about-aws/global-infrastructure/)
+ [AWS Local Zones 和 AWS Outposts，为边缘工作负载选择适合的技术](https://aws.amazon.com/blogs/compute/aws-local-zones-and-aws-outposts-choosing-the-right-technology-for-your-edge-workload/)
+  [置放群组](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/placement-groups.html) 
+  [AWS Local Zones](https://aws.amazon.com/about-aws/global-infrastructure/localzones/) 
+  [AWS Outposts](https://aws.amazon.com/outposts/) 
+  [AWS Wavelength](https://aws.amazon.com/wavelength/) 
+  [Amazon CloudFront](https://aws.amazon.com/cloudfront/) 
+  [AWS Global Accelerator](https://aws.amazon.com/global-accelerator/) 
+  [AWS Direct Connect](https://aws.amazon.com/directconnect/) 
+  [Site-to-Site VPN](https://aws.amazon.com/vpn/site-to-site-vpn/) 
+  [Amazon Route 53](https://aws.amazon.com/route53) 

 **相关视频：** 
+ [AWS Local Zones 解说视频](https://www.youtube.com/watch?v=JHt-D4_zh7w)
+ [AWS Outposts：概述及工作原理](https://www.youtube.com/watch?v=ppG2FFB0mMQ)
+ [AWS re:Invent 2021 - AWS Outposts：将 AWS 体验带到本地](https://www.youtube.com/watch?v=FxVF6A22498)
+ [AWS re:Invent 2020 - AWS Wavelength：在 5G 边缘以超低延迟运行应用](https://www.youtube.com/watch?v=AQ-GbAFDvpM)
+ [AWS re:Invent 2022 - AWS Local Zones：为分布式边缘构建应用程序](https://www.youtube.com/watch?v=bDnh_d-slhw)
+ [AWS re:Invent 2021 - 使用 Amazon CloudFront 构建低延迟网站](https://www.youtube.com/watch?v=9npcOZ1PP_c)
+ [AWS re:Invent 2022 - 使用 AWS Global Accelerator 提高性能和可用性](https://www.youtube.com/watch?v=s5sjsdDC0Lg)
+ [AWS re:Invent 2022 - 使用 AWS 构建您的全球广域网](https://www.youtube.com/watch?v=flBieylTwvI)
+ [AWS re:Invent 2020：使用 Amazon Route 53 进行全球流量管理](https://www.youtube.com/watch?v=E33dA6n9O7I)

 **相关示例：** 
+ [AWS Global Accelerator 研讨会](https://catalog.us-east-1.prod.workshops.aws/workshops/effb1517-b193-4c59-8da5-ce2abdb0b656/en-US)
+ [使用边缘函数处理重写和重定向](https://catalog.us-east-1.prod.workshops.aws/workshops/814dcdac-c2ad-4386-98d5-27d37bb77766/en-US)

# PERF05-BP07 根据指标优化网络配置
<a name="perf_select_network_optimize"></a>

不适当的网络配置会影响网络的性能、效率和成本。在普通网络环境中，为了在前期快速完成部署，在网络性能方面没有充分考虑适当的网络配置。为了优化网络配置，您必须首先了解您的网络环境并获得相关数据。

为了了解您的网络资源运行情况，可以收集和分析数据以作出有关优化网络配置的明智决定。衡量更改带来的影响，并根据衡量结果来做出进一步决策。

 **期望结果：**随着工作负载的发展，使用指标和网络监控工具来优化网络配置。基于云的网络可以快速优化，因此有必要随着时间的推移改进网络架构，以保持性能效率。 

 **常见反模式：** 
+  您应认为所有性能相关的问题都与应用程序有关。 
+  您只需从距离已部署工作负载很近的位置测试您的网络性能。 
+  为所有网络服务使用默认配置。 
+  过度预置网络资源以提供充足的容量。 

 **建立此最佳实践的好处：**收集 AWS 网络的必要指标并实施网络监控工具，使您可以了解网络性能和优化网络配置。 

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

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

 监控进出 VPC、子网或网络接口的流量，这对于了解如何利用 AWS 网络资源以及如何优化网络配置至关重要。通过使用以下工具，您可以进一步检测有关流量使用、网络访问和日志的信息。 

 **实施步骤** 

1.  使用 [Amazon VPC IP Address Manager](https://docs.aws.amazon.com/vpc/latest/ipam/what-it-is-ipam.html)。您可以使用 IPAM 来规划、跟踪和监控 AWS 与本地工作负载的 IP 地址。这是优化 IP 地址使用和分配的最佳实践。 

1.  开启 [VPC 流日志](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html)。使用 VPC 流日志来捕获有关进出 VPC 中网络接口的流量的详细信息。借助 VPC 流日志，您可以诊断过于严格或过于宽松的安全组规则，并确定进出网络接口的流量的方向。当您发布流日志时，将收取对公开日志的数据摄取和存档费用。 

1.  开启 [DNS 查询日志记录](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/query-logs.html)。您可以配置 Amazon Route 53 以记录有关 Route 53 接收到的公有或私有 DNS 查询的信息。借助 DNS 日志，您可以了解请求的域或子域，或了解响应 DNS 查询的 Route 53 边缘站点，从而优化 DNS 配置。 

1.  使用 [Reachability Analyzer](https://docs.aws.amazon.com/vpc/latest/reachability/what-is-reachability-analyzer.html) 来分析和调试网络可达性。Reachability Analyzer 是一个配置分析工具，使您可以在 VPC 中的源资源和目标资源之间执行连接测试。此工具帮助您确认您的网络配置与预期的连接匹配。 

1.  使用[网络访问分析器](https://docs.aws.amazon.com/vpc/latest/network-access-analyzer/what-is-network-access-analyzer.html)来了解对资源的网络访问。您可以使用网络访问分析器来指定网络访问需求，然后确定不能满足指定要求的潜在网络路径。通过优化相应的网络配置，您可以了解和验证网络的状态，并证明 AWS 中的网络满足您的合规性要求。 

1.  使用 [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) 启用适当的网络选项指标。确保为工作负载选择适合的网络指标。例如，您可以为 VPC 网络地址使用、VPC NAT Gateway、AWS Transit Gateway、VPN 隧道、AWS Network Firewall、Elastic Load Balancing 和 AWS Direct Connect 启用指标。为了观察和了解网络状态和使用情况，以及帮助您根据观察结果优化网络配置，持续监控指标是一种好方法。 

 **实施计划的工作量级别：**中等 

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

 **相关文档：** 
+  [VPC 流日志](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html) 
+ [公共 DNS 查询日志记录](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/query-logs.html)
+ [什么是 IPAM？](https://docs.aws.amazon.com/vpc/latest/ipam/what-it-is-ipam.html)
+  [什么是 Reachability Analyzer？](https://docs.aws.amazon.com/vpc/latest/reachability/what-is-reachability-analyzer.html) 
+ [什么是网络访问分析器？](https://docs.aws.amazon.com/vpc/latest/network-access-analyzer/what-is-network-access-analyzer.html)
+ [适合 VPC 的 CloudWatch 指标](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-cloudwatch.html)
+ [使用 Apache Parquet 格式的 VPC 流日志优化性能并降低网络分析成本](https://aws.amazon.com/blogs/big-data/optimize-performance-and-reduce-costs-for-network-analytics-with-vpc-flow-logs-in-apache-parquet-format/)
+  [使用 Amazon Cloudwatch 指标监控您的全球和核心网络](https://docs.aws.amazon.com/vpc/latest/tgwnm/monitoring-cloudwatch-metrics.html) 
+  [持续监控网络流量和资源](https://docs.aws.amazon.com/whitepapers/latest/security-best-practices-for-manufacturing-ot/continuously-monitor-network-traffic-and-resources.html) 

 **相关视频：** 
+ [使用 Well-Architected Framework 进行联网的最佳实践和技巧](https://www.youtube.com/watch?v=wOMNpG49BeM)
+ [监控网络流量并排查问题](https://www.youtube.com/watch?v=Ed09ReWRQXc)

 **相关示例：** 
+  [AWS 联网研讨会](https://networking.workshop.aws/) 
+  [AWS 网络监控](https://github.com/aws-samples/monitor-vpc-network-patterns) 