2014-04-30 51 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