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

Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin.
bilgi

Apigee Edge, Kota politikasını kullanarak belirli bir süre boyunca bir API Proxy'sine izin verilen istek sayısını yapılandırmanıza olanak tanır.

Antipattern

Bir API proxy isteği, Mesaj İşleyicileri adı verilen bir veya daha fazla dağıtılmış Edge bileşeni tarafından sunulabilir. API isteklerini sunmak için yapılandırılmış birden fazla Mesaj İşleyici varsa kota büyük olasılıkla aşılır. Bunun nedeni, Mesaj İşleyicilerin her birinin işlediği isteklerin kendi "sayısını" tutmasıdı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 çizimde:

  • 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>