रूबी सर्वर विकल्प पर रूबी [बंद]


578

रूबी एप्लिकेशन पर मेरी रूबी के लिए एक विकास सर्वर स्थापित करने का पूरा मुद्दा मुझे भ्रमित करता है। वहाँ WEBrick, Mongrel, यात्री, Apache, Nginx और कई अन्य हैं जो मुझे यकीन है, और मैं वास्तव में उनके द्वारा निभाई जाने वाली विभिन्न भूमिकाओं को नहीं समझता।

मैंने WEBrick का उपयोग करना शुरू कर दिया है, और अब मैं विकास के लिए मोंगरेल का उपयोग करता हूं। क्या ये सर्वर अकेले खड़े हैं, या ये अपाचे के सामने बैठे हैं?

मैंने पैसेंजर के बारे में पढ़ा है और मुझे वास्तव में समझ में नहीं आया कि यह क्या है, साइट कहती है "रूबी वेब अनुप्रयोगों की तैनाती को एक हवा बना देता है", क्या यह मोंगरेल की जगह लेता है? क्या यह कैपिस्ट्रानो की तरह है, जो वेब अनुप्रयोगों को भी तैनात करता है?

ध्यान में रखते हुए मैं एसएसएल का परीक्षण करना चाहूंगा, और मेरा मानना ​​है कि यह मोंगरेल द्वारा समर्थित नहीं है, सबसे अच्छा विकास सर्वर सेटअप क्या है?

धन्यवाद


2
क्या आपने फ़्यूज़न पैसेंजर स्क्रैंकास्ट देखा है? यह बहुत 5 मिनट में वर्णन करता है कि सभी को अपने रेल एप्लिकेशन को ऑनलाइन रखना होगा।
होंग्ली

27
एक असंवैधानिक प्रश्न के लिए, यह सुनिश्चित है कि बहुत सारे उत्थान हो गए हैं, और इसलिए इसका उत्तर है।
तेमू लीस्टी

32
मुझे पता है कि यह सवाल एसओ के नियमों को तोड़ता है लेकिन मुझे आश्चर्य है कि यदि बहुत से उपयोगकर्ता इस प्रश्न को उपयोगी पाते हैं तो शायद कुछ नियमों को संशोधित करने का समय है?
हार्दिक

जवाबों:


1264

शब्द "परिनियोजन" के संदर्भ के आधार पर दो अर्थ हो सकते हैं। आप अपाचे / नग्नेक्स की भूमिकाओं को अन्य घटकों की भूमिकाओं के साथ भी भ्रमित कर रहे हैं।

ऐतिहासिक नोट: यह लेख मूल रूप से 6 नवंबर 2010 को लिखा गया था, जब रूबी ऐप सर्वर पारिस्थितिकी तंत्र सीमित था। मैंने 15 मार्च 2013 को पारिस्थितिकी तंत्र के सभी नवीनतम अपडेट के साथ इस लेख को अपडेट किया है।

अस्वीकरण : मैं फ्यूजन पैसेंजर के लेखकों में से एक हूं, जो ऐप सर्वरों में से एक है।

अपाचे बनाम नग्नेक्स

वे दोनों वेब सर्वर हैं। वे स्थैतिक फ़ाइलों की सेवा कर सकते हैं - लेकिन सही मॉड्यूल के साथ - गतिशील वेब ऐप भी सेवा कर सकते हैं जैसे कि PHP में लिखे गए। Apache अधिक लोकप्रिय है और इसमें अधिक विशेषताएं हैं, Nginx छोटा और तेज़ है और इसमें कम सुविधाएँ हैं।

न तो अपाचे और नग्नेक्स रूबी वेब एप्स आउट-ऑफ-द-बॉक्स की सेवा कर सकते हैं, यह करने के लिए कि आपको बाद में वर्णित कुछ प्रकार के ऐड-ऑन के साथ संयोजन में अपाचे / नग्नेक्स का उपयोग करने की आवश्यकता है।

अपाचे और नग्नेक्स भी रिवर्स प्रॉक्सी के रूप में कार्य कर सकते हैं, जिसका अर्थ है कि वे एक आने वाले HTTP अनुरोध को ले सकते हैं और इसे किसी अन्य सर्वर पर अग्रेषित कर सकते हैं, जिसे HTTP भी बोलते हैं। जब वह सर्वर एक HTTP प्रतिक्रिया के साथ प्रतिक्रिया करता है, तो Apache / Nginx ग्राहक को वापस प्रतिक्रिया भेज देगा; आप बाद में जानेंगे कि यह प्रासंगिक क्यों है।

