यूनिकॉर्न को नगनेक्स के साथ एक साथ तैनात करने की आवश्यकता क्यों है?


138

मैं नेग्नेक्स और यूनिकॉर्न के बीच अंतर जानना चाहूंगा। जहाँ तक मैं समझता हूँ, नगीनेक्स एक वेब सर्वर है जबकि यूनिकॉर्न एक रूबी एचटीटीपी सर्वर है।

चूंकि Nginx और Unicorn दोनों HTTP अनुरोधों को संभाल सकते हैं, RoR अनुप्रयोगों के लिए Nginx और Unicorn के संयोजन का उपयोग करने की आवश्यकता क्या है?


3
अच्छा प्रश्न ! मुझे लगता है कि इस सवाल का शीर्षक होना चाहिए, "हमें
नगनेक्स

1
@servatj मैंने एक उत्तर जोड़ा है जो अधिक विस्तार से बताता है कि यूनिकॉर्न को इसके सामने Nginx जैसे रिवर्स प्रॉक्सी की आवश्यकता क्यों है। आप इसे देखना चाह सकते हैं;)
एजिस

जवाबों:


62

Nginx
यहां छवि विवरण दर्ज करें
यूनिकॉर्न
यहां छवि विवरण दर्ज करें
का संदर्भ लें GitHub पर गेंडा अधिक जानकारी के लिए।


1
प्रतीक, मेरा प्रश्न क्या है गेंडा सर्वर स्थिर और गतिशील प्रक्रिया दोनों की सेवा कर सकता है, फिर हम NGINx या Apache का उपयोग क्यों कर रहे हैं जो केवल स्थिर सामग्री को संसाधित कर सकते हैं, यात्री या गेंडा या mod_php के साथ मिलकर?
लोगनथन

17
@loganathan, Apache और Nginx दोनों माणिक या किसी भी एप्लिकेशन सर्वर की तुलना में स्थिर सामग्री परोसने में बहुत तेज़ हैं। वे यह भी जानते हैं कि कैशिंग को कैसे संभालना है और ट्रैफ़िक में रहते हुए और एप्लिकेशन सर्वरों को पास करते समय समवर्ती फ़ाइल डाउनलोड की अनुमति देना अच्छा है।
प्रात:

4
इसके अलावा, यदि आपके पास बड़ी मात्रा में डेटा आ रहा है +, तो क्लाइंट से nginx इसे (और चम्मच फ़ीड से) बफर कर देगा। नंगेक्स के बिना, आपके एक गेंडा को अपलोड / डाउनलोड के दौरान बांधा जाएगा।
BraveNewCurrency

10
यह इस सवाल का जवाब नहीं देता है कि आखिर नगनेक्स की आवश्यकता क्यों है। यह सिर्फ किसी भी टिप्पणी के बिना दोनों चित्रों में डालता है। निक का जवाब ज्यादा बेहतर है।
Gorn

1
मैं @gorn से सहमत हूं। इसका मतलब मेरे लिए कुछ भी नहीं है, उदाहरण के लिए।
BalinKingOfMoria 22

94

निग्नेक्स एक शुद्ध वेब सर्वर है जो स्थिर सामग्री की सेवा के लिए है और / या अनुरोध को संभालने के लिए अनुरोध को दूसरे सॉकेट पर पुनर्निर्देशित करना है।

यूनिकॉर्न एक रैक वेब सर्वर है और केवल एक 'रैक ऐप' की मेजबानी करने का इरादा है जो आमतौर पर गतिशील सामग्री उत्पन्न कर रहा है। रैक ऐप्स स्थैतिक सामग्री भी प्रदान कर सकते हैं, लेकिन यह अन्य पारंपरिक वेब सर्वरों की तुलना में कम कुशल है।

अधिकांश RoR सेटअप पारंपरिक वेब सर्वर और Rack सर्वर दोनों के संयोजन का उपयोग अपनी दोनों क्षमताओं का सर्वश्रेष्ठ उपयोग करने के लिए करते हैं। Nginx प्रॉक्सी संतुलन के माध्यम से अनुरोध पर पुनर्निर्देशन और स्थैतिक सामग्री को परोसने में अविश्वसनीय रूप से तेज़ है। यूनिकॉर्न HTTP हेडर को संसाधित करने में काफी सक्षम है और प्रसंस्करण के लिए रूबी को इनबाउंड अनुरोधों को संतुलित करता है।


73

यह उत्तर अन्य लोगों के लिए पूरक है और बताता है कि यूनिकॉर्न को इसके सामने nginx की आवश्यकता क्यों है

टीएल; डॉ । कारण यह है कि यूनिकॉर्न को आमतौर पर नग्नेक्स जैसे रिवर्स प्रॉक्सी के साथ एक साथ तैनात किया जाता है, क्योंकि इसके रचनाकारों ने जानबूझकर इसे डिजाइन किया है, जो सादगी के लिए एक व्यापार बनाता है।

