2013-08-01 16 views
5

मैं एक पायथन आधारित एप्लिकेशन (HTTP - REST या jsonrpc इंटरफ़ेस) विकसित कर रहा हूं जिसका उत्पादन स्वचालित परीक्षण वातावरण में किया जाएगा। यह एक जावा क्लाइंट से कनेक्ट होगा जो सभी टेस्ट स्क्रिप्ट चलाता है। यानी, मानव पहुंच की आवश्यकता नहीं है (ऐप का परीक्षण करने के अलावा)।पाइथन बोतल बनाम uwsgi/बोतल बनाम nginx/uwsgi/बोतल

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

मैं अपनी सादगी (एक फ़ाइल) के कारण बोतल पर एक ढांचे के रूप में बस गया हूं। यह फ्लास्क बनाम टॉसअप था। कोई भी जो फ्लास्क सोचता है वह बेहतर हो सकता है, मुझे बताएं क्यों।

मैं बोतल के अंतर्निहित HTTP सर्वर, इसलिए मैं इन तीन विकल्पों का मूल्यांकन कर रहा हूँ की स्थिरता के बारे में थोड़ा अनिश्चित किया गया है: केवल

  1. उपयोग बोतल - http सर्वर + अनुप्रयोग के रूप में
  2. उपयोग uwsgi के शीर्ष पर बोतल - uwsgi HTTP सर्वर के रूप में प्रयोग nginx/uwsgi

