

# SUS02-BP06 实施缓冲和节流以展平需求曲线
<a name="sus_sus_user_a7"></a>

缓冲和节流可展平需求曲线，并降低工作负载所需的预置容量。

 **常见反模式：**
+ 在不需要的时候立即处理客户端请求。
+ 没有分析客户端请求的要求。

 **建立此最佳实践的好处：**拉平需求曲线可以减少工作负载所需的预置容量。降低预置容量即可减少能源消耗和减少对环境的影响。

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

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

 展平工作负载需求曲线有助于降低工作负载的预置容量和减少对环境的影响。假设工作负载的需求曲线如下图所示。此工作负载有两个峰值，为了处理这些峰值，如橙色线所示预置资源容量。因为需要预置容量来处理这两个峰值，所以此工作负载所使用的资源和能量不是由需求曲线下的区域表示，而是由预置容量线下面的区域表示。

![\[预置容量波形，有两个不同的峰值，需要高预置容量。\]](http://docs.aws.amazon.com/zh_cn/wellarchitected/latest/framework/images/provisioned-capacity-1.png)


 

 您可以使用缓冲和节流来修改需求曲线和弄平峰值，这意味着可以减少预置容量和消耗的能量。在客户端可以执行重试时实施节流。实施缓冲以存储请求并将处理任务往后推迟一段时间。

![\[波形图显示了使用缓冲或节流创建的平滑峰值的工作负载。\]](http://docs.aws.amazon.com/zh_cn/wellarchitected/latest/framework/images/provisioned-capacity-2.png)


 

 **实施步骤** 
+  分析客户端请求以确定如何对它们作出响应。要考虑的问题包括：
  +  是否可以异步处理此请求？ 
  +  客户端是否具有重试能力？ 
+  如果客户端有重试能力，则您可以实施节流，它会告诉需求源，如果当前无法处理请求，则应稍后再试。
  +  可以使用 [Amazon API Gateway](https://aws.amazon.com/api-gateway/) 实施节流。
+  对于无法执行重试的客户端，则需要实施缓冲以展平需求曲线。缓冲会延迟请求处理，从而让以不同速率运行的应用程序可以有效通信。基于缓冲的方法使用队列或流来接受来自生产方的消息。然后消息将由使用器读取并处理，这样消息就能够以满足使用器业务要求的速率运行。
  +  [Amazon Simple Queue Service（Amazon SQS）](https://aws.amazon.com/sqs/)是一项托管式服务，提供允许单个使用方读取单个消息的队列。
  +  [Amazon Kinesis](https://aws.amazon.com/kinesis/) 提供允许众多使用器读取相同消息的流。
+  分析总体需求、变化率和所需的响应时间，以使所需节流或缓冲的大小适宜。

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

 **相关文档：**
+ [Getting started with Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-getting-started.html)
+ [Application integration Using Queues and Messages](https://aws.amazon.com/blogs/architecture/application-integration-using-queues-and-messages/)
+ [Managing and monitoring API throttling in your workloads](https://aws.amazon.com/blogs/mt/managing-monitoring-api-throttling-in-workloads/)
+ [Throttling a tiered, multi-tenant REST API at scale using API Gateway](https://aws.amazon.com/blogs/architecture/throttling-a-tiered-multi-tenant-rest-api-at-scale-using-api-gateway-part-1/)
+ [Application integration Using Queues and Messages](https://aws.amazon.com/blogs/architecture/application-integration-using-queues-and-messages/)

 **相关视频：**
+ [AWS re:Invent 2022 - Application integration patterns for microservices ](https://www.youtube.com/watch?v=GoBOivyE7PY)
+ [AWS re:Invent 2023 - Smart savings: Amazon EC2 cost-optimization strategies ](https://www.youtube.com/watch?v=_AHPbxzIGV0)
+ [AWS re:Invent 2023 - Advanced integration patterns & trade-offs for loosely coupled systems](https://www.youtube.com/watch?v=FGKGdUiZKto)