चेरी एप्स की तैनाती: स्टैंडअलोन, डब्लूएसजीआई सर्वर या एनजीआईएनएक्स?


11

मैं सब-ट्रैफ़िक के रूप में कई कम-ट्रैफ़िक चेरी ऐप को तैनात करने के लिए एक एकल वीपीएस का उपयोग करने का इरादा रखता हूं; उदाहरण के लिए: example.com/app1, example.com/app2, आदि

WSGI परिनियोजन पर शोध करने के बाद, यह दिखता है कि ऐप्स को तैनात करने के लिए पसंदीदा तरीका एक WSGI सर्वर (Gunicorn, uWSGI, आदि) और NGinx को रिवर्स-प्रॉक्सी सेटअप का उपयोग करना है। यह ऐसा लगता है जैसे टेंडेम में दो वेबसर्वर का उपयोग करना - विशेष रूप से मेरा चेरी ऐप स्वयं एक वेबसर्वर है - लेकिन मैं विचार को खारिज नहीं करना चाहता क्योंकि यह हर जगह दिखाई देता है । मैं निश्चित रूप से विशेषज्ञ नहीं हूं इसलिए मैं इस पर चर्चा करना चाहूंगा।

मुझे तीन विकल्प दिखाई देते हैं:

  • चेरीपी को खुद से तैनात करें।
  • Gunicorn या एक अन्य WSGI सर्वर के नीचे तैनात करें।
  • एक WSGI सर्वर के नीचे और NGinx के रिवर्स-प्रॉक्सी को तैनात करें, जो हर किसी का समाधान लगता है।

मेरे सवाल:

  • हर जगह इस पैटर्न को देखने का मुख्य कारण क्या है? क्या NGinx सिर्फ इतना ही अच्छा है?
  • कम-ट्रैफ़िक ऐप्स के लिए, क्या देशी चेरीपी सर्वर काफी अच्छा है, या मुझे भी कोशिश नहीं करनी चाहिए?

किसी भी और सभी सलाह की सराहना की है, धन्यवाद।

जवाबों:


9

हर कोई अपने ऐप सर्वर के सामने nginx (या Apache जैसे अन्य सर्वर) डालता है, क्योंकि सभी के पास स्थिर सामग्री जैसे चित्र, सीएसएस और जावास्क्रिप्ट और अजीब आवश्यकताएं हैं जो उनके आवेदन के लिए अद्वितीय हैं।

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

इसके अलावा, वास्तविक वेब सर्वर उच्च प्रदर्शन सामग्री की तुलना में बहुत अधिक कर सकता है। कैशिंग, हेडर हेरफेर, URL रीराइटिंग, जियोलोकेशन, और कई अन्य विशेषताएं जैसी चीजें जो सिर्फ ऐप सर्वर को बिना किसी अच्छे उद्देश्य के फूला देगी।

आमतौर पर आप एप्लिकेशन को विकसित करते समय केवल ऐप सर्वर को अकेले चलाते हैं, जब आप केवल उपयोगकर्ता होते हैं, और प्रदर्शन कोई समस्या नहीं है। यहां तक ​​कि अगर आपकी साइट कम ट्रैफ़िक है, तो आप चाहेंगे कि यह तेज़ हो, सही? कम ट्रैफ़िक साइटें जो धीमी होती हैं, आमतौर पर उच्च ट्रैफ़िक साइटों में नहीं बढ़ती हैं ...


अच्छा जवाब, प्लस अधिकांश वेब सर्वर में उत्कृष्ट लॉगिंग सुविधाएं हैं।
डेनिला लडनेर

9

