2011-03-14 16 views
31

हम अपने वर्तमान सिस्टम का एक अवलोकन कर रहे हैं, यह पता लगाने की कोशिश कर रहे हैं कि क्या हम प्रदर्शन & विश्वसनीयता में सुधार कर सकते हैं।रेल के लिए MySQL क्लस्टर (एनडीबी) बनाम MySQL प्रतिकृति (InnoDB) 3 ऐप्स: पेशेवर/विपक्ष?

वर्तमान में हम आंतरिक रेल ऐप्स और हमारी रेल आधारित वेबसाइट का एक गुच्छा चलाते हैं। कुछ पहले से ही रेल 3 हैं, कुछ को रेल 3 में परिवर्तित किया जा रहा है। वे सभी निम्नलिखित MySQL सेटअप से कनेक्ट होते हैं।

mysql01 (master server) => mysql02 (slave) => (दैनिक डीबी बैकअप एक ड्राइव पर, जिसका दैनिक, साप्ताहिक, मासिक & अर्ध-वार्षिक आधार पर बैक अप लिया जाता है)।

सभी लिखते हैं mysql01 पर होते हैं और सबसे कम पढ़ते हैं, कुछ "अधिक संसाधन उपभोग पढ़ने" (जैसे मासिक/साप्ताहिक रिपोर्ट जो चलाने के लिए 3-10 मिनट लेते हैं और डेटा को सीएसवी या बैकअप में डंप करते हैं) पर जाएं mysql02 सर्वर। हमें हमारी साइट पर प्रति दिन लगभग 3-5 के दौरे मिलते हैं, और लगभग 20-30 आंतरिक उपयोगकर्ता हैं, जो इन्वेंट्री, ऑर्डर प्रोसेसिंग इत्यादि के लिए रोज़ाना विभिन्न ऐप्स का उपयोग करते हैं। इसलिए ये सर्वर विशेष रूप से उन भारी रिपोर्टों के तहत भारी लोड नहीं हैं, वैसे भी गुलाम का भागो।

सभी सर्वर डेबियन लेनी वीएम पर virtualized XEN पूल में चलाए जाते हैं।

तो हम सिस्टम की समीक्षा कर रहे हैं, और किसी ने MySQL Cluster (NDB) सेटअप पर स्विच करने का सुझाव दिया है। मैं सिद्धांत में इसके बारे में जानता हूं, लेकिन वास्तव में इसे कभी नहीं चलाया है। तो क्या कोई भी जिसने इसका अनुभव किया है, हमारे मौजूदा सेटअप बनाम किसी भी समर्थक/विपक्ष के बारे में पता है, और किसी विशेष चेतावनी के बारे में जब इसमें रूबी/रेल अनुप्रयोग शामिल हैं?

उत्तर

69

एक नज़र लेने लायक InnoDB और MySQL क्लस्टर (NDB) हाल ही में किए गए दस्तावेज़ों पर पोस्ट किए गए ... का एक अच्छा तुलना नहीं है: http://dev.mysql.com/doc/refman/5.1/en/mysql-cluster-compared.html

क्लस्टर वास्तुकला MySQL सर्वर का एक पूल है कि द्वारा पहुँचा रहे होते हैं अनुप्रयोगों); ये MySQL सर्वर वास्तव में क्लस्टर डेटा संग्रहीत नहीं करते हैं, डेटा नीचे डेटा नोड्स के पूल पर विभाजित होता है। प्रत्येक MySQL सर्वर के पास सभी डेटा नोड्स में डेटा तक पहुंच है। यदि एक MySQL सर्वर डेटा का एक टुकड़ा बदलता है तो यह तुरंत अन्य सभी MySQL सर्वरों के लिए दृश्यमान होता है।

जाहिर है, यह आर्किटेक्चर डेटाबेस को स्केल करना बेहद आसान बनाता है। शेरिंग के विपरीत, एप्लिकेशन को यह जानने की आवश्यकता नहीं है कि डेटा कहां रखा जाता है - यह केवल सभी उपलब्ध MySQL सर्वरों में संतुलन लोड कर सकता है। MySQL प्रतिकृति क्लस्टर के साथ स्केलिंग के विपरीत आप लिखने के साथ ही पढ़ता है। नए डेटा नोड्स या MySQL सर्वर को मौजूदा क्लस्टर में जोड़ा जा सकता है, जिसमें एप्लिकेशन को सेवा की कोई हानि नहीं होती है।

MySQL क्लस्टर के साझा-रहित आर्किटेक्चर का अर्थ है कि यह अत्यधिक उच्च उपलब्धता (99.9 99% +) प्रदान कर सकता है। हर बार जब आप डेटा बदलते हैं, तो यह सिंक्रनाइज़ रूप से दूसरे डेटा नोड में दोहराया जाता है; यदि एक डेटा नोड विफल रहता है तो अनुप्रयोग & लिखते हैं अनुरोध बैकअप डेटा नोड द्वारा स्वचालित रूप से संभाले जाते हैं।

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

MySQL क्लस्टर एक एकल MySQL सर्वर से स्थापित करने के लिए और अधिक जटिल हो सकता है लेकिन यह आपको अपने आवेदन में शेडिंग को लागू करने या पढ़ने/लिखने से रोक सकता है। स्विंग्स और चौराहे।

MySQL क्लस्टर से सर्वश्रेष्ठ प्रदर्शन और स्केलेबिलिटी प्राप्त करने के लिए आपको अपने एप्लिकेशन को ट्विक करने की आवश्यकता हो सकती है (क्लस्टर प्रदर्शन ट्यूनिंग व्हाइट पेपर देखें: http://www.mysql.com/why-mysql/white-papers/mysql_wp_cluster_perfomance.php)। यदि आपके पास एप्लिकेशन है तो यह आमतौर पर एक बड़ा सौदा नहीं है, लेकिन यदि आप किसी और के एप्लिकेशन का उपयोग कर रहे हैं जिसे आप संशोधित नहीं कर सकते हैं तो यह एक समस्या हो सकती है।

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

+0

धन्यवाद - बहुत गहन जवाब। – konung

संबंधित मुद्दे