सबसे पहले, यूनिकॉर्न को रिवर्स प्रॉक्सी के बिना तैनात करने से आपको कुछ नहीं रखना है । हालाँकि, यह एक बहुत अच्छा विचार नहीं होगा; आइए देखें क्यों।

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

सौभाग्य से, इस तरह के एक रिवर्स प्रॉक्सी पहले से ही मौजूद है और इसे नगीनेक्स कहा जाता है ।

केवल तेजी से ग्राहकों को संभालने का निर्णय, यूनिकॉर्न के डिजाइन को बहुत सरल करता है और तैनाती विभाग पर कुछ अतिरिक्त जटिलता की कीमत पर (बहुत सरल और छोटे कोडबेस की अनुमति देता है।

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

इसके बजाय इसके रचनाकारों ने मौजूदा सॉफ़्टवेयर का लाभ उठाने का निर्णय लिया, जो कि युद्ध-परीक्षण और बहुत अच्छी तरह से डिज़ाइन किया गया और पहले से ही अन्य सॉफ़्टवेयर द्वारा हल की गई समस्याओं पर समय और ऊर्जा बर्बाद करने से बचने के लिए।

लेकिन चलो तकनीकी हो और अपने प्रश्न का उत्तर दें:

यूनिकॉर्न को नगनेक्स के साथ एक साथ तैनात करने की आवश्यकता क्यों है?

यहाँ कुछ प्रमुख कारण दिए गए हैं:

ग्राहकों के लिए यूनिकॉर्न अवरुद्ध I / O का उपयोग करता है

रिवर्स प्रॉक्सी पर निर्भर होने का अर्थ है कि यूनिकॉर्न को गैर-अवरोधक I / O का उपयोग करने की आवश्यकता नहीं है । इसके बजाय यह अवरुद्ध I / O का उपयोग कर सकता है जो प्रोग्रामर के लिए स्वाभाविक रूप से सरल और आसान है।

के रूप में भी डिजाइन दस्तावेज़ कहता है:

[ब्लॉकिंग आई / ओ का उपयोग करना] रूबी दुभाषिया और कम सीस्कॉल के भीतर एक सरल कोड पथ का पालन करने की अनुमति देता है।

हालाँकि, इसके कुछ परिणाम भी हैं:

मुख्य बिंदु # 1: यूनिकॉर्न धीमे ग्राहकों के साथ कुशल नहीं है

(सादगी के लिए, हम 1 यूनिकॉर्न कार्यकर्ता के साथ एक सेटअप मानते हैं)

चूंकि I / O को अवरुद्ध करने के लिए उपयोग किया जाता है, एक गेंडा कार्यकर्ता एक समय में केवल एक ग्राहक की सेवा कर सकता है , इसलिए एक धीमा ग्राहक (यानी एक धीमी कनेक्शन वाला) प्रभावी रूप से कार्यकर्ता को लंबे समय तक व्यस्त रखेगा (एक तेज ग्राहक की तुलना में) )। इस बीच, अन्य ग्राहक बस इंतजार करेंगे जब तक कि कार्यकर्ता फिर से मुक्त न हो जाए (यानी; अनुरोध कतार में ढेर हो जाएंगे)।

इस समस्या को हल करने के लिए, यूनिकॉर्न के सामने एक रिवर्स प्रॉक्सी तैनात है, जो आने वाले अनुरोधों और  एप्लिकेशन प्रतिक्रियाओं को पूरी तरह से बफ़र करता है , और फिर उनमें से प्रत्येक को एक बार (उर्फ चम्मच-फीड्स) यूनिकॉर्न और क्लाइंट्स को क्रमशः भेजता  है। उस संबंध में, आप कह सकते हैं कि रिवर्स प्रॉक्सी धीमी नेटवर्क क्लाइंट्स से यूनिकॉर्न "ढाल" है।

सौभाग्य से Nginx इस भूमिका के लिए एक महान उम्मीदवार है, क्योंकि इसे कुशलतापूर्वक हजारों सैकड़ों समवर्ती ग्राहकों को संभालने के लिए डिज़ाइन किया गया है।

यह महत्वपूर्ण महत्व है कि रिवर्स प्रॉक्सी एक ही स्थानीय नेटवर्क के भीतर होना चाहिए जैसा कि यूनिकॉर्न (आमतौर पर एक ही भौतिक मशीन में w / यूनिकॉर्न एक यूनिक्स डोमेन सॉकेट के माध्यम से संचार करता है), ताकि नेटवर्क विलंबता को न्यूनतम रखा जाए।

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