Mongrel और अन्य उत्पादन एप्लिकेशन सर्वर बनाम WEBrick

मोंगरेल एक रूबी "एप्लिकेशन सर्वर" है: ठोस शब्दों में इसका मतलब है कि मोंगरेल एक अनुप्रयोग है जो:

  1. अपने खुद के प्रक्रिया स्थान के अंदर अपने रूबी एप्लिकेशन लोड करता है।
  2. एक टीसीपी सॉकेट सेट करता है, जो इसे बाहरी दुनिया (जैसे इंटरनेट) के साथ संवाद करने की अनुमति देता है। Mongrel इस सॉकेट पर HTTP अनुरोधों को सुनता है और रूबी वेब ऐप के लिए अनुरोध डेटा पास करता है।
  3. रूबी वेब ऐप फिर एक ऑब्जेक्ट देता है, जो बताता है कि HTTP की प्रतिक्रिया कैसी दिखनी चाहिए, और मोंगरेल इसे एक वास्तविक HTTP प्रतिक्रिया (वास्तविक बाइट्स) में परिवर्तित करने का ध्यान रखते हैं और इसे सॉकेट के ऊपर वापस भेजते हैं।

हालांकि मोंगरेल काफी दिनांकित है, आजकल इसका रखरखाव नहीं किया जाता है। नए वैकल्पिक अनुप्रयोग सर्वर हैं:

  • फ़्यूज़न पैसेंजर
  • एक तंगावाला
  • पतला
  • प्यूमा
  • त्रिनिदाद (केवल जुबी)
  • टॉर्कबॉक्स (केवल JRuby)

मैं उन्हें बाद में कवर करूँगा और वर्णन करूँगा कि वे एक दूसरे से और मोंगरेल से कैसे भिन्न हैं।

WEBrick मोंगरेल के रूप में एक ही काम करता है, लेकिन मतभेद हैं:

  • WEBrick उत्पादन के लिए फिट नहीं है, बाकी सब चीजों के विपरीत जो मैंने पहले उल्लेख किया था। WEBrick पूरी तरह से रूबी में लिखा गया है। Mongrel (और सबसे अन्य रूबी ऐप सर्वर) हिस्सा रूबी और भाग सी (ज्यादातर रूबी) है, लेकिन इसके HTTP पार्सर को प्रदर्शन के लिए सी में लिखा गया है।
  • WEBrick धीमी और कम मजबूत है। इसमें कुछ ज्ञात मेमोरी लीक और कुछ ज्ञात HTTP पार्सिंग समस्याएं हैं।
  • WEBrick आमतौर पर केवल विकास के दौरान डिफ़ॉल्ट सर्वर के रूप में उपयोग किया जाता है क्योंकि WEBrick डिफ़ॉल्ट रूप से रूबी में शामिल है। Mongrel और अन्य ऐप सर्वर को अलग से इंस्टॉल करने की आवश्यकता है। यह उत्पादन वातावरण में WEBrick का उपयोग करने के लिए अनुशंसित नहीं है, हालांकि किसी कारण से Heroku ने WEBrick को अपना डिफ़ॉल्ट सर्वर चुना। वे पहले थिन का उपयोग कर रहे थे, इसलिए मुझे पता नहीं है कि उन्होंने WEBrick पर स्विच क्यों किया।

एप्लिकेशन सर्वर और दुनिया

सभी वर्तमान रूबी ऐप सर्वर HTTP बोलते हैं, हालांकि कुछ ऐप सर्वर सीधे पोर्ट 80 पर इंटरनेट के संपर्क में आ सकते हैं, जबकि अन्य नहीं हो सकते हैं।

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

