Nginx को रिवर्स प्रॉक्सी के रूप में एक अच्छा विचार क्यों बनाया जा रहा है?


41

मेरे पास एक Django साइट है जो Nunicx के माध्यम से रिवर्स प्रॉक्सी के साथ Gunicorn पर चल रही है। Nginx सिर्फ एक अतिरिक्त अनावश्यक उपरि नहीं है? Gunicorn की मदद से इसे कैसे जोड़ना है?

जवाबों:


52

मैं धीमे क्लाइंट व्यवहार पर ध्यान केंद्रित करने जा रहा हूं, और आपका कॉन्फ़िगरेशन इसे कैसे संभालता है, लेकिन यह विश्वास करने के लिए परीक्षा न करें कि एकमात्र लाभ है। धीमी क्लाइंट्स को लाभ पहुंचाने वाली एक ही विधि में फास्ट क्लाइंट्स, एसएसएल हैंडलिंग, ट्रैफिक सर्ज से निपटने और इंटरनेट पर HTTP परोसने के अन्य पहलुओं के लिए भी लाभ हैं।

Gunicorn प्री-फोर्किंग सॉफ्टवेयर है। कम विलंबता संचार के लिए, जैसे कि लोड बैलेंसर से ऐप सर्वर या सेवाओं के बीच संचार के लिए, पूर्व-कांटा सिस्टम बहुत सफल हो सकते हैं। अनुरोध को संभालने के लिए एक प्रक्रिया को स्पिन करने में कोई लागत नहीं है, और किसी एकल प्रक्रिया को एक अनुरोध को संभालने के लिए समर्पित किया जा सकता है; इन चीजों को खत्म करने से समग्र, तेज और अधिक कुशल प्रणाली हो सकती है जब तक कि एक साथ कनेक्शन की संख्या उन्हें संभालने के लिए उपलब्ध प्रक्रियाओं की संख्या से अधिक न हो।

आपकी स्थिति में, आप इंटरनेट पर उच्च विलंबता ग्राहकों के साथ काम कर रहे हैं। ये धीमे ग्राहक उन्हीं प्रक्रियाओं को जोड़ सकते हैं। जब QPS मायने रखता है, तो एप्लिकेशन कोड को अनुरोध को जल्द से जल्द प्राप्त करना, संभालना और हल करना होगा ताकि वह दूसरे अनुरोध पर आगे बढ़ सके। जब धीमे ग्राहक आपके सिस्टम से सीधे संवाद करते हैं, तो वे उस प्रक्रिया को पूरा करते हैं और इसे धीमा कर देते हैं। अनुरोध को जल्द से जल्द निपटाने और निपटाने के बजाय, उस प्रक्रिया को अब धीमे ग्राहक के लिए भी इंतजार करना होगा। प्रभावी QPS नीचे जाता है।

बहुत कम सीपीयू और मेमोरी कॉस्ट के साथ बड़ी संख्या में कनेक्शनों को संभालना निगंक्स जैसे अतुल्यकालिक सर्वरों पर अच्छा है। वे धीमे ग्राहकों द्वारा उसी नकारात्मक तरीके से प्रभावित नहीं होते हैं क्योंकि वे बड़ी संख्या में ग्राहकों को एक साथ संभालने में माहिर होते हैं। नग्नेक्स के मामले में, आधुनिक हार्डवेयर पर चलने से यह एक ही बार में हजारों कनेक्शनों को संभाल सकता है।

प्री-फोर्किंग सर्वर के सामने Nginx एक बेहतरीन संयोजन है। Nginx ग्राहकों के साथ संचार को संभालता है, और धीमे ग्राहकों को संभालने के लिए कोई दंड नहीं भुगतता है। यह बैकएंड को जितनी तेजी से अनुरोध भेजता है, बैकेंड उन अनुरोधों को संभाल सकता है, बैकएंड को सर्वर संसाधनों के साथ यथासंभव सक्षम बनाता है। बैकएंड परिणाम की गणना करते ही इसे लौटा देता है, और नग्नेक्स बफ़र्स जो इसे अपनी गति से धीमी गति से ग्राहकों को खिलाने के लिए प्रतिक्रिया करते हैं। इस बीच, बैकएंड एक अन्य अनुरोध को संभालने के लिए आगे बढ़ सकता है, यहां तक ​​कि धीमी गति से क्लाइंट अभी भी परिणाम प्राप्त कर रहा है।


3
नाइटपंटिंग: गुनकोर्न एक पूर्व-आधारित ईवेंट-आधारित सर्वर है। प्रत्येक प्रक्रिया एसिंक्रोनस रूप से कई कनेक्शनों को संभालती है। यह इस तथ्य को परिवर्तित नहीं करता है कि नगीनेक्स में प्रति कनेक्शन कम लागत का तरीका है, जिससे आपके बाकी विवरण वैध हो जाते हैं।
जेवियर

4
और एक बोनस के रूप में, नग्नेक्स "स्लो HTTP डॉस अटैक्स" को बहुत प्रभावी ढंग से रोकता है। एक बिंदु जो मैं जोड़ूंगा वह यह है कि जब नग्नेक्स का उपयोग किया जाता है तो यह किसी भी आईपी से संबंधित सामान को गड़बड़ कर सकता है जो आप Gunicorn में कर रहे हैं, उदाहरण के लिए IP द्वारा लॉगिंग, लॉगिंग आदि। मैं Gunicorn से परिचित नहीं हूं इसलिए मैं यह नहीं कह सकता कि यह आपके लिए कितना बड़ा मुद्दा होगा।
निल डोनेगन

जेवियर की जानकारी के लिए धन्यवाद, मैं गुटनिरपेक्ष रूप से परिचित नहीं हूं।
ब्लूबेन

इस प्रश्न के लिए आपका उत्तर फिट होना चाहिए: stackoverflow.com/q/13182892/719276
arthur.sw

क्या इसके लिए * _busy_buffer_size विकल्प के साथ कुछ करना है?
CMCDragonkai

2

@blueben सही है। रिवर्स प्रॉक्सी का उपयोग न करने पर क्या हो सकता है इसका एक विशिष्ट और सामान्य उदाहरण यह है कि एक बैकएंड डेटाबेस डेटाबेस कनेक्शन हैंडल चला सकता है जहां कोई प्रॉक्सी नहीं है और एक ट्रैफ़िक स्पाइक है। यह कनेक्शन को धीमा करने के कारण है क्योंकि @blueben वर्णित है।

डेटाबेस हैंडल को देखने की पहली वृत्ति अधिक डेटाबेस कनेक्शन का समर्थन करने के लिए हो सकती है। लेकिन ऐप के सामने एक रिवर्स प्रॉक्सी जोड़कर आप उच्च लोड दोनों के लिए आवश्यक डेटाबेस कनेक्शन की संख्या को काफी कम और स्थिर करते देखेंगे - डेटाबेस कनेक्शन का स्तर ट्रैफ़िक स्पाइक होने पर लगभग उतना नहीं बढ़ेगा।

Nginx स्थिर सामग्री, कैशिंग और अन्य HTTP कार्यों की विविधता परोसने में भी बहुत अच्छा है, जो आपके ऐप सर्वर को ऐप सर्वर होने पर ध्यान केंद्रित करने देता है।


0

@naill Donegan ने ऊपर टिप्पणी में इसका उल्लेख किया है, लेकिन यह एक उत्तर को वारंट करने के लिए पर्याप्त महत्वपूर्ण है।

Nginx धीमा लोरिस के हमले को रोकता है जो कि gunicorn हैंडल नहीं करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.