2014-04-30 42 views
0

我们的组织是在迁移到Apigee的过程。Apigee节流方案

我们要实现什么是以下情形。你能告诉我怎么做吗? 也许一起使用SpikeArrest,Quota和ConcurrentRatelimit?

我想问一个代理的实际例子配置,引导线如何链接的政策,以达到预期的效果。

我经历过的文档,并在一定程度上脱脂,有差距,至于什么是分布式的,什么不是,等

http://apigee.com/docs/api-services/content/shield-apis-using-spikearrest 
http://apigee.com/docs/api-services/content/rate-limit-api-traffic-using-quota#identifying-apps 
http://apigee.com/docs/api-services/content/throttle-backend-connections-using-concurrentratelimit 

一个例子差距是我以前的约SpikeArrest,其中的问题唤起如配置SpikeArrest并没有得到预期的行为,因为,在载文它不是指定SpikeArrests未分配的事实的结果: Apigee SpikeArrest Sync Across MessageProcessors (MPs)

这些人也受到了相同的情况下抓出来: Apigee - SpikeArrest behavior

方案和期望的结果:

在我们的组织,我们有6 MessageProcessors(MP),我以为他们是在严格的循环方式工作。

我们有以下后端API - API-1

Api-1从我们公司内部的Apigee消费者那里获得消费者。 我们想要阻止我们的Api-1受到打击并且正在关闭。 可以说它已经被加载测试,每秒最多需要50个请求。 我们的计算,通过Apigee我们要以最大每秒30所要求的限制,每秒能力等20个请求是针对用户从我们的组织(主要是我们自己的其他产品)不经过内Apigee。

从通过Apigee使用Api-1的DeveloperApp数量来看,我们确定了4个应用/客户端,它们的消费峰值最高。 走出30PS率分配给Apigee的,我们希望能够能够分配5马力为这些4高消费 DevApps /客户端,并有其余10马力率之间共享其他DevApps /客户。

主要的问题我一直在TargetEndpoint得到的是这里所描述的一个,因为SpikeArrest政策不能跨MessageProcessors分布:Apigee SpikeArrest Sync Across MessageProcessors (MPs)

我们怎样才能解决,并达到所需的方案?

这里是什么,我曾试图尝试,并达到预期的行为的例子:

TargetEndpoint代理的:

ConcurrentRatelimit:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<ConcurrentRatelimit async="true" continueOnError="false" enabled="true" name="Concurrent-Rate-Limit-1"> 
    <DisplayName>Concurrent Rate Limit 1</DisplayName> 
    <AllowConnections count="1" ttl="5"/> 
    <Distributed>true</Distributed> 
    <TargetIdentifier name="default"></TargetIdentifier> 
</ConcurrentRatelimit> 

SpikeArrest :

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<SpikeArrest async="true" continueOnError="false" enabled="true" name="Spike-Arrest-2"> 
    <DisplayName>Spike Arrest 2</DisplayName> 
    <FaultRules/> 
    <Properties/> 
    <Identifier ref="request.header.some-header-name"/> 
    <MessageWeight ref="request.header.weight"/> 
    <Rate>30ps</Rate> 
</SpikeArrest> 

另外如果组织在不知情的情况下添加或删除MP会发生什么情况,这会完全扰乱节流?

非常感谢!

谢谢!

+0

您是否尝试过将其除以已知消息处理器的数量?也就是说,如果你有 –

+0

那是我目前的解决方案。目前我的秒杀被设定为5ps(30ps/6mp = 5ps)。我正在寻找一个更好的解决方案,就好像出于任何原因,数字需要变得非常低,据我所知,你不能在SpikeArrest上放置0.5ps的速率。 – AKuzma

回答

0

MP间同步峰值捕捉的问题在于,您已经处于严重负载(理论上)并且在高负载之间在MP之间创建额外的颤音可能会影响您用于防止高负载的工具。

因此,您在每秒限制中的唯一选项是执行数学运算并除以MP。对于几分钟或更长时间,您可以执行不带标识符的配额策略,并分配并同步打开。

+0

我的确有配额政策。 ConcurrentRateLimit在上述场景中是否可以提供帮助?它是如何工作的?它究竟做了什么?在文档中提到:“ConcurrentRatelimit策略使您能够限制来自在Apigee Edge上运行的API代理的入站连接到后端服务。在分布式环境中,应用流量可以由许多复制的API代理进行管理。” http://apigee.com/docs/api-services/content/throttle-backend-connections-using-concurrentratelimit – AKuzma

+0

此外,配额策略似乎分布在消息处理器中,它似乎不是“MP之间的额外喋喋不休”,所以我不明白为什么SpikeArrest策略不以同样的方式同步? 如果由于任何原因,MP的数量在我不知情的情况下发生变化,这将会扰乱节流并导致我试图保护的API不受该场景的影响。防范DOS攻击和遏制是我的团队的主要担忧,如果这样做效果不好,它会使Apigee对我们无用。 – AKuzma