कुछ एप्लिकेशन सर्वरों को रिवर्स प्रॉक्सी के पीछे क्यों रखा जाना चाहिए?

  • कुछ ऐप सर्वर केवल 1 अनुरोध को प्रति प्रक्रिया के अनुसार संभाल सकते हैं। यदि आप 2 अनुरोधों को समवर्ती रूप से संभालना चाहते हैं, तो आपको कई ऐप सर्वर इंस्टेंसेस चलाने की आवश्यकता है, प्रत्येक एक ही रूबी ऐप परोसें। ऐप सर्वर प्रक्रियाओं के इस सेट को ऐप सर्वर क्लस्टर कहा जाता है (इसलिए नाम Mongrel क्लस्टर, थिन क्लस्टर, आदि)। फिर आपको इस क्लस्टर में प्रॉक्सी को रिवर्स करने के लिए Apache या Nginx को सेटअप करना होगा। Apache / Nginx क्लस्टर में इंस्टेंस के बीच अनुरोधों को वितरित करने का ध्यान रखेगा (इस पर अधिक अनुभाग "I / O संक्षिप्त मॉडल")।
  • वेब सर्वर अनुरोधों और प्रतिक्रियाओं को बफर कर सकता है, ऐप सर्वर को "धीमी क्लाइंट" से बचा सकता है - HTTP क्लाइंट जो बहुत तेज़ी से डेटा नहीं भेजते या स्वीकार नहीं करते हैं। आप अपने ऐप सर्वर को ग्राहक के पूर्ण अनुरोध भेजने या पूर्ण प्रतिक्रिया प्राप्त करने के लिए इंतजार करते समय कुछ नहीं करना चाहते हैं, क्योंकि उस समय के दौरान ऐप सर्वर कुछ और करने में सक्षम नहीं हो सकता है। Apache और Nginx एक ही समय में कई काम करने में बहुत अच्छे हैं क्योंकि वे या तो मल्टीथ्रेडेड या ईवेंटेड हैं।
  • अधिकांश ऐप सर्वर स्थैतिक फ़ाइलों की सेवा कर सकते हैं, लेकिन विशेष रूप से अच्छे नहीं हैं। Apache और Nginx इसे तेजी से कर सकते हैं।
  • लोग आमतौर पर सीधे फ़ाइलों की सेवा करने के लिए Apache / Nginx की स्थापना करते हैं, लेकिन आगे के अनुरोध जो कि स्थिर फ़ाइलों के साथ ऐप सर्वर से मेल नहीं खाते हैं, यह अच्छा सुरक्षा अभ्यास है। Apache और Nginx बहुत परिपक्व हैं और संभवतः दूषित अनुरोधों से ऐप सर्वर को ढाल सकते हैं।

क्यों कुछ ऐप सर्वर सीधे इंटरनेट के संपर्क में आ सकते हैं?

  • फ़्यूज़न पैसेंजर अन्य सभी ऐप सर्वर से बहुत अलग जानवर है। इसकी अनूठी विशेषताओं में से एक यह है कि यह वेब सर्वर में एकीकृत होता है।
  • रेनबो लेखक ने सार्वजनिक रूप से कहा कि यह सीधे इंटरनेट पर उजागर करना सुरक्षित है। लेखक को पूरा यकीन है कि HTTP पार्सर (और इसी तरह) में कोई भेद्यता नहीं है। फिर भी, लेखक कोई वारंटी प्रदान नहीं करता है और कहता है कि उपयोग स्वयं के जोखिम पर है।

