2009-03-16 15 views
53

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

अब बॉक्स के बाहर निर्मित स्केलेबिलिटी है। बस अतिरिक्त सर्वर और नोड्स जोड़ें और यह स्वचालित रूप से स्केल होगा, यह है कि यह कैसे काम करता है? क्या यह सहायक सर्वर के साथ 500000+ समवर्ती कनेक्शन को संभाल सकता है।

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

धन्यवाद

+1

यह वास्तव में एक बड़ा विषय है, मुझे लगता है कि आप सर्वर सॉफ़्टवेयर –

उत्तर

3

जेट्टी शायद प्रवेश द्वार, लेकिन अभिनेता अनुरोध, मैं चहचहाना-esque उदाहरण पर एक नज़र होने की सलाह देते हैं सर्विसिंग समाप्त होता है, 'जल्दी से चलना' को देखने के लिए कैसे आप एक बनाने में सक्षम हो जाएगा बहुत स्केलेबल सेवा। आईआईआरसी, यह उन चीजों में से एक है जिसने ट्विटर लोगों को नोटिस किया।

170

स्केलेबिलिटी के लिए लिफ्ट का दृष्टिकोण एक मशीन के भीतर है। मशीनों में स्केलिंग एक बड़ा, कठिन विषय है। संक्षिप्त जवाब यह है: स्कैला और लिफ्ट क्षैतिज स्केलिंग में मदद या बाधा डालने के लिए कुछ भी नहीं करते हैं।

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

एक सामान्य ढांचा एक पृष्ठ अनुरोध की सेवा के लिए थ्रेड का उपयोग करता है। जब क्लाइंट कनेक्ट होता है, तो फ्रेमवर्क पूल के बाहर थ्रेड निर्दिष्ट करता है। वह धागा तब तीन चीजें करता है: यह सॉकेट से अनुरोध पढ़ता है; यह कुछ गणना करता है (संभावित रूप से डेटाबेस में I/O शामिल है); और यह सॉकेट पर प्रतिक्रिया भेजता है। हर कदम पर काफी हद तक, थ्रेड कुछ समय के लिए अवरुद्ध हो जाएगा। अनुरोध पढ़ने पर, यह नेटवर्क की प्रतीक्षा करते समय ब्लॉक कर सकता है। गणना करते समय, यह डिस्क या नेटवर्क I/O पर अवरुद्ध कर सकता है। यह डेटाबेस की प्रतीक्षा करते समय भी ब्लॉक कर सकता है। आखिरकार, प्रतिक्रिया भेजने के दौरान, यदि क्लाइंट धीरे-धीरे डेटा प्राप्त करता है और टीसीपी विंडो भर जाती है तो यह ब्लॉक कर सकती है। कुल मिलाकर, थ्रेड 30% 90% समय अवरुद्ध हो सकता है। हालांकि, यह एक अनुरोध पर 100% समय बिताता है।

एक जेवीएम वास्तव में धीमा होने से पहले इतने सारे धागे का समर्थन कर सकता है। थ्रेड शेड्यूलिंग, साझा-मेमोरी इकाइयों (जैसे कनेक्शन पूल और मॉनीटर) के लिए विवाद, और मूल ओएस सभी प्रतिबंधों को सीमित करता है कि JVM कितने थ्रेड बना सकता है।

ठीक है, यदि JVM अपनी अधिकतम संख्या में थ्रेड सीमित है, और थ्रेड की संख्या निर्धारित करती है कि सर्वर कितने समवर्ती अनुरोधों को संभाल सकता है, तो समवर्ती अनुरोधों की संख्या थ्रेड की संख्या द्वारा निर्धारित की जाएगी।

(अन्य मुद्दों कि निचली सीमा --- जीसी ताड़ना, उदाहरण के लिए लागू कर सकते हैं। धागे एक मौलिक सीमित कारक है, लेकिन न केवल एक है!)

