Apigee Edge belgelerini görüntülüyorsunuz.
.
Git:
Apigee X belgeleri. bilgi
Apigee Edge, aşağıdaki işlemler için API Proxy'sine izin verilen istek sayısını yapılandırmanıza olanak tanır: Kota politikası kullanılarak belirli bir süre boyunca kullanılabilir.
Antipattern
Yeniden kullanılan Kota politikası her yürütüldüğünde, kullanıldığı alandan bağımsız olarak kota sayacında düşüşe neden olur. Bu durum Kota politikası aşağıdaki alanlarda yeniden kullanılırsa geçerlidir:
- Bir API Proxy'sinin aynı veya farklı akışlarında
- Bir API Proxy'sinin farklı hedef uç noktalarında
Kota politikası her yürütüldüğünde kota sayacı azalır ve kota ihlali hatalarını, belirtilen zaman aralığı için beklenenden çok daha erken alırız.
Bunun işleyiş şeklini açıklamak için aşağıdaki örneği kullanalım.
API Proxy'si
Trafiği iki sunucuya yönlendiren "TestTargetServerQuota" adlı bir API Proxy'mizin olduğunu varsayalım. kaynak yoluna göre farklı hedef sunucular belirleyin. API trafiğini bu hedef sunucuların her biri için dakikada 10 istekle sınırlandırmak istiyoruz. Bunu gösteren tablo senaryo:
Kaynak Yolu | Hedef Sunucu | Kota |
---|---|---|
/target-us |
target-US.somedomain.com |
Dakikada 10 istek |
/target-eu |
target-EU.somedomain.com |
Dakikada 10 istek |
Kota politikası
Trafik kotası her iki hedef sunucu için de aynı olduğundan tek bir Kota politikası tanımlıyoruz. aşağıdaki gibi “Quota-Minute-Target-Server” adını görürsünüz:
<!-- /antipatterns/examples/1-8.xml --> <Quota name="Quota-Minute-Target-Server"> <Interval>1</Interval> <TimeUnit>minute</TimeUnit> <Distributed>true</Distributed> <Allow count="10"/> </Quota>
Hedef uç noktaları
Hedef uç noktanın ön akışında Kota politikasını "Quota-Minute-Target-Server" şeklinde kullanalım. "Target-US":
<!-- /antipatterns/examples/1-9.xml --> <TargetEndpoint name="Target-US"> <PreFlow name="PreFlow"> <Request> <Step> <Name>Quota-Minute-Target-Server</Name> </Step> </Request> </PreFlow> <HTTPTargetConnection> <URL>http://target-us.somedomain.com</URL> </HTTPTargetConnection> </TargetEndpoint>
Ayrıca, "Quota-Minute-Target-Server" adlı kota politikasını diğer hedefin ön akışında yeniden kullanın. "Target-EU" uç noktası da içerir:
<!-- /antipatterns/examples/1-10.xml --> <TargetEndpoint name="Target-EU"> <PreFlow name="PreFlow"> <Request> <Step> <Name>Quota-Minute-Target-Server</Name> </Step> </Request> <Response/> </PreFlow> <HTTPTargetConnection> <URL>http://target-us.somedomain.com</URL> </HTTPTargetConnection> </TargetEndpoint>
Gelen trafik kalıbı
Bu API Proxy'si için, ilk 30 saniye içinde toplam 10 API isteği aldığımızı varsayalım. şu kalıbı kullanın:
Kaynak Yolu | /target-us |
/target-eu |
Tümü |
---|---|---|---|
İstek Sayısı | 4 | 6 | 10 |
Biraz sonra, kaynak yolunun /target-us
olduğu 11. API isteğini alıyoruz.
32 saniye sonra olduğunu varsayalım.
target-us
hedef uç noktası için kota sınırları dahilinde 6 API isteğimizin daha olduğunu varsayıp isteğin başarılı bir şekilde işlenmesini bekliyoruz.
Ancak, işlemin devamında bir Quota violation error
hatası alıyoruz.
Neden: Hedef uç noktalarında aynı Kota politikasını kullandığımızdan, her iki hedef uç noktaya ulaşan API isteklerini izlemek için tek bir kota sayacı kullanıldı. Bu nedenle, dakikada 10 isteğe izin veren kotayı ayrı hedef uç noktaları yerine her iki hedef uç noktası için de kullanarak tükettik.
Etkiler
Bu antipattern, kota sınırlarının olması gerekenden daha erken aşıldığı algısı oluşturarak beklentilerin karşılanmamasına neden olabilir.
En iyi uygulama
- Tek bir Kota politikası tanımlayarak birden fazla benzersiz sayacın sağlanması için
<Class>
veya<Identifier>
öğelerini kullanın. Kota politikasını yeniden tanımlayalım. Önceki bölümde başlıktaki başlığı kullanarak açıkladığımız "Quota-Minute-Target-Server" Aşağıda gösterildiği gibi,<Identifier>
olaraktarget_id
:<!-- /antipatterns/examples/1-11.xml --> <Quota name="Quota-Minute-Target-Server"> <Interval>1</Interval> <TimeUnit>minute</TimeUnit> <Allow count="10"/> <Identifier ref="request.header.target_id"/> <Distributed>true</Distributed> </Quota>
- Bu Kota politikasını hem "Target-US" hem de hedef uç noktalarında kullanmaya devam edeceğiz. "Target-EU" olarak ayarlayın.
- Şimdi de
target_id
başlığının değeri "US" ise isteklerin "Target-US" hedef uç noktası. - Benzer şekilde,
target_id
başlığında "EU" değeri varsa istekler hedefe yönlendirilir "Target-EU" uç noktası. - Böylece her iki hedef uç noktasında da aynı Kota politikasını kullansak bile
<Identifier>
değerine göre ayrı kota sayaçları sağlanır. - Bu nedenle,
<Identifier>
öğesini kullanarak hedef uç noktalarının her birinin izin verilen 10 isteklik kotayı almasını sağlayabiliriz.
- İzin verilen API isteği sayısını tutarlı olarak almak için akışların/hedef uç noktalarının/API Proxy'lerinin her birinde ayrı Kota politikaları kullanın. Şimdi Google Ads API'sinde kullanılan
10 isteklik izin verilen kotaya nasıl ulaşabileceğimizi görmek için yukarıdaki bölüme bakın.
uç noktalar.
- Her biri "Target-US" ve hedef uç noktaları için birer tane olmak üzere ayrı Kota politikaları tanımlayın.
"Hedef AB"
"Target-US" Hedef Uç Noktası için Kota politikası:
<!-- /antipatterns/examples/1-12.xml --> <Quota name="Quota-Minute-Target-Server-US"> <Interval>1</Interval> <TimeUnit>minute</TimeUnit> <Distributed>true</Distributed> <Allow count="10"/> </Quota>
"Target-EU" Hedef Uç Noktası için Kota politikası:
<!-- /antipatterns/examples/1-13.xml --> <Quota name="Quota-Minute-Target-Server-EU"> <Interval>1</Interval> <TimeUnit>minute</TimeUnit> <Distributed>true</Distributed> <Allow count="10"/> </Quota>
- Hedef uç noktalarının tanımına ilişkin kota politikasını aşağıda gösterildiği gibi kullanın:
Hedef Uç Noktası "Target-US":
<!-- /antipatterns/examples/1-14.xml --> <TargetEndpoint name="Target-US"> <PreFlow name="PreFlow"> <Request> <Step> <Name>Quota-Minute-Target-Server-US</Name> </Step> </Request> <Response/> </PreFlow> <HTTPTargetConnection> <URL>http://target-us.somedomain.com</URL> </HTTPTargetConnection> </TargetEndpoint>
"Target-EU" Hedef Uç Noktası:
<!-- /antipatterns/examples/1-15.xml --> <TargetEndpoint name="Target-EU"> <PreFlow name="PreFlow"> <Request> <Step> <Name>Quota-Minute-Target-Server-EU</Name> </Step> </Request> <Response/> </PreFlow> <HTTPTargetConnection> <URL>http://target-eu.somedomain.com</URL> </HTTPTargetConnection> </TargetEndpoint>
- "Target-US" ve "Target-EU" bir sayaç ayrı bir sayaç olacaktır. Bu, hedef uç noktaların her biri için dakikada 10 API isteğine izin veren kotayı alabilmemizi sağlar.
- Her biri "Target-US" ve hedef uç noktaları için birer tane olmak üzere ayrı Kota politikaları tanımlayın.
"Hedef AB"
- Birden fazla benzersiz sayacın sağlandığından emin olmak için
<Class>
veya<Identifier>
öğelerini kullanın.