

# PERF 2  如何选择计算解决方案？
<a name="w2aac19c11b5b7"></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>

 分析您的工作负载的各种性能特性，以及这些特性与内存、网络和 CPU 使用率之间的关系。根据这些数据选择最适合您的工作负载配置文件的资源。例如，实例的 r 系列可以最好地处理内存密集型工作负载（例如数据库）。但是，弹性容器系统可为突增的工作负载提供更多优势。 

 **常见反模式：** 
+  您应选择可用于所有工作负载的最大的实例。 
+  您应将所有实例类型标准化为一种类型，以便于管理。 

 **建立此最佳实践的好处：** 熟悉 AWS 计算产品/服务可帮助您确定适用于各种工作负载的合适解决方案。为工作负载选择各种计算产品/服务后，您可以快速灵活地试用这些计算产品/服务，以确定哪些产品/服务满足您的工作负载需求。 

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

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

 通过合理调整大小来修改工作负载配置：要优化性能和整体效率，请确定工作负载需要哪些资源。对于对内存的要求比对 CPU 的要求更高的系统，选择内存优化型实例，对于执行非内存密集型数据处理的组件，选择计算优化型实例。合理调整大小可让您的工作负载能够在只使用所需资源的情况下，尽可能高性能地运行。 

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

 **相关文档：** 
+  [AWS Compute Optimizer](https://aws.amazon.com/compute-optimizer/)  
+  [使用 AWS 进行云计算](https://aws.amazon.com/products/compute/) 
+  [EC2 实例类型](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) 
+  [ECS 容器：Amazon ECS 容器实例](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_instances.html) 
+  [EKS 容器：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) 
+  [EC2 实例的处理器状态控制](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/processor_state_control.html) 

 **相关视频：** 
+  [Amazon EC2 foundations (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>

 云让您能够通过各种机制灵活地动态扩展或缩减资源，以便满足不断变化的需求。结合与计算相关的指标，工作负载可以自动响应这些变化，并利用一系列最优的资源来实现其目标。 

 实现最佳供需匹配能够尽可能降低工作负载成本，但您也必须准备充足的供应，以便应对预置时间问题和单个资源的故障。需求可以是固定的，也可以是变化的，所以需要通过指标和自动化来确保管理本身不会成为一种负担，而且不会产生不成比例的高成本。 

 借助 AWS，您可以使用大量不同方法以实现供需匹配。《成本优化支柱》白皮书描述了如何使用以下方法进行成本优化： 
+  基于需求的方法 
+  基于缓冲区的方法 
+  基于时间的方法 

 您必须确保工作负载部署可以处理扩展和缩减事件。创建缩减事件的测试方案，以确保工作负载按预期方式运行。 

 **常见反模式：** 
+  您通过手动增加容量来对警报做出反应。 
+  在扩展事件之后，您将保留增加的容量，而不是缩减容量。 

 **建立此最佳实践的好处：** 配置和测试工作负载弹性将有助于节省资金，维护性能基准，并在流量变化时提高可靠性。大多数非生产实例在不使用时都应该停止。尽管可以手动关闭未使用的实例，但在规模较大时这是无法实现的。您也可以利用基于卷的弹性，此功能通过在需求激增时自动增加计算资源数量，并在需求减少时减小容量，从而能够优化性能并降低成本。 

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

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

 利用弹性：弹性可根据您对资源的需求来向您提供这些资源。实例、容器和函数都能够与自动扩展功能相结合或作为此服务的一项功能来提供可实现弹性的机制。在您的架构中利用弹性，可确保您有足够的容量来满足所有使用规模的性能要求。确保衡量扩展或缩减弹性资源的指标已根据所部署的工作负载类型进行了验证。如果您正在部署一个视频转码应用程序，CPU 利用率预计为 100%，并且不应将此作为您的主要指标。或者，您也可以衡量等待缩放您的实例类型的转码作业的队列深度。确保工作负载部署可以处理扩展事件和缩减事件。安全地缩减工作负载组件，与在需要时扩展资源同样重要。创建缩减事件的测试方案，以确保工作负载按预期方式运行。 

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

 **相关文档：** 
+  [使用 AWS 进行云计算](https://aws.amazon.com/products/compute/) 
+  [EC2 实例类型](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) 
+  [ECS 容器：Amazon ECS 容器实例](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_instances.html) 
+  [EKS 容器：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) 
+  [EC2 实例的处理器状态控制](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/processor_state_control.html) 

 **相关视频：** 
+  [Amazon EC2 foundations (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>

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

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

 **相关文档：** 
+  [使用 AWS 进行云计算 ](https://aws.amazon.com/products/compute/?ref=wellarchitected) 
+  [AWS Compute Optimizer](https://aws.amazon.com/compute-optimizer/) 
+  [使用 AWS 进行云计算](https://aws.amazon.com/products/compute/) 
+  [EC2 实例类型](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) 
+  [ECS 容器：Amazon ECS 容器实例](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_instances.html) 
+  [EKS 容器：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) 
+  [EC2 实例的处理器状态控制](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/processor_state_control.html) 

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

 **相关示例：** 
+  [在启用 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) 