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