नगनेक्स - `फट` को परिभाषित करने का क्या अर्थ है यदि` नोडेलै` विकल्प है


14

Nginx कॉन्फ़िगरेशन में, जब आप limit_req_zone/ का उपयोग करके अनुरोध प्रसंस्करण दर को सीमित करना चाहते हैं limit_req instructions, तो मैं वास्तव में nodelayविकल्प के उपयोग को नहीं समझता हूं ।
मेरी समझ में, यह बिना किसी देरी के परिभाषित दर से ऊपर के अनुरोधों को समाप्त करता है। तो यह बराबर लगता है burst=0। यही कारण है कि मैं निम्नलिखित उदाहरण नहीं समझता:

limit_req zone=one burst=5 nodelay;

burstउन अनुरोधों की संख्या को परिभाषित करता है जिन्हें विलंबित किया जा सकता है, इसलिए burstयदि nodelayविकल्प है तो परिभाषित करने का क्या अर्थ है ?

जवाबों:


28

मुझे limit_reqप्रलेखन स्पष्ट पर्याप्त लगता है।

burst इस तरह से प्रलेखित है:

अत्यधिक अनुरोधों को विलंबित किया जाता है जब तक कि उनकी संख्या अधिकतम फट आकार से अधिक न हो जाए [...]

nodelay इस तरह से प्रलेखित है:

यदि अनुरोधों को सीमित करते हुए अत्यधिक अनुरोधों की देरी वांछित नहीं है, तो पैरामीटर नोडेल का उपयोग किया जाना चाहिए

परिभाषित दर को फिट करने के लिए अनुरोध सीमित हैं। यदि अनुरोध उच्च दर पर आने वाले हैं, तो प्रति टाइम यूनिट के लिए निर्धारित संख्या से अधिक कोई सेवा नहीं दी जाएगी। फिर आपको उन अन्य अनुरोधों के साथ क्या करना है, यह तय करने की आवश्यकता है।

  • डिफ़ॉल्ट रूप से (नहीं burst, नहीं nodelay), HTTP 503 त्रुटि के साथ अनुरोधों से इनकार किया जाता है।
  • के साथ burst, आप प्रतीक्षा की गई कतार में अनुरोधों की निर्धारित संख्या को ढेर कर देते हैं, लेकिन आप उन्हें प्रति यूनिट यूनिट दर से निर्धारित अनुरोधों की तुलना में जल्दी संसाधित नहीं करते हैं
  • साथ burstऔर nodelay, कतार इंतजार कर नहीं किया जाएगा और अनुरोध फटने तुरंत कार्रवाई की जाएगी

3
आपके स्पष्टीकरण के लिए धन्यवाद, प्रलेखन मेरे लिए पर्याप्त स्पष्ट नहीं है।
निकोलस

1
मैंने अपने उत्तर को प्रलेखन को प्रतिबिंबित करने के लिए उद्धृत करके संपादित किया। प्रत्येक शब्द को ध्यान से बनाने के लिए nginx प्रलेखन में भारित किया गया है: जो कि इसके बारे में अच्छा है।
बर्नार्ड रॉसैट

3
तो क्या अंतर है जो limit_req_zone $binary_remote_addr zone=flood:10m rate=6r/s; limit_req zone=flood burst=0;प्रति सेकंड limit_req_zone $binary_remote_addr zone=flood:10m rate=1r/s; limit_req zone=flood burst=5 nodelay;6 अनुरोधों की अनुमति देता है और जो प्रति सेकंड 6 अनुरोधों की अनुमति देता है?
निकोलस

2
बस बर्नार्ड के anwser के बारे में पुष्टि करना चाहते हैं। अगर बर्नार्ड ने जो कहा, वह सही था, फटने और बदबू के साथ, वेबसर्वर को हिट करने की r / s दर समय-समय पर परिभाषित अनुरोधों से अधिक होगी, है ना?
Jcyrss

2
@BernardRosset कृपया आप स्पष्ट कर सकते हैं "कतार इंतज़ार नहीं कर रही होगी" - इसका क्या मतलब है?
डेनिस गोर्बाचेव

8

मूल उत्तर पर टिप्पणियाँ गलत लगती हैं।

हाथ में सवाल यह है कि क्या अंतर है, दर = 6r / s फट = 0 और दर = 1r / s फट = 5 नोडल

जब नोडल विकल्प मौजूद नहीं है, तो इस अंतर को समझाने के बारे में उत्तर महान हैं - जिस स्थिति में, अनुरोध फट के साथ कतार में हैं, और फट के बिना 503'd हैं।

मूल उत्तर ऑन स्पॉट लगता है - नोडेल के साथ, फट अनुरोध तुरंत संसाधित हो जाते हैं। और इसके अलावा, इसका एकमात्र निहितार्थ यह है कि एक फट + नोडेलय बनाम निर्दिष्ट करने के बीच कोई अंतर नहीं है। बस पहले स्थान पर Busrt = 0 के साथ एक उच्च सीमा निर्दिष्ट करता है।