तुलना में अनुप्रयोग सर्वर

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

  • मोंगरेल बहुत नंगी हड्डियाँ थीं। जैसा कि पहले उल्लेख किया गया है, मोंगरेल शुद्ध रूप से एकल-थ्रेडेड बहु-प्रक्रिया है, इसलिए यह केवल एक क्लस्टर में उपयोगी है। कोई प्रक्रिया मॉनिटरिंग नहीं है: यदि क्लस्टर में कोई प्रक्रिया क्रैश हो जाती है (जैसे ऐप में बग के कारण) तो इसे मैन्युअल रूप से पुनरारंभ करने की आवश्यकता होती है। लोग बाहरी प्रक्रिया निगरानी उपकरणों का उपयोग करते हैं जैसे मोनेट और भगवान।
  • यूनिकॉर्न मोंगरेल का एक कांटा है। यह सीमित प्रक्रिया निगरानी का समर्थन करता है: यदि कोई प्रक्रिया क्रैश हो जाती है तो यह मास्टर प्रक्रिया द्वारा स्वचालित रूप से पुनरारंभ हो जाती है। यह प्रत्येक प्रक्रिया के लिए एक अलग सॉकेट के बजाय सभी प्रक्रियाओं को एक ही साझा सॉकेट पर सुन सकता है। यह रिवर्स प्रॉक्सी कॉन्फ़िगरेशन को सरल करता है। मोंगरेल की तरह, यह विशुद्ध रूप से सिंगल-थ्रेडेड मल्टी-प्रोसेस है।
  • पतला EventMachine पुस्तकालय का उपयोग करके evented आई / ओ मॉडल का उपयोग करता। Mongrel HTTP parser का उपयोग करने के अलावा, यह किसी भी तरह से Mongrel पर आधारित नहीं है। इसके क्लस्टर मोड की कोई प्रक्रिया निगरानी नहीं है, इसलिए आपको क्रैश आदि की निगरानी करने की आवश्यकता है। कोई गेंडा जैसा साझा सॉकेट नहीं है, इसलिए प्रत्येक प्रक्रिया अपने सॉकेट पर सुनती है। सिद्धांत रूप में, थिन आई / ओ मॉडल उच्च संगामिति की अनुमति देता है, लेकिन जिन व्यावहारिक स्थितियों में पतली का उपयोग किया जाता है, उनमें से एक पतली प्रक्रिया केवल 1 समवर्ती अनुरोध को संभाल सकती है, इसलिए आपको अभी भी एक क्लस्टर की आवश्यकता है। इस अजीबोगरीब संपत्ति के बारे में अनुभाग "I / O संगामिति मॉडल" में।
  • प्यूमा भी संकर जाति से अलग था, लेकिन यूनिकॉर्न के विपरीत, प्यूमा विशुद्ध रूप से मल्टी-थ्रेडेड होना करने के लिए बनाया गया है। इसलिए वर्तमान में बिलिन क्लस्टर समर्थन नहीं है। आपको यह सुनिश्चित करने के लिए विशेष ध्यान रखने की आवश्यकता है कि आप कई कोर का उपयोग कर सकते हैं (इस बारे में अनुभाग "I / O संगामिति मॉडल")।
  • रेनबो विभिन्न पुस्तकालयों के उपयोग के माध्यम से कई संगामिति मॉडल का समर्थन करता है।

फ़्यूज़न पैसेंजर

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

अपने ऐप के लिए एक प्रक्रिया या क्लस्टर शुरू करने के बजाय, और अपाचे / Nginx को कॉन्फ़िगर करने के लिए स्थैतिक फ़ाइलों की सेवा करें और / या फ़्यूज़न पैसेंजर के साथ प्रक्रिया / क्लस्टर के लिए अनुरोधों को उल्टा करने के लिए अनुरोध करें:

  1. आप वेब सर्वर कॉन्फ़िगरेशन फ़ाइल को संपादित करते हैं और अपने रूबी ऐप की 'सार्वजनिक' निर्देशिका का स्थान निर्दिष्ट करते हैं।
  2. कोई चरण 2 नहीं है।

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

अन्य ऐप सर्वरों के विपरीत, फ़्यूज़न पैसेंजर मुख्य रूप से C ++ में लिखा जाता है, जिससे यह बहुत तेज़ हो जाता है।

वहाँ भी एक है एंटरप्राइज संस्करण में इस तरह से स्वचालित रोलिंग पुनरारंभ, multithreading समर्थन, तैनाती त्रुटि प्रतिरोध, आदि के रूप और भी अधिक सुविधाओं के साथ की Phusion यात्री

उपरोक्त कारणों से, फ़्यूज़न पैसेंजर वर्तमान में सबसे लोकप्रिय रूबी ऐप सर्वर है, जो 150,000 से अधिक वेबसाइटों को शक्ति प्रदान करता है, जिसमें बड़े लोग जैसे कि न्यूयॉर्क टाइम्स, पिक्सर, एयरबीएनबी, आदि शामिल हैं।

फ़्यूज़न पैसेंजर बनाम अन्य ऐप सर्वर