लोग Nginx को सामने क्यों रखते हैं?

  1. Nginx एक अतुल्यकालिक वेब-गंभीर है। इसका मतलब है कि यह प्रति कनेक्शन एक धागा या एक प्रक्रिया को समर्पित नहीं करता है। इसके बजाय यह ओएस के पसंदीदा सॉकेट पोलिंग लाइब्रेरी का उपयोग करता है और इस प्रकार सौ हजारों कनेक्शनों को संभालने में सक्षम है। आवेदन डेवलपर, देखभाल के रूप में आपको क्यों होना चाहिए? क्योंकि Nginx बफ़र्स कनेक्शन और केवल आपके CherryPy अपस्ट्रीम उदाहरण के लिए अनुरोध पारित करता है जब अनुरोध पूरी तरह से पढ़ा जाता है। प्रतिक्रियाओं के लिए वही। इस तरह आपका चेरीपी एप्लीकेशन, जो कि एक थ्रेडेड सर्वर है, जो नग्नेक्स के पीछे कई इंद्रियों में है, अतुल्यकालिक हो जाता है। विशेष रूप से, आप धीमी क्लाइंट समस्या और धीमी लोरिस DOS हमलों के लिए एक हाथ तरंग करते हैं।
  2. निग्नेक्स का कनेक्शन दर बॉक्स से बाहर सीमित है। कहते हैं, मैं एक ही आईपी से 8 से अधिक एक साथ कनेक्शन नहीं चाहता।
  3. CherryPy में SSL समस्या है । Nginx नहीं करता है।
  4. पायथन सी zlib। लाइब्रेरी के चारों ओर बस एक रैपर के रूप में लगभग बाइट्स को आगे और पीछे भेज सकता है । लेकिन क्योंकि Nginx कनेक्शन को प्रभावी ढंग से संभालता है, यह आपके CherryPy वर्कर थ्रेड्स को उत्पादन में स्थैतिक सामग्री को परोसने से बचाने के लिए और गतिशील सामग्री पर ही समर्पित करने के लिए एक अच्छा विचार है।
  5. एक ही पोर्ट, डोमेन, पथ, आदि पर कई चेरीपी उदाहरणों को गुणा करना आम तौर पर एक और कॉन्फ़िगरेशन स्तर का अतिरिक्त लचीलापन है।

क्या चेरीपी का उपयोग करना सुरक्षित है?

मूल लेखकों में से एक के अनुसार, हाँ । ज्यादातर वेब-प्रासंगिक चीजें आप चेरी के साथ खुद कर सकते हैं।

चेरीपी में एक आवेदन की धारणा है और आप एक चेरी उदाहरण के साथ कई अनुप्रयोगों की सेवा कर सकते हैं । चेरीपी अन्य WSGI अनुप्रयोगों की भी सेवा कर सकती है ।

चेरीपॉई की तैनाती

एक पारंपरिक * निक्स-शैली की तैनाती में आप init स्क्रिप्ट लिखते हैं, डेमनीज़ यू प्रोसेस करते हैं, उसके विशेषाधिकार छोड़ते हैं, उसके PID लिखते हैं, आदि यह बहुत बड़ी बात नहीं है जब आपके पास कुछ चेरी उदाहरण हैं। जब आपके पास दर्जनों होते हैं, तो यह थकाऊ हो जाता है और यह प्रक्रिया प्रबंधन को Gunicorn या uWGSI को सौंपने के लिए और HTTP से WSGI के लिए अपने चेरीपी इंस्टेंस को स्विच करने के लिए समझ में आता है।

मैंने एक ट्यूटोरियल / प्रोजेक्ट कंकाल, चेरी-वेब-स्केलेटन लिखा , जो लक्ष्य था कि वेब-डेवलपर के लिए डेबियन पर एक वास्तविक दुनिया चेरीपी एप्लिकेशन को तैनात करने (पारंपरिक) के लिए अंतराल को भरना।

लपेटें

  1. कम-ट्रैफ़िक, कोई विशेष आवश्यकताओं → CherryPy * 1 ⇐ HTTP ⇒ Client
  2. उच्च यातायात, विशेष आवश्यकताओं → CherryPy * n ⇐ HTTP ⇒ Nginx ⇐ HTTP ⇒ Client
  3. एक ही सर्वर पर दर्जनों अलग-अलग चेरी इंस्टेंस, हर किसी के समाधान के ओवरकिल के लिए उत्सुक → CherryPy * n ⇐ WSGI ⇒ Gunicorn ⇐ HTTP ⇒ Nginx ⇐ HTTP ⇒ Client

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