इसलिए, अधिक स्पष्ट रूप से ओपी प्रश्न का उत्तर दें: जब नोडेल को निर्दिष्ट किया जाता है तो फट का अर्थ उसी तरह होता है जैसे बिना फट के एक बड़ी दर को निर्दिष्ट करना।


इस बिंदु को स्पष्ट करने के लिए धन्यवाद, जो प्रभावी रूप से मेरे प्रश्न का कारण था।
निकोलस

ये गलत है। मेरे उत्तर + टिप्पणियों को फिर से पढ़ें। यदि आप अभी भी इसे नहीं देखते हैं, तो आइए स्केच बनाते हैं: मेरे उत्तर पर एक टिप्पणी में निकोलस द्वारा प्रदान किए गए दोनों विन्यासों पर 6r / s। 1 सेकंड -> दोनों परिदृश्य 6r की सेवा करेंगे, लेकिन conf # 2 फट में 5 स्टोर करेगा। 2 सेकंड और उसके बाद, अभी भी conf # 1 (सभी 6r सेवा) के लिए समान है, लेकिन conf # 2 ने खपत सीमा के अनुसार फट बाल्टी से 1 हटा दिया होगा, कतार में 1r के लिए जगह छोड़कर। अन्य 5r को फेंक दिया जाता है।
बर्नार्ड रॉसैट

@BernardRosset: लेकिन इसके साथ nodelay, इसका मतलब यह नहीं होगा कि उन अनुरोधों को कतार के बजाय तुरंत संसाधित किया जाता है?
सिराइड

4

निर्दिष्ट burstऔर nodelayनिर्दिष्ट के साथ मुझे इस तरह के तंत्र को समझना आसान लगता है (इसके अलावा अन्य तरीका आमतौर पर समझा जाता है):

  1. आप अधिकतम burstअनुरोधों की अनुमति देते हैं। इसके साथ $binary_remote_addrआप दिए गए पते से अधिकतम अनुरोधों को स्वीकार करते हैं। प्रत्येक अनुरोध एक आंतरिक काउंटर बढ़ाता है। जब काउंटर पहुंचता है तो burstसभी अतिरिक्त अनुरोधों को अस्वीकार कर दिया जाता है (और काउंटर burstमूल्य से अधिक नहीं बढ़ाया जाता है )।
  2. इस काउंटर का उपयोग कर निर्दिष्ट दर पर लगातार कम किया जाता है rate

यह तर्क बताता है कि यह उच्च burstमूल्य (जैसे 100 और अधिक) और कम rateमूल्य (यहां तक ​​कि 2r / s जैसे कुछ भी ) निर्दिष्ट करने के लिए सही समझ में आता है । यह सामान्य ब्राउज़िंग (एक शांत अवधि के बाद समानांतर अनुरोधों का एक बैच) को बेहतर बनाता है, जबकि निरंतर बॉट अनुरोध स्ट्रीम के खिलाफ सुरक्षा करता है।


1

मैंने निकोलस की वेबसाइट पर नीचे पोस्ट लिखने वाले लड़के से निकोलस का सवाल पूछा। NGINX की दर सीमित हैउसका उत्तर नीचे है

पूर्व दर सीमा में, nginx 1/6 सेकंड के अंतराल पर लगातार अनुरोध स्वीकार करेगा। यह उन अनुरोधों को स्वीकार नहीं करेगा जो उस न्यूनतम समय अंतराल को संतुष्ट नहीं करते हैं। दूसरी ओर, बाद की परिभाषा में, नगनेक्स अनुरोधों के बीच समय अंतराल की परवाह किए बिना 6 अनुरोधों के फटने को स्वीकार करेगा। उत्तर लिंक


नमस्कार @Gardener और सर्वर फाल्ट में आपका स्वागत है। आपके अच्छे योगदान के लिए धन्यवाद। स्रोत के लिंक की बहुत सराहना की गई है।
मार्को

0

उत्कृष्ट डैन के उत्तर और नग्नेक्स के स्रोत कोड के आधार पर , nodelayव्यवहार के लिए एक संक्षिप्त सारांश निम्नलिखित प्रतीत होता है:

  • burstकितने नए समवर्ती अनुरोधों की अनुमति है।
  • rateकितने नए समवर्ती अनुरोध पुराने प्रति यूनिट समय के लिए बन जाते हैं । (यह अद्यतन धीरे-धीरे होता है: एक बार अनुरोध के अनुसार लेकिन प्रति सेकंड नहीं।)

-2

मैं इस सूत्र को पढ़ने का सुझाव दे रहा हूं: limit_req_zone स्थान / प्रॉक्सी द्वारा सीमा

और यह उत्तर: स्टैकओवरफ़्लो


1
सर्वर फॉल्ट पर लिंक-ओनली उत्तरों को उप-सम माना जाता है। कृपया यहां उपयोगी सामग्री प्रदान करें और यदि आवश्यक हो तो अधिक विवरण के लिए कहीं और लिंक करें।
ईईएए
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.