फ़्यूज़न पैसेंजर बहुत अधिक सुविधाएँ प्रदान करता है और अन्य ऐप सर्वर पर कई लाभ प्रदान करता है, जैसे:

  • ट्रैफ़िक के आधार पर प्रक्रियाओं की संख्या को गतिशील रूप से समायोजित करना। हम अपने संसाधन-संकुचित सर्वर पर एक टन रेल एप्लिकेशन चलाते हैं जो सार्वजनिक रूप से सामना नहीं कर रहे हैं, और यह कि हमारे संगठन के लोग दिन में अधिकांश समय केवल उपयोग करते हैं। Gitlab, Redmine, आदि फ़्यूज़न पैसेंजर जैसी चीज़ें उन प्रक्रियाओं को समाप्त कर सकती हैं जब उनका उपयोग नहीं किया जाता है, और जब उनका उपयोग किया जाता है, तो उन्हें स्पिन करते हुए अधिक महत्वपूर्ण एप्लिकेशन के लिए अधिक संसाधन उपलब्ध हो सकते हैं। अन्य ऐप सर्वरों के साथ, आपकी सभी प्रक्रियाएँ हर समय चालू रहती हैं।
  • कुछ ऐप सर्वर कुछ वर्कलोड के हिसाब से अच्छे नहीं होते हैं। उदाहरण के लिए यूनिकॉर्न केवल तेजी से चलने वाले अनुरोधों के लिए डिज़ाइन किया गया है: यूनिकॉर्न वेबसाइट अनुभाग "कुछ मामलों में बस बदतर" देखें।

वर्कलोड जो यूनिकॉर्न में अच्छे नहीं हैं:

  • स्ट्रीमिंग वर्कलोड (जैसे रेल 4 लाइव स्ट्रीमिंग या रेल 4 टेम्पलेट स्ट्रीमिंग)।
  • वर्कलोड जिसमें ऐप HTTP API कॉल करता है।

फ़्यूज़न पैसेंजर एंटरप्राइज 4 में हाइब्रिड I / O मॉडल बाद में इस तरह के वर्कलोड के लिए एक उत्कृष्ट विकल्प है।

  • अन्य एप्लिकेशन सर्वर को उपयोगकर्ता को प्रति एप्लिकेशन कम से कम एक इंस्टेंस चलाने की आवश्यकता होती है। इसके विपरीत, फ़्यूज़न पैसेंजर एक ही उदाहरण में कई अनुप्रयोगों का समर्थन करता है। यह ओवरहेड प्रशासन को बहुत कम करता है।
  • स्वचालित उपयोगकर्ता स्विचिंग, एक सुविधाजनक सुरक्षा सुविधा।
  • फ़्यूज़न पैसेंजर कई MRI रूबी, JRuby और Rubinius का समर्थन करता है। मोंगरेल, यूनिकॉर्न और थिन केवल एमआरआई का समर्थन करते हैं। Puma भी सभी 3 का समर्थन करता है।
  • फ़्यूज़न पैसेंजर वास्तव में केवल रूबी से अधिक का समर्थन करता है! यह पायथन WSGI का भी समर्थन करता है, इसलिए यह उदाहरण के लिए Django और फ्लास्क ऐप भी चला सकता है। वास्तव में, फ़्यूज़न पैसेंजर एक पॉलीग्लॉट सर्वर बनने की दिशा में आगे बढ़ रहा है। टूडू सूची पर Node.js का समर्थन।
  • आउट-ऑफ-बैंड कचरा संग्रह। फ़्यूज़न पैसेंजर सामान्य अनुरोध / प्रतिक्रिया चक्र के बाहर रूबी कचरा संग्रहकर्ता को चला सकता है, संभवतः सैकड़ों मिलीसेकंड तक अनुरोध समय कम कर सकता है। यूनिकॉर्न में भी एक समान विशेषता है, लेकिन फ़्यूज़न पैसेंजर का संस्करण अधिक लचीला है क्योंकि 1) यह जीसी तक सीमित नहीं है और इसका उपयोग मनमाने काम के लिए किया जा सकता है। 2) फ़्यूज़न पैसेंजर का संस्करण मल्टीथ्रेड ऐप के साथ अच्छा काम करता है, जबकि यूनिकॉर्न ऐसा नहीं करता है।
  • स्वचालित रोलिंग पुनरारंभ। यूनिकॉर्न और अन्य सर्वरों पर रोलिंग पुनः आरंभ करने के लिए कुछ स्क्रिप्टिंग कार्य की आवश्यकता होती है। फ़्यूज़न पैसेंजर एंटरप्राइज पूरी तरह से आपके लिए इस तरह से स्वचालित करता है।

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

