Nginx - apa artinya mendefinisikan `burst` jika ada opsi` nodelay`

14

Dalam konfigurasi Nginx, ketika Anda ingin membatasi laju pemrosesan permintaan dengan menggunakan limit_req_zone/ limit_req instructions, saya tidak benar-benar memahami penggunaan nodelayopsi.
Dalam pemahaman saya, ini mengakhiri permintaan di atas tingkat yang ditentukan tanpa menunda mereka. Jadi sepertinya sama dengan burst=0. Itu sebabnya saya tidak mengerti contoh berikut:

limit_req zone=one burst=5 nodelay;

burstmendefinisikan jumlah permintaan yang bisa ditunda, jadi apa artinya mendefinisikan burstjika ada nodelayopsi?

Nicolas
sumber

Jawaban:

28

Saya menemukan limit_reqdokumentasi yang cukup jelas.

burst didokumentasikan seperti itu:

Permintaan berlebihan ditunda hingga jumlahnya melebihi ukuran burst maksimum [...]

nodelay didokumentasikan seperti itu:

Jika menunda permintaan berlebihan sementara permintaan sedang terbatas tidak diinginkan, parameter nodelay harus digunakan

Permintaan terbatas agar sesuai dengan tarif yang ditentukan. Jika permintaan masuk pada tingkat yang lebih tinggi, tidak lebih dari jumlah permintaan yang ditentukan per unit waktu akan dilayani. Anda kemudian perlu memutuskan apa yang harus dilakukan dengan permintaan lainnya.

  • Secara default (tidak burst, tidak nodelay), permintaan ditolak dengan kesalahan HTTP 503.
  • Dengan burst, Anda menumpuk jumlah permintaan yang ditentukan dalam antrian tunggu, tetapi Anda tidak memprosesnya lebih cepat dari permintaan yang ditentukan per tingkat satuan waktu .
  • Dengan burstdan nodelay, antrian tidak akan menunggu dan permintaan semburan akan segera diproses .
Bernard Rosset
sumber
3
Terima kasih atas klarifikasi Anda, dokumentasi tidak cukup jelas untuk saya.
Nicolas
1
Saya mengedit jawaban saya untuk mencerminkan dokumentasi dengan mengutipnya. Setiap kata dengan hati-hati tertimbang dalam dokumentasi nginx untuk membuatnya ringkas: itulah yang baik tentang itu.
Bernard Rosset
3
Jadi apa perbedaan antara limit_req_zone $binary_remote_addr zone=flood:10m rate=6r/s; limit_req zone=flood burst=0;yang memungkinkan 6 permintaan per detik dan limit_req_zone $binary_remote_addr zone=flood:10m rate=1r/s; limit_req zone=flood burst=5 nodelay;yang juga memungkinkan 6 permintaan per detik?
Nicolas
2
Hanya ingin mengkonfirmasi tentang Bernard's anwser. Jika apa yang dikatakan Bernard benar, Dengan burst dan nodelay, tingkat hit server web akan lebih dari permintaan yang ditentukan dari waktu ke waktu, bukan?
Jcyrss
2
@BardardRosset bisakah Anda menjelaskan "antrian tidak akan menunggu" - apa maksud Anda dengan itu?
Denis Gorbachev
8

Komentar pada jawaban awal tampaknya salah.

Pertanyaan yang dihadapi adalah apa perbedaan antara, katakanlah rate = 6r / s burst = 0 dan rate = 1r / s burst = 5 nodelay

Jawabannya bagus untuk menjelaskan perbedaan ketika opsi nodelay TIDAK hadir - dalam hal ini, permintaan mengantri dengan burst, dan 503 akan tanpa burst.

Jawaban aslinya tampaknya tepat - dengan nodelay, permintaan burst diproses segera. Dan karenanya, satu-satunya implikasi dari itu adalah bahwa tidak ada perbedaan antara menentukan burst + nodelay vs hanya menentukan batas yang lebih tinggi dengan busrt = 0 di tempat pertama.

