2012-02-01 9 views
10

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

तो मेरे सवाल होगा: क्या श्रृंखला में अतिरिक्त परत होने के लाभ हैं:

client -> nginx -> unicorn -> unicorn worker 

उत्तर

17

यूनिकॉर्न "धीमी ग्राहकों" को संभालने के लिए नहीं बनाया गया था। आप PHILOSOPHY मदद फ़ाइल में इस बारे में और अधिक पढ़ सकते हैं:

अधिकांश मानक हमने देखा आप इस बता नहीं है, और गेंडा धीमी गति से ग्राहकों के बारे में परवाह नहीं है ... लेकिन आप ऐसा करना चाहिए।

एक "धीमी ग्राहक" आपके डेटासेंटर के बाहर कोई ग्राहक हो सकता है। स्थानीय नेटवर्क के भीतर नेटवर्क यातायात हमेशा ट्रैफिक से तेज़ होता है जो इसके बाहर पार हो जाता है। भौतिकी के नियम अन्यथा अनुमति नहीं देते हैं।

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

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

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

+0

धन्यवाद! यही वह जवाब है जिसे मैं ढूंढ रहा था :) –

+0

बहुत स्पष्ट है। धन्यवाद – berto77