लिफ्ट अनुरोध से धागा अलग करता। लिफ्ट में, कोई अनुरोध नहीं है, एक अनुरोध है। इसके बजाय, एक धागा एक क्रिया करता है (अनुरोध पढ़ने की तरह), फिर एक अभिनेता को एक संदेश भेजता है। अभिनेता कहानी का एक महत्वपूर्ण हिस्सा हैं, क्योंकि वे "हल्के वजन" धागे के माध्यम से निर्धारित हैं। अभिनेताओं के भीतर संदेशों को संसाधित करने के लिए धागे का एक पूल उपयोग किया जाता है। अभिनेताओं के अंदर अवरुद्ध संचालन से बचना महत्वपूर्ण है, इसलिए ये धागे तेजी से पूल में लौट आते हैं।(ध्यान दें कि यह पूल एप्लिकेशन के लिए दृश्यमान नहीं है, यह कलाकारों के लिए स्कैला के समर्थन का हिस्सा है।) उदाहरण के लिए, वर्तमान में डेटाबेस या डिस्क I/O पर अवरुद्ध एक अनुरोध, अनुरोध-हैंडलिंग थ्रेड पर कब्जा नहीं रखता है। अधिक कनेक्शन प्राप्त करने के लिए अनुरोध हैंडलिंग थ्रेड लगभग तुरंत उपलब्ध है।

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

+5

के विशिष्ट क्षेत्रों के लिए अपने उत्तर को बेहतर ढंग से केंद्रित करते हैं, मुझे आपको देने के लिए अधिक वोट चाहिए। यह एक सही जवाब था। –

+23

मुझे लगता है कि आप एक हिट और रनर प्रश्नकर्ता का शिकार हैं। आपका जवाब बहुत बेहतर है तो प्रश्न खुद ही योग्य है। –

+1

@mtnygard: आप कहते हैं "अभिनेताओं के अंदर संचालन को अवरुद्ध करने से बचना महत्वपूर्ण है"। क्या होगा यदि मुझे कुछ I/O करने की आवश्यकता है जो संभावित रूप से कुछ समय के लिए अवरुद्ध हो सकता है? क्या मुझे एक और थ्रेड लॉन्च करना चाहिए? –

20

mtnyguard पर

"स्काला और लिफ्ट या तो मदद के लिए कुछ भी नहीं है या बाधा क्षैतिज स्केलिंग"

बिल्कुल ठीक नहीं है। लिफ्ट अत्यधिक राज्यव्यापी ढांचा है। उदाहरण के लिए यदि कोई उपयोगकर्ता किसी फॉर्म का अनुरोध करता है, तो वह केवल उसी मशीन पर अनुरोध पोस्ट कर सकता है जहां से फॉर्म आया था, क्योंकि फ़ॉर्म प्रोसेसिंग कार्रवाई सर्वर स्थिति में सहेजी जाती है।

और यह वास्तव में एक चीज है जो एक तरह से स्केलेबिलिटी में बाधा डालती है, क्योंकि यह व्यवहार साझा कुछ भी वास्तुकला के लिए असंगत नहीं है।

इसमें कोई संदेह नहीं है कि लिफ्ट अत्यधिक प्रदर्शनकारी है लेकिन परफॉर्मेंस और स्केलेबिलिटी दो अलग-अलग चीजें हैं। तो यदि आप लिफ्ट के साथ क्षैतिज स्केल करना चाहते हैं तो आपको लोडबलैंसर पर चिपचिपा सत्र परिभाषित करना होगा जो एक सत्र के दौरान एक ही मशीन पर उपयोगकर्ता को रीडायरेक्ट करेगा।

+12

हाँ ...यह सही है और फोरस्क्वेयर और नोवेल पल्स दोनों दर्शाते हैं कि लिफ्ट की चिपचिपा सत्र आवश्यकता क्षैतिज स्केलिंग के लिए कोई मुद्दा नहीं है ... और आने वाले वाणिज्यिक लिफ्ट क्लस्टर मैनेजर के साथ, क्लस्टर का प्रबंधन और भी आसान होगा। –

+1

लिफ्ट क्लस्टर प्रबंधक कहां है? – Lukasz

1

मुझे वास्तव में @ ड्रे का जवाब पसंद है क्योंकि वह क्षैतिज स्केलेबिलिटी के लिए संभावित समस्या होने के कारण लिफ्ट की स्थिति को सही ढंग से बताता है।

समस्या - मेरी पूरी चीज का वर्णन करने के बजाय, इस पोस्ट पर चर्चा (सामग्री नहीं) देखें। http://javasmith.blogspot.com/2010/02/automagically-cluster-web-sessions-in.html

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

  • आपके पास अक्का लिफ्ट एकीकरण है जो इसमें एक और फायदा होगा।
संबंधित मुद्दे