Oleh karena itu, untuk menjawab pertanyaan OP secara lebih ringkas: makna burst ketika nodelay ditentukan sama dengan hanya menentukan tingkat yang lebih besar tanpa burst.

fsm
sumber
Terima kasih telah menjelaskan poin ini, yang secara efektif menjadi alasan pertanyaan saya.
Nicolas
Ini salah. Baca jawaban saya + komentar lagi. Jika Anda masih tidak melihatnya, mari buat sketsa: 6r / s pada kedua konfigurasi yang disediakan oleh Nicolas dalam komentar atas jawaban saya. Detik 1 -> kedua skenario akan melayani 6r, tetapi conf # 2 akan menyimpan 5 dalam burst. 2 detik dan seterusnya, masih sama untuk conf # 1 (semua 6r disajikan), tetapi conf # 2 akan menghapus 1 dari burst bucket sesuai dengan konsumsi yang sesuai dengan batas laju, meninggalkan ruang untuk 1r dalam antrian. 5r lainnya dibuang.
Bernard Rosset
@BernardRosset: tetapi dengan nodelay, bukankah itu berarti permintaan tersebut diproses segera alih-alih antri?
siride
4

Dengan burstdan nodelayditentukan, saya merasa lebih mudah untuk memahami mekanisme seperti ini (sebaliknya yang biasanya dipahami):

  1. Anda mengizinkan maksimum burstpermintaan. Dengan $binary_remote_addrjumlah permintaan maksimum yang Anda terima dari alamat yang diberikan. Setiap permintaan menambah penghitung internal. Ketika penghitung mencapai burstsemua permintaan tambahan ditolak (dan penghitung tidak bertambah melebihi burstnilai).
  2. Penghitung ini terus diturunkan pada tingkat yang ditentukan menggunakan rate.

Logika ini menunjukkan bahwa masuk akal untuk menentukan burstnilai tinggi (misalnya 100 dan lebih banyak) dan ratenilai rendah (bahkan sekitar 2r / dtk). Ini menangani penelusuran normal (sejumlah permintaan paralel diikuti dengan periode tenang) dengan lebih baik sekaligus melindungi dari aliran permintaan bot berkelanjutan.

Dan
sumber
1

Saya menanyakan pertanyaan Nicolas kepada orang yang menulis posting di bawah ini di situs web nginx. Pembatasan NGINX Rate . Balasannya adalah seperti di bawah ini

Dalam batas kurs sebelumnya, nginx akan menerima permintaan berurutan pada interval 1/6 detik. itu tidak akan menerima ledakan permintaan yang tidak memenuhi interval waktu minimum itu. Di sisi lain dalam definisi yang terakhir, nginx akan menerima ledakan hingga 6 permintaan terlepas dari interval waktu antara permintaan. Tautan jawaban

Tukang kebun
sumber
Hello @Gardener dan selamat datang di Server Fault. Terima kasih atas kontribusi Anda yang dibuat dengan baik. Tautan ke sumber sangat dihargai.
Marco
0

Berdasarkan jawaban Dan yang luar biasa dan pada kode sumber nginx , ringkasan ringkas untuk nodelayperilaku tersebut adalah sebagai berikut:

  • burstadalah berapa banyak baru permintaan bersamaan diperbolehkan.
  • rateadalah berapa banyak permintaan bersamaan baru menjadi lama per unit waktu. (Pembaruan ini terjadi secara bertahap: sekali per permintaan tetapi tidak per detik.)
Kirill Bulygin
sumber
-2

Saya menyarankan untuk membaca utas ini: limit_req_zone batas berdasarkan lokasi / proxy

dan jawaban ini: stackoverflow

zoza
sumber
1
Jawaban hanya tautan dianggap sub-par di Server Fault. Harap berikan konten yang bermanfaat di sini dan kemudian tautkan di tempat lain untuk detail lebih lanjut jika diperlukan.
EEAA