

# 最佳实践
<a name="perf-bp"></a>

**Topics**
+ [架构选择](perf-arch.md)
+ [计算和硬件](perf-compute.md)
+ [数据管理](perf-data.md)
+ [网络和内容分发](perf-networking.md)
+ [流程和文化](perf-process.md)

# 架构选择
<a name="perf-arch"></a>

 针对特定工作负载的最佳解决方案各不相同，而且解决方案通常会结合多种方法。Well-Architected 工作负载会使用多种解决方案，并且允许使用各种不同的功能来提高性能。

 我们提供多种类型和配置的 AWS 资源，可让您更轻松地找到最能满足您需求的方法。此外，我们还提供了无法使用本地基础设施轻松实现的选项。例如，Amazon DynamoDB 之类的托管服务可以提供完全托管的 NoSQL 数据库，确保在任何规模下都只会有几毫秒的延迟。

 以下问题主要针对性能效率方面的注意事项。（有关性能效率问题的列表和最佳实践，请参阅[附录](a-performance-efficiency.md)。） 


| PERF 1：如何为工作负载选择合适的云资源和架构模式？ | 
| --- | 
|  一个工作负载通常需要采用多种方法才能实现更高效的性能。Well-Architected 系统会使用多种解决方案和功能来提高性能。 | 

# 计算和硬件
<a name="perf-compute"></a>

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

 在 AWS 中，计算资源有三种形式：实例、容器和函数：
+  **实例**是虚拟化服务器，因此您只需通过一个按钮或一次 API 调用即可对其功能进行调整。因为云中的资源决策不是固定不变的，所以您可以尝试使用不同的服务器类型。在 AWS，这些虚拟服务器实例具有不同的系列和大小，并且可以提供各种功能，包括固态硬盘（SSD）和图形处理单元（GPU）。
+  **容器**是一种操作系统虚拟化方法，允许您在资源隔离的流程中运行应用程序及其依赖项。AWS Fargate 是适用于容器的无服务器计算引擎。如果您需要控制计算环境的安装、配置和管理，则可以使用 Amazon EC2。此外，您还可以从多个容器编排平台中进行选择：Amazon Elastic Container Service（ECS）或 Amazon Elastic Kubernetes Service（EKS）。
+  **函数**从您要应用的代码中抽象出运行环境。例如，AWS Lambda 允许您在不运行实例的情况下运行代码。

 以下问题主要针对性能效率方面的注意事项。


| PERF 2：如何在工作负载中选择和使用计算资源？ | 
| --- | 
| 适合工作负载的更高效的计算解决方案会根据应用程序设计、使用模式和配置设置而有所不同。架构可以使用不同的计算解决方案来支持各种组件，并且可以开启各种不同的功能来提高性能。为架构选择错误的计算解决方案可能会降低性能效率。 | 

# 数据管理
<a name="perf-data"></a>

 针对特定系统的最佳数据管理解决方案往往取决于数据类型（数据块、文件或对象）、访问模式（随机或连续）、所需吞吐量、访问频率（在线、离线、归档）、更新频率（WORM、动态）以及可用性与持久性限制等因素。Well-Architected 工作负载使用专门构建的数据存储，这些存储允许使用不同的功能来提高性能。

 在 AWS 中，存储有三种形式：对象、数据块和文件：
+  **对象存储**提供了一个可扩展的耐用平台，允许从任何互联网位置访问数据，适用于用户生成的内容、活动存档、无服务器计算、大数据存储或备份以及恢复。Amazon Simple Storage Service（Amazon S3）是一种对象存储服务，提供行业领先的可扩展性、数据可用性、安全性和性能。Amazon S3 的耐用性可达到 99.999999999%（11 个 9），为全球各地的公司存储数百万个应用程序的数据。
+  **数据块存储**为每个虚拟主机提供高可用性、一致性、低延迟的数据块存储，类似于直连存储（DAS）或存储区域网络（SAN）。Amazon Elastic Block Store（Amazon EBS）旨在满足需要持久性存储的工作负载的需求，此类持久性存储可通过 EC2 实例访问，帮助您根据适合的存储容量、性能和成本对应用程序进行微调。
+  **文件存储**可以跨多个系统提供对共享文件系统的访问。Amazon Elastic File System（Amazon EFS）等文件存储解决方案非常适合大型内容存储库、开发环境、媒体存储或用户主目录等应用场景。Amazon FSx 让您可以经济高效地启动和运行热门文件系统，因此您可以利用应用广泛的开源和商业许可文件系统的丰富功能集和快速性能。

 以下问题主要针对性能效率方面的注意事项。