सवालों के साथ

  • का उपयोग बोतल:

    • यदि मैं कुछ भी नहीं कर रहा हूं लेकिन पायथन/यूवस्गी, क्या मिश्रण में nginx जोड़ने का कोई कारण है?
    • क्या uwsgi/बोतल (या फ्लास्क) संयोजन उत्पादन तैयार माना जाएगा?
    • क्या यह संभावना है कि मुझे बोतल के अंतर्निहित एक अलग HTTP सर्वर का उपयोग कर कुछ भी हासिल होगा?
  • उत्तर

    9

    फ्लास्क बनाम बोतल मेरे लिए कुछ चीजें नीचे आती है।

    1. ऐप कितना आसान है। यदि यह बहुत सरल है, तो बोतल मेरी पसंद है। यदि नहीं, तो मुझे फ्लास्क के साथ मिला। तथ्य यह है कि बोतल एक ही फाइल है जो हमारे स्रोत में फ़ाइल को शामिल करके इसे तैनात करने के लिए अविश्वसनीय रूप से सरल बनाती है। लेकिन तथ्य यह है कि बोतल एक ही फाइल है, यह एक बहुत अच्छा संकेत होना चाहिए कि यह पूर्ण wsgi spec और उसके सभी किनारे के मामलों को लागू नहीं करता है।
    2. ऐप क्या करता है। अगर इसे पाइथन के अलावा कुछ भी प्रस्तुत करना होगा-> JSON तो मैं Jinja2 के समर्थन में इसके लिए फ्लास्क के साथ जाता हूं। अगर मुझे प्रमाणीकरण और/या प्रमाणीकरण करने की आवश्यकता है तो फ्लास्क में पहले से ही उन आवश्यकताओं को संभालने के लिए कुछ अच्छे एक्सटेंशन हैं। अगर मुझे कैशिंग करना है, तो फिर, फ्लास्क-कैश मौजूद है और न्यूनतम सेटअप के साथ एक बहुत अच्छा काम करता है। मुझे पूरी तरह से यकीन नहीं है कि बोतल के विस्तार के लिए क्या उपलब्ध है, ताकि यह अभी भी एक लायक हो।

    बोतल के सर्वर में निर्मित उपयोग करने में समस्या यह है कि यह एकल प्रक्रिया/सिंगल थ्रेड होगा जिसका अर्थ है कि आप एक समय में एक अनुरोध को संसाधित कर सकते हैं।

    उस सीमा से निपटने के लिए आप किसी भी विशेष क्रम में निम्न में से कोई भी कार्य कर सकते हैं।

    1. बोतल को लपेटने के इवेंटलेट की wsgi।एप्लिकेशन (एकल लड़ी, गैर अवरुद्ध I/O, एकल प्रक्रिया)
    2. uwsgi या gunicorn (उत्तरार्द्ध सरल किया जा रहा है) जो सबसे ofter एकल लड़ी, बहु प्रक्रिया के रूप में सेट किया गया है (कार्यकर्ता) के सामने
    3. nginx uwsgi।

    3 सबसे महत्वपूर्ण है यदि आपके पास स्थिर संपत्तियां हैं जो आप सेवा करना चाहते हैं क्योंकि आप सीधे nginx के साथ उन लोगों की सेवा कर सकते हैं।
    2 जाने के लिए वास्तव में आसान है (esp। Gunicorn) - हालांकि मैं ज्यादातर समय uwsgi का उपयोग करता हूं क्योंकि इसमें कुछ चीजों को संभालने के लिए अधिक कॉन्फ़िगर करने योग्यता होती है।
    1 वास्तव में सरल है और अच्छी तरह से प्रदर्शन करता है ... साथ ही याद रखने के लिए कोई बाहरी कॉन्फ़िगरेशन या कमांड लाइन झंडे नहीं हैं।

    +0

    महान उत्तर! धन्यवाद। वर्तमान में मेरा ऐप इस तरह से संरचित है कि यदि आवश्यक हो तो इसे फ्लास्क (या अन्य ढांचे) में बदलने के लिए काफी आसान होना चाहिए, इसलिए मुझे लगता है कि मैं अब बोतल के साथ रहूंगा ... मैंने पहले से ही बहुत समय बिताया है ugsgi के सामने काम कर रहे/कॉन्फ़िगर करने के लिए nginx प्राप्त करने के लिए, और अब तक कोई सफलता नहीं है। तो मुझे लगता है कि मैं जितना संभव हो सके न्यूनतम कॉन्फ़िगरेशन के साथ गनिकोर्न और यूवस्गी दोनों को आजमाउंगा, और केवल यूवीजीआई का चयन करें यदि यह एक बहुत ही स्पष्ट प्रदर्शन लाभ दिखा रहा है; अन्यथा इसकी सादगी के लिए बंदूकधारी (मेरे पास अभी भी यह सब बदलने के लिए बहुत समय है)। – BobIsNotMyName

    +0

    त्वरित नोट: पाया गया कि nginx काम नहीं कर रहा था क्योंकि सॉकेट फ़ाइल/tmp में थी, और यह डिफ़ॉल्ट रूप से फेडोरा के साथ काम नहीं करती है ... उस समस्या को छोड़कर, इनमें से कोई भी विकल्प काम करने में कोई समस्या नहीं है। सोचो कि मैं अभी भी तैनाती की आसानी के लिए बंदूकधारी से चिपकने जा रहा हूं। – BobIsNotMyName

    +0

    मुझे लगता है कि मैं # 2 के साथ जा रहा हूं: ugsgi बिना nginx। चीजों को जटिल करने की कोई ज़रूरत नहीं है क्योंकि मुझे नहीं लगता कि मेरा सरल ऐप स्थिर फ़ाइलों को तेजी से सेवा देने से लाभान्वित होगा। –

    5

    मुझे एक साल पहले इसी तरह की पसंद का सामना करना पड़ा - मुझे एक सर्वर स्तरीय निर्माण के लिए एक वेब माइक्रोफ्रेमवर्क की आवश्यकता थी। विकल्पों के क्षेत्र में जाने में इन स्लाइड्स (और साथ में व्याख्यान) बहुत उपयोगी होने के लिए मिला: Web micro-framework BATTLE!

    मैंने बोतल चुना और इसके साथ बहुत खुश हुए। यह सरल, हल्का वजन (प्लस यदि आप रास्पबेरी पीआईएस पर तैनात कर रहे हैं), उपयोग करने में आसान, सहज ज्ञान युक्त, इसमें मेरी ज़रूरत है, और जब भी मुझे अपनी विशेषताओं को जोड़ने की ज़रूरत होती है तो यह बेहद विस्तारित होता है। Many plugins उपलब्ध हैं।

    बोतल के अंतर्निहित HTTP सर्वर का उपयोग किसी भी चीज़ के लिए नहीं करें लेकिन देव।

    मैंने उत्पादन में बोतल को बहुत सफलता के साथ चलाया है; यह अपाचे/mod_wsgi पर बहुत स्थिर रहा है। nginx/uwsgi "चाहिए" समान रूप से काम करना चाहिए लेकिन मुझे इसके साथ अनुभव नहीं है।

    0

    मैं यह भी सुझाव देता हूं कि आप gevent.pywsgi सर्वर के माध्यम से चल रही बोतल देखें। यह भयानक, सेटअप करने के लिए सुपर सरल, एसिंक्रोनस, और बहुत तेज़ है।

    प्लस बोतल में इसके लिए पहले से बनाया गया एडाप्टर है, इसलिए भी आसान है।

    मुझे बोतल पसंद है, और यह अवधारणा है कि यह बड़ी परियोजनाओं के लिए नहीं है हास्यास्पद है। यह सबसे कुशल और अच्छी तरह से लिखित ढांचे में से एक है, और आसानी से हाथ से छेड़छाड़ किए बिना आसानी से ढाला जा सकता है।

    संबंधित मुद्दे