सवाल मुझे Nginx और Gunicorn की तरह कुछ क्यों चाहिए?


मैं निम्नलिखित प्रश्नों के लिए एक अत्यधिक सरलीकृत उत्तर की तलाश में हूं। मैं गिनिकोर्न जैसे कुछ के साथ कैसे काम करता है, इस बारे में एक आधारभूत समझ बनाने की कोशिश कर रहा हूं।

क्या मुझे Nginx दोनों पर Django ऐप्स को तैनात करने के लिए Gunginorn और Gunicorn दोनों की तरह कुछ चाहिए?

यदि हां, तो वास्तव में HTTP अनुरोधों को क्या संभालता है?

Ps। मैं अपाचे और mod_wsgi का उपयोग नहीं करना चाहता!


182
2017-11-15 21:16


मूल


अपाचे और mod_wsgi आपके डीजेंगो एप्लिकेशन और http अनुरोधों के बीच पुल को लागू करने का सबसे आसान तरीका है जो उत्पादन वातावरण में भी बहुत सक्षम है। कई डेवलपर्स के लिए, इसका मतलब है कि 'अपाचे nginx से बेहतर है' अगर उन्होंने किया लेकिन उसे पता है, लेकिन 'बीटामैक्स वीएचएस से बेहतर है', हां, डोगमा नियम - MagicLAMP


जवाब:


अत्यधिक सरलीकृत: आपको कुछ ऐसा करने की ज़रूरत है जो पाइथन को निष्पादित करे लेकिन पाइथन सभी प्रकार के अनुरोधों को संभालने में सबसे अच्छा नहीं है।

[अस्वीकरण: मैं एक गनिकॉर्न डेवलपर हूं]

कम सरलीकृत: आप जिस ऐप सर्वर का उपयोग करते हैं, उसके बावजूद (Gunicorn, mod_wsgi, mod_uwsgi, cherrypy) किसी भी प्रकार की गैर-तुच्छ तैनाती में कुछ अपस्ट्रीम होगा जो आपके Django ऐप को संभालने वाले अनुरोधों को संभाल नहीं पाएगा। ऐसे अनुरोधों के छोटे उदाहरण स्थिर संपत्ति (छवियों / सीएसएस / जेएस) की सेवा कर रहे हैं।

इसका परिणाम क्लासिक "तीन स्तरीय वास्तुकला" के दो पहले स्तरों में होता है। हां, वेबसर्वर (आपके मामले में Nginx) छवियों और स्थिर संसाधनों के लिए कई अनुरोधों को संभालेगा। अनुरोध जो गतिशील रूप से जेनरेट किए जाने की आवश्यकता है, तब आवेदन सर्वर (आपके उदाहरण में गनिकॉर्न) पर भेज दी जाएगी। (एक तरफ के रूप में, तीन स्तरों का तीसरा डेटाबेस है)

ऐतिहासिक रूप से बोलते हुए, इनमें से प्रत्येक स्तर अलग मशीनों पर होस्ट किया जाएगा (और पहले दो स्तरों में कई मशीनें होंगी, यानी: 5 वेब सर्वर दो ऐप सर्वरों को अनुरोध भेजते हैं जो बदले में एक डेटाबेस से पूछताछ करते हैं)।

आधुनिक युग में अब हमारे पास सभी आकार और आकार के अनुप्रयोग हैं। प्रत्येक सप्ताहांत परियोजना या छोटी व्यावसायिक साइट पर वास्तव में कई मशीनों की अश्वशक्ति की आवश्यकता नहीं होती है और एक बॉक्स पर काफी खुशी से भाग लेती है। इसने होस्टिंग समाधान की सरणी में नई प्रविष्टियों को जन्म दिया है। कुछ समाधान ऐप सर्वर से वेब सर्वर से शादी करेंगे (अपाचे httpd + mod_wsgi, Nginx + mod_uwsgi, आदि)। और यह बिल्कुल असामान्य नहीं है कि उसी वेब पर डेटाबेस को होस्ट करने के लिए इन वेब / ऐप सर्वर संयोजनों में से एक है।

अब गुनिकॉर्न के मामले में, हमने निगेंक्स के प्रॉक्सींग व्यवहार पर भरोसा करते हुए चीजें निगेंक्स से अलग रखने के लिए एक विशिष्ट निर्णय (रुबी के यूनिकॉर्न से कॉपी करना) किया। विशेष रूप से, अगर हम मान सकते हैं कि गनिकोर्न इंटरनेट से सीधे कनेक्शन नहीं पढ़ेगा, तो हमें धीमे ग्राहकों के बारे में चिंता करने की ज़रूरत नहीं है। इसका मतलब है कि गनिकोर्न के लिए प्रसंस्करण मॉडल शर्मनाक रूप से सरल है।

अलगाव भी शुद्ध पाइथन में गनिकॉर्न को लिखा जा सकता है जो प्रदर्शन की लागत को कम करता है जबकि प्रदर्शन को महत्वपूर्ण रूप से प्रभावित नहीं करता है। यह उपयोगकर्ताओं को अन्य प्रॉक्सी का उपयोग करने की क्षमता भी देता है (माना जाता है कि वे सही ढंग से बफर करते हैं)।

