全部产品
Search
文档中心

Alibaba Cloud Service Mesh:Pembatasan Laju

更新时间:Jul 02, 2025

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 lokal dikonfigurasikan berdasarkan proses Envoy. Proses Envoy adalah pod di mana proxy Envoy disuntikkan. Konfigurasi pembatasan lokal lebih sederhana daripada pembatasan global dan tidak memerlukan komponen tambahan. Jika Anda mengonfigurasi pembatasan lokal dan global untuk instance ASM, batas laju lokal diterapkan terlebih dahulu. Jika batas laju lokal belum tercapai, batas laju global diterapkan. Contoh:

    • Misalkan pembatasan lokal membatasi jumlah permintaan dari klien tertentu menjadi 50 per menit sedangkan batas pembatasan global adalah 60 permintaan per menit. Ketika jumlah permintaan dari klien melebihi 50, permintaan tambahan ditolak meskipun jumlah permintaan belum mencapai batas pembatasan global.

    • Misalkan pembatasan lokal membatasi jumlah permintaan dari klien tertentu menjadi 50 per menit, dan batas pembatasan global adalah 40 permintaan per menit. Ketika jumlah permintaan dari klien melebihi 40, permintaan tambahan ditolak karena pembatasan global, meskipun jumlah permintaan belum mencapai batas pembatasan lokal.

  • Jika pod tempat batas pembatasan lokal dikonfigurasikan memiliki beberapa replika, masing-masing replika tersebut memiliki batasnya sendiri. Artinya, permintaan mungkin dibatasi pada satu replika tetapi tidak dibatasi pada replika lain.

Konfigurasikan pembatasan lokal di Pusat Manajemen Trafik

Pembatasan global atau terdistribusi

  • Pembatasan global membatasi jumlah permintaan yang dikirim ke beberapa layanan. Dalam mode ini, semua layanan dalam kluster berbagi konfigurasi pembatasan. Secara umum, pembatasan global memerlukan komponen eksternal, seperti database Redis.

  • Pembatasan global biasanya digunakan dalam skenario di mana banyak klien mengirim permintaan ke sejumlah kecil layanan. Dalam hal ini, permintaan tersebut dapat mengganggu layanan. Pembatasan global dapat membantu mencegah kegagalan berantai. Sebagai contoh, Anda dapat mengonfigurasi pembatasan global pada gateway ingress untuk membatasi jumlah total permintaan yang dikirim ke instance ASM. Kemudian, Anda dapat mengonfigurasi pembatasan lokal untuk membatasi jumlah permintaan yang dikirim ke layanan tertentu dalam instance ASM.

Gunakan ASMGlobalRateLimiter untuk mengonfigurasi pembatasan global untuk trafik arah masuk yang diarahkan ke layanan ke dalam proxy sidecar disuntikkan

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.