जवाबों:
मैं धीमे क्लाइंट व्यवहार पर ध्यान केंद्रित करने जा रहा हूं, और आपका कॉन्फ़िगरेशन इसे कैसे संभालता है, लेकिन यह विश्वास करने के लिए परीक्षा न करें कि एकमात्र लाभ है। धीमी क्लाइंट्स को लाभ पहुंचाने वाली एक ही विधि में फास्ट क्लाइंट्स, एसएसएल हैंडलिंग, ट्रैफिक सर्ज से निपटने और इंटरनेट पर HTTP परोसने के अन्य पहलुओं के लिए भी लाभ हैं।
Gunicorn प्री-फोर्किंग सॉफ्टवेयर है। कम विलंबता संचार के लिए, जैसे कि लोड बैलेंसर से ऐप सर्वर या सेवाओं के बीच संचार के लिए, पूर्व-कांटा सिस्टम बहुत सफल हो सकते हैं। अनुरोध को संभालने के लिए एक प्रक्रिया को स्पिन करने में कोई लागत नहीं है, और किसी एकल प्रक्रिया को एक अनुरोध को संभालने के लिए समर्पित किया जा सकता है; इन चीजों को खत्म करने से समग्र, तेज और अधिक कुशल प्रणाली हो सकती है जब तक कि एक साथ कनेक्शन की संख्या उन्हें संभालने के लिए उपलब्ध प्रक्रियाओं की संख्या से अधिक न हो।
आपकी स्थिति में, आप इंटरनेट पर उच्च विलंबता ग्राहकों के साथ काम कर रहे हैं। ये धीमे ग्राहक उन्हीं प्रक्रियाओं को जोड़ सकते हैं। जब QPS मायने रखता है, तो एप्लिकेशन कोड को अनुरोध को जल्द से जल्द प्राप्त करना, संभालना और हल करना होगा ताकि वह दूसरे अनुरोध पर आगे बढ़ सके। जब धीमे ग्राहक आपके सिस्टम से सीधे संवाद करते हैं, तो वे उस प्रक्रिया को पूरा करते हैं और इसे धीमा कर देते हैं। अनुरोध को जल्द से जल्द निपटाने और निपटाने के बजाय, उस प्रक्रिया को अब धीमे ग्राहक के लिए भी इंतजार करना होगा। प्रभावी QPS नीचे जाता है।
बहुत कम सीपीयू और मेमोरी कॉस्ट के साथ बड़ी संख्या में कनेक्शनों को संभालना निगंक्स जैसे अतुल्यकालिक सर्वरों पर अच्छा है। वे धीमे ग्राहकों द्वारा उसी नकारात्मक तरीके से प्रभावित नहीं होते हैं क्योंकि वे बड़ी संख्या में ग्राहकों को एक साथ संभालने में माहिर होते हैं। नग्नेक्स के मामले में, आधुनिक हार्डवेयर पर चलने से यह एक ही बार में हजारों कनेक्शनों को संभाल सकता है।
प्री-फोर्किंग सर्वर के सामने Nginx एक बेहतरीन संयोजन है। Nginx ग्राहकों के साथ संचार को संभालता है, और धीमे ग्राहकों को संभालने के लिए कोई दंड नहीं भुगतता है। यह बैकएंड को जितनी तेजी से अनुरोध भेजता है, बैकेंड उन अनुरोधों को संभाल सकता है, बैकएंड को सर्वर संसाधनों के साथ यथासंभव सक्षम बनाता है। बैकएंड परिणाम की गणना करते ही इसे लौटा देता है, और नग्नेक्स बफ़र्स जो इसे अपनी गति से धीमी गति से ग्राहकों को खिलाने के लिए प्रतिक्रिया करते हैं। इस बीच, बैकएंड एक अन्य अनुरोध को संभालने के लिए आगे बढ़ सकता है, यहां तक कि धीमी गति से क्लाइंट अभी भी परिणाम प्राप्त कर रहा है।
@blueben सही है। रिवर्स प्रॉक्सी का उपयोग न करने पर क्या हो सकता है इसका एक विशिष्ट और सामान्य उदाहरण यह है कि एक बैकएंड डेटाबेस डेटाबेस कनेक्शन हैंडल चला सकता है जहां कोई प्रॉक्सी नहीं है और एक ट्रैफ़िक स्पाइक है। यह कनेक्शन को धीमा करने के कारण है क्योंकि @blueben वर्णित है।
डेटाबेस हैंडल को देखने की पहली वृत्ति अधिक डेटाबेस कनेक्शन का समर्थन करने के लिए हो सकती है। लेकिन ऐप के सामने एक रिवर्स प्रॉक्सी जोड़कर आप उच्च लोड दोनों के लिए आवश्यक डेटाबेस कनेक्शन की संख्या को काफी कम और स्थिर करते देखेंगे - डेटाबेस कनेक्शन का स्तर ट्रैफ़िक स्पाइक होने पर लगभग उतना नहीं बढ़ेगा।
Nginx स्थिर सामग्री, कैशिंग और अन्य HTTP कार्यों की विविधता परोसने में भी बहुत अच्छा है, जो आपके ऐप सर्वर को ऐप सर्वर होने पर ध्यान केंद्रित करने देता है।