मैं कई NoSQL डेटाबेस और SQL डेटाबेस में आया हूं। इन डेटाबेस की ताकत और कमजोरियों को मापने के लिए अलग-अलग पैरामीटर हैं और स्केलेबिलिटी उनमें से एक है। इन डेटाबेस में क्षैतिज और लंबवत स्केलिंग के बीच क्या अंतर है?
मैं कई NoSQL डेटाबेस और SQL डेटाबेस में आया हूं। इन डेटाबेस की ताकत और कमजोरियों को मापने के लिए अलग-अलग पैरामीटर हैं और स्केलेबिलिटी उनमें से एक है। इन डेटाबेस में क्षैतिज और लंबवत स्केलिंग के बीच क्या अंतर है?
जवाबों:
क्षैतिज स्केलिंग का मतलब है कि आप संसाधनों के अपने पूल में अधिक मशीनों को जोड़कर स्केल करते हैं जबकि वर्टिकल स्केलिंग का मतलब है कि आप मौजूदा मशीन में अधिक पावर (सीपीयू, रैम) जोड़कर स्केल करते हैं ।
इसे याद रखने का एक आसान तरीका एक सर्वर रैक पर एक मशीन के बारे में सोचना है, हम क्षैतिज दिशा में अधिक मशीनें जोड़ते हैं और ऊर्ध्वाधर दिशा में एक मशीन में अधिक संसाधन जोड़ते हैं ।
एक डेटाबेस की दुनिया में क्षैतिज-स्केलिंग अक्सर डेटा के विभाजन पर आधारित होती है अर्थात प्रत्येक नोड में डेटा का केवल एक हिस्सा होता है, ऊर्ध्वाधर-स्केलिंग में डेटा एक नोड पर रहता है और स्केलिंग मल्टी-कोर के माध्यम से किया जाता है अर्थात लोड के बीच फैलता है उस मशीन का CPU और RAM संसाधन।
क्षैतिज-स्केलिंग के साथ अक्सर मौजूदा पूल में अधिक मशीनों को जोड़कर गतिशील रूप से स्केल करना आसान होता है - वर्टिकल-स्केलिंग अक्सर एक मशीन की क्षमता तक सीमित होती है, उस क्षमता से परे स्केलिंग में अक्सर डाउनटाइम शामिल होता है और ऊपरी सीमा के साथ आता है।
क्षैतिज स्केलिंग के अच्छे उदाहरण हैं कैसंड्रा, मोंगोडीबी, गूगल क्लाउड स्पैनर .. और वर्टिकल स्केलिंग का एक अच्छा उदाहरण MySQL - Amazon RDS (MySQL का क्लाउड संस्करण) है। यह छोटे से बड़े मशीनों में स्विच करके लंबवत पैमाने पर एक आसान तरीका प्रदान करता है। इस प्रक्रिया में अक्सर डाउनटाइम शामिल होता है।
इन-मेमोरी डेटा ग्रिड्स जैसे गीगास्पेस एक्सएपी , जुटना आदि .. अक्सर क्षैतिज और ऊर्ध्वाधर स्केलिंग दोनों के लिए अनुकूलित होते हैं, क्योंकि वे डिस्क से बंधे नहीं होते हैं। बहु-कोर समर्थन के माध्यम से विभाजन और ऊर्ध्वाधर-स्केलिंग के माध्यम से क्षैतिज-स्केलिंग।
आप इस विषय पर मेरी पिछली पोस्टों में और अधिक पढ़ सकते हैं: स्केल-आउट बनाम स्केल-अप और एनबीटीएल विकल्प के पीछे सामान्य सिद्धांत
क्षैतिज रूप से स्केलिंग ===> आपके लिए हजारों मिनट एक साथ काम करेंगे।
लंबवत रूप से स्केलिंग ===> एक बड़ा झूला आपके लिए सभी काम करेगा।
आइए स्केलिंग की आवश्यकता से शुरू करें जो बढ़ते हुए संसाधन हैं ताकि आपका सिस्टम अब पहले की तुलना में अधिक अनुरोधों को संभाल सके।
जब आपको पता चलता है कि आपका सिस्टम धीमा हो रहा है और वर्तमान संख्या के अनुरोधों को संभालने में असमर्थ है, तो आपको सिस्टम को स्केल करने की आवश्यकता है।
यह आपको दो विकल्प प्रदान करता है। या तो आप सर्वर में संसाधनों को बढ़ाते हैं जो आप वर्तमान में उपयोग कर रहे हैं, अर्थात, रैम, सीपीयू, जीपीयू और अन्य संसाधनों की मात्रा बढ़ाएं। इसे वर्टिकल स्केलिंग के रूप में जाना जाता है।
ऊर्ध्वाधर स्केलिंग आमतौर पर महंगा है। यह सिस्टम की खराबी को सहन नहीं करता है, अर्थात यदि आप एकल सर्वर के साथ चल रहे एप्लिकेशन को स्केल कर रहे हैं, यदि वह सर्वर डाउन हो जाता है, तो आपका सिस्टम डाउन हो जाएगा। साथ ही ऊर्ध्वाधर स्केलिंग में थ्रेड्स की मात्रा समान रहती है। जब प्रक्रिया होती है तो वर्टिकल स्केलिंग से आपके सिस्टम को एक पल के लिए नीचे जाने की आवश्यकता हो सकती है। सर्वर पर संसाधन बढ़ाने के लिए पुनरारंभ की आवश्यकता होती है और आपके सिस्टम को नीचे रखा जाता है।
इस समस्या का एक और समाधान सिस्टम में मौजूद सर्वर की मात्रा को बढ़ा रहा है। यह समाधान तकनीक उद्योग में अत्यधिक उपयोग किया जाता है। यह अंततः प्रत्येक सर्वर में प्रति सेकंड दर के अनुरोध को कम करेगा। यदि आपको सिस्टम को स्केल करने की आवश्यकता है, तो बस एक और सर्वर जोड़ें, और आप कर रहे हैं। आपको सिस्टम को पुनरारंभ करने की आवश्यकता नहीं होगी। प्रत्येक प्रणाली में थ्रेड्स की संख्या उच्च थ्रूपुट तक ले जाती है। प्रत्येक सर्वर के लिए समान रूप से अनुरोधों को अलग करने के लिए, आपको लोड बैलेंसर जोड़ने की जरूरत है जो वेब सर्वर के लिए रिवर्स प्रॉक्सी के रूप में कार्य करेगा। इस पूरे सिस्टम को सिंगल क्लस्टर कहा जा सकता है। आपके सिस्टम में बड़ी संख्या में अनुरोध हो सकते हैं जिसके लिए अधिक मात्रा में क्लस्टर की आवश्यकता होगी।
आशा है कि आपको सिस्टम को स्केलिंग शुरू करने की पूरी अवधारणा मिलेगी।
एक अतिरिक्त आर्किटेक्चर है जिसका उल्लेख नहीं किया गया था - SQL- आधारित डेटाबेस सेवाएँ जो मैन्युअल शार्पिंग की जटिलता के बिना क्षैतिज स्केलिंग को सक्षम करती हैं। ये सेवाएं पृष्ठभूमि में तीक्ष्णता करती हैं, इसलिए वे आपको एक पारंपरिक SQL डेटाबेस चलाने में सक्षम करते हैं और जैसे आप NoSQL इंजन जैसे MongoDB या CouchDB के साथ स्केल करते हैं। दो सेवाएँ जिनसे मैं परिचित हूँ, वो पोस्टग्रैडक्यू के लिए एंटरप्राइजडीबी और माईएसक्यूएल के लिए ज़ेराउंड हैं । मैंने Xeround द्वारा एक गहन पोस्ट देखा, जो बताता है कि SQL डेटाबेस पर स्केल-आउट मुश्किल क्यों है और वे इसे अलग तरीके से कैसे करते हैं - इसे नमक के दाने के साथ व्यवहार करें क्योंकि यह एक विक्रेता पद है। विकिपीडिया के क्लाउड डेटाबेस प्रविष्टि की भी जाँच करेंवहाँ SQL बनाम NoSQL और सेवा बनाम स्व-होस्ट, विक्रेताओं की एक सूची और प्रत्येक संयोजन के लिए स्केलिंग विकल्पों की एक अच्छी व्याख्या है। ;)
हां, क्षैतिज रूप से स्केलिंग का अर्थ है अधिक मशीनों को जोड़ना, लेकिन इसका अर्थ यह भी है कि मशीनें क्लस्टर में बराबर हैं। MySQL प्रतिकृति के उपयोग के माध्यम से डेटा पढ़ने के संदर्भ में क्षैतिज रूप से स्केल कर सकता है, लेकिन एक बार जब यह सर्वर मेम / डिस्क की क्षमता तक पहुंच जाता है, तो आपको सर्वर पर डेटा को तेज करना शुरू करना होगा। यह तेजी से और अधिक जटिल हो जाता है। अक्सर प्रतिकृतियों के अनुरूप डेटा रखना एक समस्या है क्योंकि प्रतिकृति दर अक्सर डेटा परिवर्तन दरों के साथ बनाए रखने के लिए बहुत धीमी होती है।
Couchbase भी एक शानदार NoSQL क्षैतिज स्केलिंग डेटाबेस है, जिसका उपयोग कई व्यावसायिक उच्च उपलब्धता अनुप्रयोगों और खेलों में किया जाता है और यकीनन श्रेणी में सबसे अधिक प्रदर्शन होता है। यह क्लस्टर भर में डेटा को स्वचालित रूप से विभाजित करता है, नोड्स जोड़ना सरल है, और आप कमोडिटी हार्डवेयर, सस्ती vm इंस्टेंस (उदाहरण के लिए AWS में उच्च डिस्क, हाई डिस्क मशीनों के बजाय बड़े का उपयोग कर सकते हैं) का उपयोग कर सकते हैं। यह मेमबेस (मेमकेड) से बनाया गया है, लेकिन दृढ़ता को बढ़ाता है। इसके अलावा, काउचबेस के मामले में, प्रत्येक नोड रीड और राइट कर सकता है, और क्लस्टर में बराबर होता है, केवल फ़ेलओवर प्रतिकृति के साथ (MySQL की तरह सभी सर्वरों में पूर्ण डेटासेट प्रतिकृति नहीं)।
प्रदर्शन-वार, आप एक उत्कृष्ट सिस्को बेंचमार्क देख सकते हैं: http://blog.couchbase.com/understanding-performance-benchmark-published-cisco-and-solarflare-use-couchbase-server
यहाँ Couchbase वास्तुकला के बारे में एक महान ब्लॉग पोस्ट है: http://horicky.blogspot.com/2012/07/couchbase-Healthecture.html
पारंपरिक संबंधपरक डेटाबेस क्लाइंट / सर्वर डेटाबेस सिस्टम के रूप में डिजाइन किए गए थे। उन्हें क्षैतिज रूप से बढ़ाया जा सकता है लेकिन ऐसा करने की प्रक्रिया जटिल और त्रुटि प्रवण होती है। एनयूबीडीबी जैसे नए एसक्यूएल डेटाबेस मेमोरी-सेंट्रिक वितरित डेटाबेस सिस्टम हैं जिन्हें पारंपरिक आरडीबीएमएस के एसक्यूएल / एसीआईडी गुणों को बनाए रखते हुए क्षैतिज रूप से स्केल करने के लिए डिज़ाइन किया गया है।
NuoDB के बारे में अधिक जानकारी के लिए, पढ़ें तकनीकी श्वेत पत्र ।
Oracle, db2 जैसे SQL डेटाबेस भी साझा डिस्क क्लस्टर के माध्यम से क्षैतिज स्केलिंग का समर्थन करते हैं। उदाहरण के लिए Oracle RAC, IBM DB2 purescale या Sybase ASE क्लस्टर संस्करण। क्षैतिज स्केलिंग को प्राप्त करने के लिए Oracle RAC सिस्टम या DB2 purescale सिस्टम में नया नोड जोड़ा जा सकता है।
लेकिन दृष्टिकोण नोएसक्यूएल डेटाबेस (जैसे मोंगोडब, काउचबीडी या आईबीएम क्लाउडेंट) से अलग है, यह है कि डेटा शार्किंग क्षैतिज स्केलिंग का हिस्सा नहीं है। NoSQL डेटाबेस में क्षैतिज स्केलिंग के दौरान डेटा को बहाया जाता है।
आपके पास एक कंपनी है और केवल 1 कर्मचारी है लेकिन आपको 1 नया प्रोजेक्ट मिला है उस समय आप नए उम्मीदवार को नियुक्त करते हैं - यह क्षैतिज स्केलिंग है। जहाँ नया उम्मीदवार नई मशीनें हैं और परियोजना आपके एपीआई के लिए नया ट्रैफ़िक / कॉल है।
जहाँ एक आईआईटी / एनआईटी के साथ 1 प्रोजेक्ट के रूप में आपके एपी / ट्रैफिक के लिए सभी अनुरोधों को संभालना है। यदि किसी भी समय आपके एपीआई से अधिक अनुरोध किया जाता है, तो उसे आग दें और उसे एक उच्च बुद्धि एनआईटी / आईआईटी आदमी के साथ बदल दें - यह लंबवत है।
बहुत सारे भार बैलेंसरों को जोड़ने से अतिरिक्त ओवरहेड और विलंबता पैदा होती है और जो कि नोसुकल डेटाबेस में क्षैतिज रूप से बाहर स्केलिंग के लिए कमियां है। यह सवाल की तरह है कि लोग कहते हैं कि आरपीसी की सिफारिश नहीं की जाती है क्योंकि यह मजबूत नहीं है।
मुझे लगता है कि एक वास्तविक प्रणाली में हमें आज के सिस्टम के मल्टीकोर और क्लाउड कंप्यूटिंग क्षमताओं का उपयोग करने के लिए sql और nosql डेटाबेस दोनों का उपयोग करना चाहिए।
दूसरी ओर, जटिल लेनदेन संबंधी प्रश्नों का उच्च प्रदर्शन होता है यदि sql डेटाबेस जैसे oracle का उपयोग किया जा रहा हो। NoSql का उपयोग बिगडाटा और तीक्ष्णता द्वारा क्षैतिज मापनीयता के लिए किया जा सकता है।
स्वीकृत उत्तर क्षैतिज बनाम ऊर्ध्वाधर स्केलिंग की मूल परिभाषा पर हाजिर है। लेकिन आम धारणा के विपरीत कि डेटाबेस की क्षैतिज स्केलिंग केवल Cassandra, MongoDB, आदि के साथ संभव है, मैं जोड़ना चाहूंगा कि क्षैतिज स्केलिंग किसी भी पारंपरिक RDMS के साथ बहुत संभव है; वह भी बिना किसी तीसरे पक्ष के समाधान का उपयोग किए।
मुझे कई कंपनियों के बारे में पता है, विशेष रूप से सास आधारित कंपनियां जो ऐसा करती हैं। यह सरल अनुप्रयोग तर्क का उपयोग करके किया जाता है। आप मूल रूप से उपयोगकर्ताओं का एक सेट लेते हैं और उन्हें कई DB सर्वरों में विभाजित करते हैं। इसलिए उदाहरण के लिए, आपके पास आमतौर पर एक "मेटा" डेटाबेस / टेबल होता है जो क्लाइंट, डीबी सर्वर / कनेक्शन स्ट्रिंग्स आदि को स्टोर करेगा और एक टेबल जो क्लाइंट / सर्वर मैपिंग को स्टोर करेगा।
फिर प्रत्येक क्लाइंट से डीबी सर्वर पर सीधे अनुरोध किया जाता है कि वे किससे मैप किए गए हैं।
अब कुछ लोग कह सकते हैं कि यह क्षैतिज विभाजन के समान है और "सही" क्षैतिज स्केलिंग नहीं है और वे कुछ तरीकों से सही होंगे। लेकिन अंतिम परिणाम यह है कि आपने कई DB सर्वरों पर अपना DB बढ़ाया है।
क्षैतिज स्केलिंग के लिए दो दृष्टिकोणों के बीच एकमात्र अंतर यह है कि एक दृष्टिकोण (MongoDB, आदि) स्केलिंग डीबी सॉफ्टवेयर द्वारा ही किया जाता है। उस अर्थ में आप स्केलिंग "खरीद" रहे हैं। अन्य दृष्टिकोण में (RDBMS क्षैतिज स्केलिंग के लिए), स्केलिंग एप्लिकेशन कोड / लॉजिक द्वारा बनाया गया है।