All Products
Search
Document Center

Alibaba Cloud Service Mesh:Deskripsi bidang RateLimitingPolicy

Last Updated:Jul 02, 2025

RateLimitingPolicy memungkinkan Anda menetapkan kebijakan dalam suite penjadwalan lalu lintas Service Mesh (ASM). Anda dapat mengonfigurasi pembatasan secara deklaratif untuk lalu lintas global layanan di instance ASM. Topik ini menjelaskan bidang-bidang RateLimitingPolicy.

Contoh

Konfigurasi berikut menunjukkan bahwa pembatasan diterapkan pada layanan HTTPBin dalam kluster Kubernetes. Ember token yang digunakan untuk pembatasan diisi dengan dua token setiap 30 detik, artinya dua permintaan diperbolehkan setiap 30 detik. Jumlah maksimum token dalam ember adalah dua, yang menunjukkan bahwa lalu lintas burst tidak diperbolehkan. Permintaan dikelompokkan berdasarkan header permintaan user_id. Sistem menentukan apakah akan melakukan pembatasan pada permintaan dengan header permintaan user_id yang berbeda secara terpisah, dan permintaan dengan header user_id yang berbeda mengonsumsi token dari ember token mereka masing-masing.

apiVersion: istio.alibabacloud.com/v1
kind: RateLimitingPolicy
metadata:
  name: ratelimit
  namespace: istio-system
spec:
  rate_limiter:
    bucket_capacity: 2
    fill_amount: 2
    parameters:
      interval: 30s
      limit_by_label_key: http.request.header.user_id
    selectors:
    - agent_group: default
      control_point: ingress
      service: httpbin.default.svc.cluster.local

Deskripsi bidang RateLimitingPolicy

RateLimitingPolicy mendefinisikan kebijakan pembatasan global dalam suite penjadwalan lalu lintas ASM. Ini menentukan layanan tempat pembatasan berlaku, parameter waktu proses dari kebijakan pembatasan, serta atribut ember token yang digunakan untuk pembatasan.

RateLimitingPolicySpec

RateLimitingPolicySpec adalah konfigurasi inti dari RateLimitingPolicy dan sesuai dengan bidang spec.

Bidang

Tipe

Diperlukan

Deskripsi

rate_limiter

RateLimiter

Ya

Konfigurasi limiter yang mengeksekusi kebijakan pembatasan.

RateLimiter

RateLimiter menentukan parameter limiter dan ember token yang digunakan oleh limiter.

Bidang

Tipe

Diperlukan

Deskripsi

fill_amount

double

Ya

Jumlah token yang diisi ke dalam ember token setiap kali. Bidang ini dapat digunakan bersama dengan bidang interval dalam RateLimiterParameters untuk menerapkan pembatasan pada permintaan.

bucket_capacity

double

Ya

Kapasitas maksimum ember token yang digunakan oleh limiter. Ketika laju permintaan lebih rendah daripada laju pengisian ember token, jumlah token dalam ember token akan terus bertambah hingga mencapai kapasitas maksimum bucket_capacity. bucket_capacity dapat digunakan untuk mengizinkan tingkat tertentu dari lalu lintas burst. Jika bidang bucket_capacity disetel ke nilai yang sama dengan bidang fill_amount, kondisi di mana lalu lintas burst melebihi laju pembatasan untuk periode singkat tidak diizinkan.

parameters

RateLimiterParameters

Ya

Parameter konfigurasi limiter.

request_parameters

RateLimiterRequestParameters

Tidak

Konfigurasi operasi yang akan dilakukan oleh limiter pada permintaan.

selectors

[]Selector

Ya

Permintaan spesifik tempat pembatasan berlaku.

RateLimiterParameters

RateLimiterParameters menentukan parameter konfigurasi limiter.

Bidang

Tipe

Diperlukan

Deskripsi

interval

Duration

Ya

Interval di mana limiter mengisi ember token setiap kali. Contohnya, nilai 30s menunjukkan bahwa ember token diisi dengan token pada interval 30 detik.

limit_by_label_key

string

Tidak

Label permintaan yang digunakan oleh kebijakan pembatasan untuk mengelompokkan permintaan. Setelah Anda menentukan bidang ini, pembatasan dilakukan secara terpisah pada permintaan dengan label yang berbeda, dan permintaan dengan label yang berbeda menggunakan ember token mereka sendiri. Untuk informasi lebih lanjut tentang cara menentukan label untuk permintaan, lihat Deskripsi label permintaan.

continuous_fill

bool

Tidak

Menentukan apakah limiter mengisi ember token secara halus. Jika bidang ini disetel ke true, limiter akan terus mengisi ember token dengan sejumlah token tertentu dalam periode waktu yang ditentukan oleh bidang interval, bukan mengisi ember token dengan sejumlah token tertentu sekaligus segera setelah periode waktu yang ditentukan oleh bidang interval berakhir. Jumlah token yang akan diisi ditentukan oleh bidang fill_amount. Nilai default: true.

delay_initial_fill

bool

Tidak