मुख्य बिंदु # 2: गेंडा HTTP / 1.1 रखने-जीवित का समर्थन नहीं करता है

चूंकि यूनिकॉर्न ब्लॉकिंग आई / ओ का उपयोग करता है, इसका मतलब यह भी है कि यह HTTP / 1.1 की-लाइव सुविधा का समर्थन नहीं कर सकता है, क्योंकि धीमे क्लाइंट के लगातार कनेक्शन सभी उपलब्ध यूनिकॉर्न श्रमिकों पर जल्दी से कब्जा कर लेंगे।

इसलिए HTTP कीप-लिवर का लाभ उठाने के लिए, अनुमान लगाएं: रिवर्स प्रॉक्सी का उपयोग किया जाता है।

दूसरी ओर nginx, बस कुछ धागे का उपयोग करके हजारों समवर्ती कनेक्शनों को संभाल सकता है। इसलिए, इसमें समरूपता नहीं है, जैसे कि यूनिकॉर्न के पास सर्वर है (जो अनिवार्य रूप से कार्यकर्ता प्रक्रियाओं की मात्रा तक सीमित है), जिसका अर्थ है कि यह लगातार कनेक्शन को ठीक से संभाल सकता है। यह वास्तव में कैसे काम करता है, इसके बारे में और अधिक जानकारी यहाँ मिल सकती है

यही कारण है कि nginx क्लाइंट से जीवित कनेक्शन को स्वीकार करता है और उन्हें आम तौर पर Unix सॉकेट के माध्यम से सादे कनेक्शन पर Unicorn करने के लिए कहता है।

पॉइंट # 3: स्टैटिक फाइल्स को सर्व करने में यूनिकॉर्न बहुत अच्छा नहीं है

फिर से, स्थिर फ़ाइलों की सेवा एक ऐसी चीज़ है जो यूनिकॉर्न कर सकता है लेकिन कुशलतापूर्वक करने के लिए डिज़ाइन नहीं किया गया है।

दूसरी तरफ, नांजेक्स जैसे रिवर्स प्रॉक्सिस हालांकि इस पर बहुत बेहतर हैं (यानी। sendfile(2)और कैशिंग)।

अधिक

वहाँ अन्य अंक जो में दिए गए हैं कर रहे हैं दर्शन दस्तावेज़ (देखें "रिवर्स प्रॉक्सी के माध्यम से बेहतर प्रदर्शन" )।

नगीनेक्स की कुछ बुनियादी विशेषताओं को भी देखें ।

हम देखते हैं कि मौजूदा सॉफ़्टवेयर (यानी। नॅग्नेक्स) का लाभ उठाते हुए और "एक काम कर रहे हैं और इसे अच्छी तरह से करते हैं" के यूनिक्स दर्शन का पालन करते हुए, यूनिकॉर्न रैक ऐप्स की सेवा में कुशल होने के लिए एक सरल डिजाइन और कार्यान्वयन का पालन करने में सक्षम है (जैसे। अपने रेल एप्लिकेशन)।

अधिक जानकारी के लिए यूनिकॉर्न के दर्शन और डिजाइन दस्तावेजों का संदर्भ लें, जो यूनिकॉर्न के डिजाइन के पीछे के विकल्पों के बारे में अधिक विस्तार से बताते हैं और क्यों नाइनएक्स को यूनिकॉर्न के लिए एक अच्छा रिवर्स-प्रॉक्सी माना जाता है।


लेकिन क्यों न सिर्फ नग्नेक्स का उपयोग करें मुझे लगता है कि वह पूछ रहा था, न कि 'गेंडा को नग्नेक्स की आवश्यकता क्यों है'। उदाहरण के लिए, यूनिकॉर्न क्या प्रदान करता है जो नग्नेक्स नहीं करता है?
omikes

3
@oMiKeY यदि ऐसा है, तो मेरा मानना ​​है कि अन्य उत्तर इस प्रश्न को काफी अच्छे से स्वीकार करते हैं। मुझे अभी भी लगता है कि मेरा जवाब किसी के लिए उपयोगी जानकारी प्रदान करता है, जो नगीनेक्स और गेंडा के संयोजन को समझने की कोशिश कर रहा है ।
Agis

2
यह शुद्ध सोना है। धन्यवाद!
मैग्ने

14

Nginx का उपयोग एक गेंडा सर्वर पर धीमे ग्राहकों की सेवा के लिए किया जा सकता है क्योंकि धीमे ग्राहक गेंडा सर्वर को चोक कर देंगे। Nginx का उपयोग किसी प्रकार के छद्म बफ़र के रूप में किया जाता है जो धीमे ग्राहकों के लिए सभी अनुरोधों और प्रतिक्रियाओं का उपयोग करता है।

Http://unicorn.bogomips.org/ देखें

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