Antipattern: Dağıtılmayan kotayı yapılandırma

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

API proxy isteği, bir veya daha fazla dağıtılmış Edge bileşeni tarafından İleti İşleyenler. API sunmak için yapılandırılmış birden fazla mesaj işleyici varsa Bu durumda kota büyük olasılıkla aşılır. Çünkü Her İleti İşleyen, "count" sayısı kadardır.

Bunu bir örnek yardımıyla açıklayalım. Bir API proxy'si için aşağıdaki Kota politikasının geçerli olduğunu düşünün:

<!-- /antipatterns/examples/1-6.xml -->
<Quota name="CheckTrafficQuota">
  <Interval>1</Interval>
  <TimeUnit>hour</TimeUnit>
  <Allow count="100"/>
</Quota>

Yukarıdaki yapılandırmaya göre kota saatte toplam 100 isteğe izin vermelidir.

Ancak pratikte, API istekleri birden fazla mesaj işleyici tarafından işlendiğinde aşağıdakiler gerçekleşir:

Yukarıdaki örnekte:

  • Kota politikası saatte 100 isteğe izin verecek şekilde yaplandırılmıştır.
  • API Proxy'sine yapılan istekler iki Mesaj İşleyici tarafından işlenmektedir.
  • Her Mesaj İşleyici, işlenen istek sayısını izlemek için kendi kota sayısı değişkenine (quota_count_mp1 ve quota_count_mp2) sahiptir.
  • Bu nedenle, Mesaj İşleyicilerin her biri ayrı şekilde 100 API isteğine izin verir. Sonuç olarak 100 istek yerine toplamda 200 istek işlenir.

Etkisi

Bu durum kota yapılandırmasını etkisiz hale getirir ve istekleri işleyen arka uç sunucuları üzerinde zararlı etkilere neden olabilir.

Arka uç sunucularda:

  • Beklenenden daha yüksek hacimde gelen trafik nedeniyle yoğunluk meydana gelebilir
  • Yeni API isteklerine yanıt verilemeyebilir ve bu da 503 hatalarına yol açar

En İyi Uygulama

Kota politikasında <Distributed> öğesini true şeklinde ayarlayarak API isteklerinin tüm Mesaj İşleyicilerinde ortak bir sayaçla izlenmesini sağlayın. <Distributed> öğesi, aşağıdaki kod snippet'inde gösterildiği gibi ayarlanabilir:

<!-- /antipatterns/examples/1-7.xml -->
<Quota name="CheckTrafficQuota">
  <Interval>1</Interval>
  <TimeUnit>hour</TimeUnit>
  <Distributed>true</Distributed>
  <Allow count="100"/>
</Quota>