वास्तव में HTTP अनुरोध को संभालने के बारे में आपके दूसरे प्रश्न के अनुसार, सरल जवाब Gunicorn है। पूरा जवाब Nginx और Gunicorn दोनों अनुरोध को संभालता है। असल में, Nginx अनुरोध प्राप्त करेगा और यदि यह एक गतिशील अनुरोध (आमतौर पर यूआरएल पैटर्न पर आधारित है) तो यह गनिकोर्न को यह अनुरोध देगा, जो इसे संसाधित करेगा, और फिर Nginx को प्रतिक्रिया देगा जो उसके बाद प्रतिक्रिया को मूल पर वापस लाएगा ग्राहक।

तो बंद करने में, हाँ। उचित Django तैनाती के लिए आपको Nginx और Gunicorn (या कुछ समान) दोनों की आवश्यकता है। यदि आप विशेष रूप से डैंजो को नजिनक्स के साथ होस्ट करने की तलाश में हैं, तो मैं चीजों के Django पक्ष के उम्मीदवारों के रूप में गनिकोर्न, mod_uwsgi, और शायद चेरीपी की जांच करेगा।


268
2017-11-15 21:49



इस तरह के एक विस्तृत उत्तर लिखने के लिए समय लेने के लिए धन्यवाद! इस "3 स्तरीय वास्तुकला" पर कोई अनुशंसित पढ़ाई? - a.m.
महान जवाब, हालांकि मैं धीमी ग्राहकों के साथ इस मुद्दे को समझ नहीं पा रहा हूं। - Mads Skjern
@MadsSkjern मैं अनुमान लगा रहा हूं, लेकिन यदि आप मानते हैं कि सभी ग्राहक तेज़ हैं, तो आप कार्यकर्ता प्रक्रियाओं के एक निश्चित पूल का उपयोग कर सकते हैं, और उस मामले के लिए कोड नहीं करना चाहिए जहां कई या सभी ग्राहक के लिए प्रतीक्षा कर रहे हैं। - Jonathan Hartley
@ बजे। en.wikipedia.org/wiki/Multitier_architecture - Jonathan Hartley
मेरा django ऐप केवल जेसन को कोई स्थिर सामग्री नहीं देता है, क्या मैं सिर्फ बंदूक के साथ जा सकता हूं और कोई nginx नहीं - Sar009


मुझे इसकी सादगी में यह स्पष्टीकरण पसंद आया:

Nginx बाहरी दुनिया का सामना करेंगे। यह मीडिया फाइलों (छवियों,   सीएसएस, आदि) सीधे फाइल सिस्टम से। हालांकि, यह बात नहीं कर सकता   सीधे Django अनुप्रयोगों के लिए; इसे कुछ ऐसा करने की ज़रूरत है जो चलती है   आवेदन, इसे वेब से अनुरोध फ़ीड करें, और प्रतिक्रियाएं वापस करें।

वह गनिकोर्न का काम है। Gunicorn एक यूनिक्स सॉकेट बना देगा, और सेवा करते हैं   wsgi प्रोटोकॉल के माध्यम से nginx के जवाब - सॉकेट डेटा पास करता है   दोनों दिशाओं में:

The outside world <-> Nginx <-> The socket <-> Gunicorn

https://gist.github.com/Atem18/4696071


20
2017-12-13 07:52



अगर दूसरों को आश्चर्य हो रहा है तो इसे सॉकेट नहीं होना चाहिए। - akshay


मैं एक अत्यधिक सरलीकृत उत्तर की तलाश में हूं ...

क्या मुझे Nginx दोनों पर Django ऐप्स को तैनात करने के लिए Gunginorn और Gunicorn दोनों की तरह कुछ चाहिए?

यदि हां, तो वास्तव में HTTP अनुरोधों को क्या संभालता है?

अत्यधिक सरलीकृत उत्तर:

हाँ।

Nginx और Gunicorn दोनों।

चूंकि आप Nginx पर तैनाती कर रहे हैं, निश्चित रूप से आपको Nginx की आवश्यकता है।

चूंकि आप Django को तैनात कर रहे हैं, जो एक वेब ढांचा है, आपको वेब सर्वर (Nginx) और वेब ढांचे (Django) के बीच बातचीत को ब्रिज करने की आवश्यकता है। पायथन दुनिया में, ऐसी चीज को डब्लूएसजीआई सर्वर कहा जाता है (लेकिन इसे एक मध्यम बर्तन की तरह लगता है), जिनमें से उदाहरणों में गनिकोर्न और यूडब्ल्यूएसजीआई शामिल हैं। अनुरोध करते समय, Nginx Gunicorn या uWSGI के अनुरोध को प्रॉक्सी करता है, जो बदले में Django कोड को कॉल करता है और प्रतिक्रिया देता है।

इस दस्तावेज़ और पौलुस का जवाब आपको बेहतर सीखने में मदद करेगा।


0
2017-10-26 21:42