मैं / हे संगामिति मॉडल

  • एकल-पिरोया बहु-प्रक्रिया। यह पारंपरिक रूप से रूबी ऐप सर्वरों के लिए सबसे लोकप्रिय I / O मॉडल है, आंशिक रूप से क्योंकि रूबी पारिस्थितिकी तंत्र में बहुपरत समर्थन बहुत खराब था। प्रत्येक प्रक्रिया एक बार में ठीक 1 अनुरोध को संभाल सकती है। वेब सर्वर प्रक्रियाओं के बीच संतुलन स्थापित करता है। यह मॉडल बहुत मजबूत है और प्रोग्रामर के लिए समरूपता कीड़े को पेश करने की बहुत कम संभावना है। हालाँकि, इसका I / O कंसीडर बेहद सीमित (प्रक्रियाओं की संख्या तक सीमित) है। यह मॉडल तेज, कम चलने वाले वर्कलोड के लिए बहुत उपयुक्त है। यह धीमी, लंबे समय तक चलने वाले I / O वर्कलोड को रोकने के लिए बहुत अनुपयुक्त है, जैसे HTTP APIs की कॉलिंग में वर्कलोड।
  • विशुद्ध रूप से बहु। आजकल रूबी इकोसिस्टम में उत्कृष्ट मल्टीथ्रेडिंग समर्थन है, इसलिए यह I / O मॉडल बहुत व्यवहार्य हो गया है। मल्टीथ्रेडिंग उच्च I / O समरूपता की अनुमति देता है, जिससे यह शॉर्ट-रनिंग और लंबे समय तक चलने वाले I / O वर्कलोड दोनों के लिए उपयुक्त है। प्रोग्रामर के लिए संगोष्ठी कीड़े पेश करने की अधिक संभावना है, लेकिन सौभाग्य से अधिकांश वेब फ्रेमवर्क इस तरह से डिज़ाइन किए गए हैं कि यह अभी भी बहुत संभावना नहीं है। हालांकि ध्यान देने वाली बात यह है कि ग्लोबल इंटरप्रेटर लॉक (GIL) के उपयोग के कारण, कई थ्रेड्स होने पर भी MRI रूबी दुभाषिया कई CPU कोर का लाभ नहीं उठा सकता है। आप कई मल्टी-थ्रेडेड प्रक्रियाओं का उपयोग करके इसके आसपास काम कर सकते हैं, क्योंकि प्रत्येक प्रक्रिया एक सीपीयू कोर का लाभ उठा सकती है। JRuby और Rubinius के पास कोई GIL नहीं है, इसलिए वे एक ही प्रक्रिया में कई कोर का पूरी तरह से लाभ उठा सकते हैं।
  • हाइब्रिड मल्टी थ्रेडेड मल्टी-प्रोसेस। मुख्य रूप से फ्यूजन पैसेंजर एंटरप्राइज द्वारा 4 और बाद में लागू किया गया। आप आसानी से सिंगल-थ्रेडेड मल्टी-प्रोसेस, विशुद्ध रूप से मल्टीथ्रेडेड, या शायद कई थ्रेड्स के साथ प्रत्येक प्रक्रिया को एक-दूसरे के बीच स्विच कर सकते हैं। यह मॉडल दोनों दुनिया का सर्वश्रेष्ठ देता है।
  • Evented। यह मॉडल पहले बताए गए मॉडल से पूरी तरह से अलग है। यह बहुत अधिक I / O कॉन्सेप्ट को अनुमति देता है और इसलिए लंबे समय तक चलने वाले I / O वर्कलोड के लिए उत्कृष्ट है। इसका उपयोग करने के लिए, आवेदन और रूपरेखा से स्पष्ट समर्थन की आवश्यकता होती है। हालाँकि रेल और सिनात्रा जैसी सभी प्रमुख रूपरेखाएँ घटना कोड का समर्थन नहीं करती हैं। यही कारण है कि व्यवहार में एक पतली प्रक्रिया अभी भी एक समय में 1 से अधिक अनुरोधों को संभाल नहीं सकती है, जिससे यह प्रभावी रूप से एकल-थ्रेडेड मल्टी-प्रोसेस मॉडल के समान व्यवहार करता है। ऐसे विशेष ढाँचे हैं जो क्रैम्प जैसे आय / ओ का लाभ उठा सकते हैं।

