Antipola: Mengonfigurasi kuota yang tidak terdistribusi

Anda sedang melihat dokumentasi Apigee dan Apigee hybrid.
Lihat dokumentasi Apigee Edge.

Apigee menyediakan kemampuan untuk mengonfigurasi jumlah permintaan yang diizinkan ke Proxy API selama periode waktu tertentu menggunakan Kebijakan kuota.

Antipola

Permintaan proxy API dapat ditayangkan oleh satu atau beberapa komponen Apigee terdistribusi yang disebut Pemroses Pesan. Jika ada beberapa Message Processor yang dikonfigurasi untuk menayangkan permintaan API, kuota kemungkinan akan terlampaui karena setiap Message Processor menyimpan "jumlah" permintaan yang diprosesnya.

Mari kita jelaskan dengan bantuan contoh. Pertimbangkan Kebijakan kuota berikut untuk proxy API:

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

Konfigurasi di atas akan mengizinkan total 100 permintaan per jam.

Namun, dalam praktiknya, saat beberapa pemroses pesan menayangkan permintaan API, hal berikut akan terjadi:

Ditentukan Nanti

Dalam ilustrasi di atas:

  • Kebijakan kuota dikonfigurasi untuk mengizinkan 100 permintaan per jam.
  • Permintaan ke API Proxy ditayangkan oleh dua Message Processor.
  • Setiap Message Processor mempertahankan variabel jumlah kuotanya sendiri, quota_count_mp1 dan quota_count_mp2, untuk melacak jumlah permintaan yang diprosesnya.
  • Oleh karena itu, setiap Pemroses Pesan akan mengizinkan 100 permintaan API secara terpisah. Efek bersihnya adalah total 200 permintaan diproses, bukan 100 permintaan.

Dampak

Situasi ini bertentangan dengan tujuan konfigurasi kuota dan dapat memiliki efek yang merugikan pada server backend yang menayangkan permintaan.

Server backend dapat:

  • Terbebani karena traffic masuk yang lebih tinggi dari yang diperkirakan
  • Tidak merespons permintaan API yang lebih baru sehingga menyebabkan error 503

Praktik Terbaik

Pertimbangkan untuk menetapkan elemen <Distributed> ke true di Kebijakan kuota untuk memastikan penghitung umum digunakan untuk melacak permintaan API di semua Pemroses Pesan. Elemen <Distributed> dapat ditetapkan seperti yang ditunjukkan dalam cuplikan kode di bawah:

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