Menentukan apakah akan menunda pengisian ember token ketika kebijakan pembatasan mulai berlaku. Jika bidang ini disetel ke false, ember token akan langsung terisi penuh saat menerima permintaan pertama. Hal ini dapat menyebabkan lebih banyak permintaan diterima daripada batas laju yang ditentukan selama interval pertama. Nilai default: false.

lazy_sync

RateLimiterParametersLazySync

Tidak

Konfigurasi kemampuan sinkronisasi tertunda limiter.

max_idle_time

Duration

Tidak

Bidang ini berlaku ketika limit_by_label_key ditentukan. Bidang ini menentukan waktu tunggu maksimum untuk ember token yang sesuai dengan label dilepaskan jika permintaan dengan label tersebut tidak diterima. Nilai default: 7200s.

RateLimiterRequestParameters

RateLimiterRequestParameters menentukan konfigurasi kustom untuk limiter saat melakukan operasi pada permintaan.

Bidang

Tipe

Diperlukan

Deskripsi

denied_response_status_code

int

Tidak

Anda dapat menggunakan bidang ini untuk menimpa kode status HTTP 429 default yang dikembalikan saat pembatasan terjadi.

tokens_label_key

string

Tidak

Anda dapat menggunakan bidang ini untuk menimpa jumlah token yang dikonsumsi oleh permintaan. Jika permintaan membawa label yang ditentukan, angka dalam label menunjukkan jumlah token yang harus dikonsumsi.

RateLimiterParametersLazySync

RateLimiterParametersLazySync menentukan parameter konfigurasi terkait kemampuan sinkronisasi tertunda limiter. Sinkronisasi tertunda adalah kemampuan limiter dalam suite penjadwalan lalu lintas ASM. Jika sinkronisasi tertunda tidak diaktifkan, Envoy menyinkronkan dengan agen jarak jauh untuk setiap permintaan guna menentukan apakah pembatasan diperlukan. Hal ini memungkinkan pembatasan yang akurat untuk layanan tunggal. Jika sinkronisasi tertunda diaktifkan, Envoy membuat keputusan pembatasan secara lokal dan secara berkala menyinkronkan dengan agen jarak jauh. Hal ini mengurangi akurasi pembatasan tetapi mempercepat keputusan pembatasan dan mengurangi latensi permintaan.

Bidang

Tipe

Diperlukan

Deskripsi

enabled

bool

Tidak

Menentukan apakah akan mengaktifkan sinkronisasi tertunda. Nilai default: false.

num_sync

int

Tidak

Jumlah kali Envoy menyinkronkan jumlah permintaan yang dibatasi dengan agen jarak jauh dalam periode waktu yang ditentukan oleh bidang interval. Nilai default: 4.

Deskripsi label permintaan

Dalam suite penjadwalan lalu lintas ASM, label permintaan adalah pasangan kunci-nilai yang menunjukkan karakteristik atau klasifikasi permintaan. Penjadwalan dapat dilakukan pada permintaan yang berbeda berdasarkan label mereka. Misalnya, permintaan dapat dikelompokkan menurut label permintaan tertentu, dan ember token terpisah digunakan untuk membatasi setiap kelompok permintaan. Label permintaan dapat diperoleh dari beberapa sumber, seperti metadata permintaan dan header Baggage.

Metadata permintaan

Metadata dasar setiap permintaan HTTP secara otomatis dikonversi menjadi serangkaian label permintaan. Pemetaan antara metadata permintaan HTTP dan label permintaan:

  • http.method: metode permintaan HTTP. Contoh: POST.

  • http.flavor: versi protokol permintaan HTTP. Contoh: 1.1.

  • http.host: host permintaan HTTP. Contoh: httpbin.default.svc.cluster.local.

  • http.target: nama path permintaan HTTP. Contoh: /get.

  • http.request_content_length: ukuran badan permintaan HTTP. Contoh: 431.

  • http.request.header.header_name: header permintaan bernama header_name dalam header permintaan HTTP. Sebagai contoh, http.request.header.user_agent menunjukkan header permintaan user_agent.

Baggage

Baggage adalah mekanisme standar yang dikembangkan oleh OpenTelemetry untuk mentransfer informasi konteks di seluruh proses dalam rantai panggilan sistem terdistribusi. Anda dapat menambahkan header HTTP bernama baggage ke header HTTP. Nilai header baggage berada dalam format pasangan kunci-nilai. Anda dapat menggunakan header baggage untuk mentransfer data konteks seperti ID penyewa, ID jejak, dan kredensial keamanan. Dengan cara ini, Anda dapat menggunakan fitur analisis jejak dan asosiasi log tanpa perlu memodifikasi kode. Contoh:

baggage: userId=alice,isProduction=false

Jika permintaan membawa header Baggage, setiap pasangan kunci-nilai dalam header Baggage secara otomatis dikonversi menjadi label permintaan dengan nama yang sama. Sebagai contoh, header Baggage dalam contoh sebelumnya dikonversi menjadi dua label permintaan: userId: alice dan isProduction: false.