फ़्यूज़ ब्लॉग पर हाल ही में एक लेख पोस्ट किया गया था जो आपके कार्यभार को देखते हुए प्रक्रियाओं और थ्रेड्स की संख्या को बेहतर ढंग से ट्यून करने के बारे में था। देखें ट्यूनिंग Phusion यात्री के संगामिति सेटिंग्स

Capistrano

Capistrano कुछ पूरी तरह से अलग है। पिछले सभी अनुभागों में, "परिनियोजन" एक एप्लिकेशन सर्वर में अपने रूबी ऐप को शुरू करने के कार्य को संदर्भित करता है, ताकि यह आगंतुकों के लिए सुलभ हो जाए, लेकिन इससे पहले कि किसी को आमतौर पर कुछ तैयारी कार्य करने की आवश्यकता हो, जैसे:

  • रूबी एप का कोड और फाइल को सर्वर मशीन पर अपलोड करना।
  • आपके एप्लिकेशन पर निर्भर करता है कि पुस्तकालयों को स्थापित करना।
  • डेटाबेस की स्थापना या माइग्रेट करना।
  • किसी भी डेमॉन को शुरू करना और रोकना जो आपके ऐप पर निर्भर हो सकता है, जैसे कि साइडकीक / रेस्क्यू कार्यकर्ता या जो भी।
  • जब आप अपना एप्लिकेशन सेट कर रहे हों, तो कोई अन्य चीज़ जो आपके लिए आवश्यक हो।

कैपिस्ट्रानो के संदर्भ में, "तैनाती" यह सब तैयारी कार्य करने के लिए संदर्भित करता है। Capistrano एक एप्लिकेशन सर्वर नहीं है। इसके बजाय, यह तैयारी के सभी कार्यों को स्वचालित करने के लिए एक उपकरण है। आप कैपिस्ट्रानो को बताते हैं कि आपका सर्वर कहां है और किन कमांड्स को हर बार चलाने के लिए आपको अपने ऐप का एक नया संस्करण तैनात करना होगा, और कैपिस्ट्रानो आपके लिए सर्वर पर रेल एप्लिकेशन को अपलोड करने और आपके द्वारा निर्दिष्ट आदेशों को चलाने का ध्यान रखेगा।

Capistrano हमेशा एक एप्लिकेशन सर्वर के साथ संयोजन में उपयोग किया जाता है। यह एप्लिकेशन सर्वर को प्रतिस्थापित नहीं करता है। इसके विपरीत, एप्लिकेशन सर्वर कैपिस्ट्रानो को प्रतिस्थापित नहीं करते हैं, उनका उपयोग कैपिस्ट्रानो के साथ संयोजन में किया जा सकता है।

बेशक आपको Capistrano का उपयोग नहीं करना है। यदि आप अपने Ruby ऐप को FTP के साथ अपलोड करना पसंद करते हैं और मैन्युअल रूप से हर बार कमांड के एक ही चरण को चला रहे हैं, तो आप ऐसा कर सकते हैं। अन्य लोग इससे थक गए, इसलिए उन्होंने कैपिस्ट्रानो में उन चरणों को स्वचालित किया।


74
आपको इसे कहीं प्रकाशित करना चाहिए। यह सब अब आसान है, लेकिन जब मैंने पहली बार रेल से शुरुआत की तो कोई भी उपयोगी जानकारी प्राप्त करना कठिन था।
स्गेगोरो

9
बहुत बढ़िया पोस्ट! मेरे लिए भी बहुत कुछ साफ़ किया। आपको बंडलर और आरवीएम जैसे कुछ अन्य तत्वों को जोड़ना चाहिए और इसे एक भारी हिट ब्लॉग पोस्ट बनाना चाहिए! :)
डेमियन रोश

37
इसके लिए रेल गाइड की जरूरत है।
डोरियन

4
"कोई भी उत्पादन वातावरण में WEBrick का उपयोग नहीं करता है।" यह बिल्कुल भी सच नहीं है। रूबी एप्स को हरोकू में धकेलने पर डिफॉल्ट ऐप सर्वर बेकार हो जाता है।
जॉन डाउनी

37
@ होंगली यह पोस्ट फ़्यूज़न पैसेंजर के लिए बहुत अनुकूल है। हो सकता है कि निष्पक्षता के लिए परियोजना (CTO, phusion.nl/about ) से अपनी संबद्धता जोड़ना समझदारी होगी ?
बर्ट गोएथल्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.