Anda dapat mengonfigurasi pembatasan laju untuk menerapkan kontrol yang tepat atas trafik guna mengatasi masalah seperti lonjakan trafik, kelebihan beban layanan, kehabisan sumber daya, dan serangan jahat. Ini melindungi stabilitas layanan backend, mengurangi biaya, dan meningkatkan pengalaman pengguna. Topik ini menjelaskan konsep pembatasan laju, mode pembatasan laju, serta cara kerja pembatasan lokal dan global.
Konsep pembatasan laju
Pembatasan laju adalah mekanisme yang membatasi jumlah permintaan yang dikirim ke layanan. Mekanisme ini menentukan jumlah maksimum permintaan yang dapat dikirim klien ke layanan dalam periode waktu tertentu, misalnya 300 permintaan per menit atau 10 permintaan per detik. Tujuan pembatasan laju adalah untuk mencegah layanan menjadi kelebihan beban akibat menerima terlalu banyak permintaan dari alamat IP klien tertentu atau dari klien global.
Sebagai contoh, jika Anda membatasi jumlah permintaan yang dikirim ke layanan menjadi 300 per menit, permintaan ke-301 akan ditolak. Pada saat yang sama, kode status HTTP 429 yang menunjukkan terlalu banyak permintaan akan dikembalikan.
Mode pembatasan laju
Proxy Envoy mengimplementasikan pembatasan laju dalam dua mode: pembatasan lokal dan pembatasan global. Pembatasan lokal digunakan untuk membatasi laju permintaan setiap instance layanan. Pembatasan global menggunakan layanan gRPC global untuk menyediakan pembatasan bagi seluruh instance Service Mesh (ASM). Kedua mode ini dapat digunakan bersama untuk memberikan tingkat pembatasan yang berbeda.
Mode | Deskripsi | Referensi |
Pembatasan lokal |
| |
Pembatasan global atau terdistribusi |
|
Cara kerja pembatasan lokal
Proxy Envoy menggunakan algoritma token bucket untuk mengimplementasikan pembatasan lokal. Algoritma token bucket adalah metode yang membatasi jumlah permintaan yang dikirim ke layanan berdasarkan sejumlah token dalam sebuah bucket. Token diisi ke bucket pada laju konstan. Ketika permintaan dikirim ke layanan, token dihapus dari bucket. Jika bucket kosong, permintaan ditolak. Secara umum, Anda perlu menentukan parameter berikut:
Interval pengisian bucket
Jumlah token yang ditambahkan ke bucket pada setiap interval
Secara default, proxy Envoy mengembalikan kode status HTTP 429 ketika permintaan ditolak dan header respons x-envoy-ratelimited diatur. Anda dapat menyesuaikan kode status HTTP dan header respons.
Perhatikan konsep berikut ketika menggunakan fitur pembatasan laju:
http_filter_enabled: Menunjukkan persentase permintaan yang batas lajunya diperiksa tetapi tidak diberlakukan.
http_filter_enforcing: Menunjukkan persentase permintaan yang batas lajunya diterapkan atau diberlakukan.
Atur nilai ke persentase. Sebagai contoh, Anda dapat mengatur http_filter_enabled menjadi 10% dari permintaan dan http_filter_enforcing menjadi 5% dari permintaan. Dengan cara ini, Anda dapat menguji efek pembatasan sebelum diterapkan ke semua permintaan.
Cara kerja pembatasan global
Pembatasan global Envoy adalah mekanisme yang digunakan untuk mengontrol laju permintaan dalam instance ASM. Ini diimplementasikan berdasarkan layanan batas laju Envoy. Layanan batas laju memproses trafik seluruh instance ASM secara terpusat dan membatasi laju permintaan berdasarkan aturan dan kuota yang telah ditentukan.
Konfigurasi pembatasan global melibatkan dua bagian: filter rate_limits Envoy dan konfigurasi layanan batas laju.
Filter rate_limits berisi daftar
actions. Proxy Envoy mencoba mencocokkan setiap permintaan dengan setiap tindakan dalam filter rate_limits. Deskriptor dihasilkan untuk setiap tindakan. Deskriptor terdiri dari serangkaian entri deskriptor yang sesuai dengan suatu tindakan. Setiap entri deskriptor adalah pasangan kunci-nilai, seperti"descriptor-key-1": "descriptor-value-1"dan"descriptor-key-2": "descriptor-value-2". Untuk informasi lebih lanjut, lihat config-http-filters-rate-limit.Konfigurasi layanan batas laju dicocokkan dengan entri deskriptor yang dihasilkan untuk setiap permintaan. Konfigurasi layanan batas laju menentukan batas laju untuk serangkaian entri deskriptor tertentu. Layanan batas laju berinteraksi dengan cache Redis untuk menentukan apakah akan membatasi laju permintaan dan mengirimkan keputusan pembatasan ke proxy Envoy.
Pembatasan global dapat diimplementasikan dengan menggabungkan filter rate_limits dan konfigurasi layanan batas laju. Filter rate_limits menghasilkan deskriptor berdasarkan tindakan yang dikonfigurasikan dan mengirim deskriptor ke layanan batas laju. Layanan batas laju menentukan batas tertentu berdasarkan informasi dalam deskriptor dan mengembalikan respons pembatasan. Mekanisme ini memungkinkan Anda mengontrol sepenuhnya laju permintaan dan melindungi layanan backend dari lonjakan permintaan.