2

当我将如下粘贴的尖峰抑制策略添加到我的 Apigee API 时,它是否会计算从该客户端 IP 到 Apigee 的所有 API 调用,以计算是否超出限制?或者它是否单独维护每个 API 的计数并应用每个 API/API 包的策略?

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<SpikeArrest enabled="true" continueOnError="true" async="false" name="SpikeArrestCheck">
    <DisplayName>Spike Arrest Policy</DisplayName>
    <FaultRules/>
    <Properties/>
    <Identifier ref="proxy.client.ip"/>
    <Rate>100ps</Rate>
</SpikeArrest>
4

4 回答 4

3

当我将如下粘贴的尖峰抑制策略添加到我的 Apigee API 时,它是否会计算从该客户端 IP 到 Apigee 的所有 API 调用,以计算是否超出限制?或者它是否单独维护每个 API 的计数并应用每个 API/API 包的策略?

每个 API 包、每个策略名称(org 和 env 是给定的)维护计数。即使您在捆绑包中使用相同的标识符,也无法将不同的 API 捆绑包尖峰逮捕联系在一起。

我已经使用 SpikeArrest 策略对此进行了测试,并观察了ratelimit.<spike arrest policy name>.used.count跨 2 个不同 API 包测试的值,这两个策略具有相同的名称和相同的标识符。 2个桶/计数器被独立处理

于 2014-02-12T01:36:09.500 回答
2

最佳实践的一些观察:

理想情况下,您应该基于静态密钥跟踪对 API 的流量访问,而不管来源。使用 IP 地址给消费者应用留下了过于宽泛的空间,因此 Spike Arrest 策略永远不会触发,因为每个移动设备都将分配有不同的 IP 地址。因此,作为最佳实践,要么在验证令牌后通过 OAuthV2 策略检索消费者密钥,要么在请求中提供密钥时直接检索消费者密钥。该规则的例外是 API 对消费者应用程序不可公开访问,在这种情况下,仅向应用程序服务器提供访问权限,无论如何您可能希望管理实施密钥验证的流量。

于 2014-02-06T22:07:44.910 回答
2

您可以像这样设置尖峰逮捕标识符:

<SpikeArrest name="SpikeArrest">
    <Rate>10ps</Rate>
    <Identifier ref="someVariable" />
</SpikeArrest>

上述秒杀策略的范围仅限于当前的组织、环境、捆绑包和策略名称。通过不同的策略、捆绑包、环境或组织传输的任何流量都不会影响上述策略的尖峰抑制。此外,由于指定了标识符,因此只有“someVariable”中存储的具有相同值的流量才会被一起“计数”。如果策略没有指定标识符,则同一策略、捆绑包、环境和组织的所有流量将一起计算。

请注意,每个消息处理器单独跟踪尖峰逮捕。它们目前也被实现为速率限制,而不是计数。如果您指定每秒 100 个,则意味着您的请求每 10 毫秒(1/100 秒)只能进入一个。同一消息处理器上 10 毫秒内的第二个请求将被拒绝。一般不建议使用少量。即使数量很大,如果两个请求几乎同时进入同一个消息处理器,一个也会被拒绝。

于 2014-02-06T21:37:22.090 回答
1

计数器“桶”由您使用Identifier的方式决定。如果您不指定Identifier,则存储桶是整个 API 代理。或者您可以使用Identifier Ref来制作更精细的存储桶。例如,如果您想让存储桶针对每个开发人员(假设您之前执行过 VerifyApiKey 或 VerifyAccessToken),您可以这样做:

<Identifier ref="client_id" />.  

如果您愿意,您可以通过执行以下操作将存储桶设置为基于 IP 地址:

<Identifier ref="client.ip"/>

所以你这样做的方式是每个客户端的ip。

于 2014-02-06T21:33:26.497 回答