| PERF 3：如何存储、管理和访问工作负载中的数据？ | 
| --- | 
|  针对某个系统的更高效存储解决方案往往取决于访问操作类型（数据块、文件或对象）、访问模式（随机或连续）、所需吞吐量、访问频率（在线、离线、归档）、更新频率（WORM、动态）以及可用性与持久性限制等因素。架构良好的系统使用多种存储解决方案，并且可以开启各种不同的功能，以便提高性能和高效地使用资源。 | 

# 网络和内容分发
<a name="perf-networking"></a>

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

 在 AWS，网络资源以虚拟化形式存在，而且以多种类型和配置提供。这让您可以更轻松地找到贴合您需求的网络方案。AWS 提供多种产品功能（例如增强联网、Amazon EC2 联网优化实例、Amazon S3 传输加速和动态 Amazon CloudFront）来优化网络流量。AWS 还可以提供多种联网功能（例如 Amazon Route 53 延迟路由、Amazon VPC 端点、AWS Direct Connect 和 AWS Global Accelerator）来减少网络距离或抖动。

 以下问题主要针对性能效率方面的注意事项。


| PERF 4：如何在工作负载中选择和配置网络资源？ | 
| --- | 
|  该问题涵盖在云端设计、配置和运行高效的联网和内容分发解决方案的指导和最佳实践。 | 

# 流程和文化
<a name="perf-process"></a>

 在最初构建工作负载时，您可以采用一些原则和实践，协助您更好地运行高效、高性能的云工作负载。要采用能提高云工作负载性能效率的文化，请考虑以下关键原则和实践。

 要打造这种文化，请考虑以下关键原则：
+  **基础设施即代码：**使用 AWS CloudFormation 模板之类的方法定义您的基础设施即代码。使用模板，您可以将基础设施与应用程序代码和配置一道放入源代码控制中。这让您能够将用于开发软件的实践应用到基础设施，从而能够快速迭代。
+  **部署管道：**使用持续集成/连续部署（CI/CD）管道（例如，源代码存储库、构建系统、部署和测试自动化）来部署基础设施。这让您能够以可重复、一致且低成本的方式进行迭代部署。
+  **明确定义的指标：**设置和监控指标以捕获关键性能指标（KPI）。我们建议您使用技术和业务指标。网站或移动应用程序的关键指标是首个字节捕获时间或渲染时间。其他常规的适用指标包括线程计数、垃圾回收速率以及等待状态。业务指标，如单次请求累计总成本，可以提醒您留意降低成本的方法。仔细考虑解读指标的方式。例如，您可以选择最大值或第 99 个百分位数，而不是平均值。
+  **自动性能测试：**作为部署过程的一部分，在快速运行测试成功通过后自动启动性能测试。自动化应创建新环境、设置初始条件（如测试数据），然后运行一系列基准和负载测试。这些测试的结果应回绑到构建中，以便您可以随着时间推移跟踪性能变化。对于长时间运行的测试，您可以使管道的这一部分与构建的剩余部分异步进行。或者，您也可以使用 Amazon EC2 竞价型实例来通宵运行性能测试。
+  **负载生成：**您应该创建复制综合或预先记录的用户旅程的一系列测试脚本。这些脚本应该是幂等的，而不是耦合，您可能需要包含*预热*脚本以便产生有效结果。测试脚本应尽可能再现生产中的使用行为。您可以使用软件或软件即服务（SaaS）解决方案来生成负载。考虑使用 [AWS Marketplace](https://aws.amazon.com/marketplace/) 解决方案和[竞价型实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-spot-instances.html)：它们是用于生成负载的经济高效的方法。
+  **性能可见性：**关键指标应该对您的团队可见，尤其是针对每个构建版本的指标。这让您能够随着时间推移看到所有重大的正面或负面趋势。您还应展示有关错误或异常数量的指标，确保测试的是正常工作的系统。
+ **可视化：**使用可视化技术，清楚了解出现性能问题、热点、等待状态或低利用率的位置。在架构图上叠加性能指标：调用图表或代码有助于快速发现问题。
+  **定期审核流程：**通常，不存在或不完整的性能审核流程会导致架构性能不佳。如果您的架构性能不佳，请实施性能审核流程，以便推动迭代改进。
+  **持续优化：**采用一种文化，不断优化云工作负载的性能效率。

 以下问题主要针对性能效率方面的注意事项。


| PERF 5：您使用什么流程来提高工作负载的性能效率？  | 
| --- | 
|  在最初构建工作负载时，您可以采用一些原则和实践，协助您更好地运行高效、高性能的云工作负载。要采用能提高云工作负载性能效率的文化，请考虑以下关键原则和实践。 | 