

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 处理 AWS Cloud Map DiscoverInstances API 请求限制
<a name="throttling"></a>

AWS Cloud Map 按区域限制每个 AWS 账户的 [DiscoverInstances](https://docs.aws.amazon.com/cloud-map/latest/api/API_DiscoverInstances.html)API 请求。Throttling 有助于提高服务的性能，并有助于为所有 AWS Cloud Map 客户提供公平使用服务。限制可确保对 AWS Cloud Map [DiscoverInstances](https://docs.aws.amazon.com/cloud-map/latest/api/API_DiscoverInstances.html)API 的调用不会超过允许的最大 [DiscoverInstances](https://docs.aws.amazon.com/cloud-map/latest/api/API_DiscoverInstances.html)API 请求配额。 [DiscoverInstances](https://docs.aws.amazon.com/cloud-map/latest/api/API_DiscoverInstances.html)来自以下任何来源的 API 调用均受请求配额的限制：
+ 第三方应用程序
+ 命令行工具
+ 控制 AWS Cloud Map 台

如果您超过 API 节流配额，则会收到`RequestLimitExceeded`错误代码。有关更多信息，请参阅 [请求速率限制](#throttling-rate-based)。

## 如何应用节流
<a name="throttling-how"></a>

AWS Cloud Map 使用令[牌桶算法](https://en.wikipedia.org/wiki/Token_bucket)实现 API 限制。使用此算法，您的账户拥有一个持有特定数量的*令牌*的*存储桶*。存储桶中的令牌数表示您在任何给定秒钟的节流配额。单个区域有一个存储桶，它适用于该区域的所有端点。

### 请求速率限制
<a name="throttling-rate-based"></a>

限流限制了您可以发出的 [DiscoverInstances](https://docs.aws.amazon.com/cloud-map/latest/api/API_DiscoverInstances.html)API 请求的数量。每个请求都会从存储桶中删除一个令牌。例如，[DiscoverInstances](https://docs.aws.amazon.com/cloud-map/latest/api/API_DiscoverInstances.html)API 操作的存储桶大小为 2,000 个令牌，因此您最多可以在一秒钟内发出 2,000 个[DiscoverInstances](https://docs.aws.amazon.com/cloud-map/latest/api/API_DiscoverInstances.html)请求。如果您在一秒钟内超过 2,000 个请求，则会被节流，而该秒内剩余的请求将失败。

存储桶会以设定的速率自动填充。如果存储桶容量不足，则每秒添加一定数量的令牌，直到存储桶达到容量。如果重填令牌到达时存储桶已满，这些令牌将被丢弃。[DiscoverInstances](https://docs.aws.amazon.com/cloud-map/latest/api/API_DiscoverInstances.html)API 操作的存储桶大小为 2,000 个令牌，充值速率为每秒 1,000 个令牌。如果您在一秒钟内发[DiscoverInstances](https://docs.aws.amazon.com/cloud-map/latest/api/API_DiscoverInstances.html)出 2,000 个 API 请求，则存储桶会立即减少为零 (0) 个令牌。然后，该存储桶每秒最多可重填 1,000 个令牌，直至达到其 2,000 个令牌的最大容量。

您可以在令牌被添加到存储桶时使用这些令牌。在发出 API 请求之前，您无需等待存储桶达到最大容量。如果您在一秒钟内发出 2,000 个 [DiscoverInstances](https://docs.aws.amazon.com/cloud-map/latest/api/API_DiscoverInstances.html)API 请求来耗尽存储桶，那么在此之后您仍然可以根据需要每秒发出 1,000 个 [DiscoverInstances](https://docs.aws.amazon.com/cloud-map/latest/api/API_DiscoverInstances.html)API 请求。这意味着当重填令牌被添加到存储桶时，您可以立即使用这些令牌。只有当您每秒发出的 API 请求数少于重填速率时，存储桶才会开始重填到最大容量。

### 重试或批处理
<a name="retries"></a>

如果 API 请求失败，您的应用程序可能需要重试该请求。要减少 API 请求数，请在连续的请求之间添加相应的睡眠间隔。为了获得最佳的效果，请使用递增或可变的睡眠间隔。

### 计算睡眠间隔
<a name="calculate_delay_interval"></a>

在需要轮询或重试 API 请求时，我们建议您使用指数回退算法计算 API 调用之间的睡眠间隔。通过在两次重试之间逐渐延长连续错误响应的等待时间，您可以减少失败请求的数量。有关此算法的更多信息和实现示例，请参阅《*AWS SDKs 和工具参考指南》*中的 “[重试行为](https://docs.aws.amazon.com/sdkref/latest/guide/feature-retry-behavior.html)”。

## 调整 API 节流配额
<a name="throttling-increase"></a>

您可以申请增加账户的 API 限制配 AWS 额。要请求配额调整，请联系 [AWS 支持 中心](https://console.aws.amazon.com/support/home#/)。