अत्यधिक समवर्ती के लिए अवसंरचना, उच्च लिखें DB


17

मेरी आवश्यकताएं हैं:

  • 3000 कनेक्शन
  • 70-85% लिखो बनाम पढ़ो

वर्तमान में, हम 700 कनेक्शनों में एक उच्च-सीपीयू, अतिरिक्त बड़े इंस्टेंस को अधिकतम कर रहे हैं। सभी 8 कोर अधिकतम हो गए हैं। हमें लगता है कि यह समवर्ती कनेक्शन की संख्या है क्योंकि मेमोरी ठीक है। लेखन स्वयं बहुत सरल है (सत्यापन धीमी चीजें हैं)। 3000 के पैमाने पर, हमें कई सर्वरों पर जाने की जरूरत है, वर्तमान विकल्प:

  • MySQL शेयरिंग
  • MongoDB क्लस्टर
  • कैसेंड्रा
  • Hadoop & MySQL (Hadoop कैश, MySQL के लिए सिंगल डंप)
  • MongoDB और MySQL (Hadoop के बजाय, हम कैश के लिए मैंगो का उपयोग करते हैं)

कनेक्शन की इस संख्या को संभालने के लिए, कई प्रश्न:

  1. क्या MySQL शेयरिंग समवर्ती कनेक्शन को संभाल सकता है?
  2. क्या कोई एकल मास्टर इन समवर्ती कनेक्शनों को संभाल सकता है, या मोंगो जैसा एक बहु-सिर एक बेहतर विकल्प है?

मैं माफी माँगता हूँ अगर मैं अपनी समस्या का अच्छी तरह से वर्णन नहीं कर रहा हूँ। कृपया प्रश्न पूछें।


4
कार्यभार क्या है? कोई काम नहीं करने वाला कनेक्शन मेमोरी का उपभोग करता है, लेकिन सीपीयू नहीं, एक ऐप जो लिखने पर विवश है वह भी बहुत कम सीपीयू की खपत करता है क्योंकि यह हमेशा आई / ओ पर इंतजार कर रहा है। यदि आपके पास अपना सीपीयू अधिकतम है, तो इसका मतलब है कि आप किसी प्रकार की गणना कर रहे हैं; जहां आपकी अड़चन है, न तो प्रति कनेक्शन की संख्या पर, न ही लेखन गतिविधि पर।
गयुस

उत्तर के लिए धन्यवाद। mysqlslap परीक्षण दुख की बात है, जैसा कि आप अधिक कनेक्शनों से ऊपर उठते हैं , सब कुछ कर दिया जाता है। 1 -> 100 -> 500 -> 1000. 3000 समवर्ती कनेक्शन पर mysqlslap बस खुद को मारता है। इस सरल परीक्षण के माध्यम से सीपीयू और आई / ओ 700 कनेक्शनों पर मिटाए जाने लगते हैं। यह वही है जो हम देख रहे हैं, लेकिन इससे भी बदतर है क्योंकि हम अधिक डेटा हैं।
जस्टिन

जवाबों:


5

यदि आप MySQL का उपयोग मुख्य डेटाबेस के रूप में कर रहे हैं, तो आप MySQL प्रतिकृति के माध्यम से स्टार टोपोलॉजी का उपयोग करने पर विचार कर सकते हैं।

अब, इससे पहले कि आप USQLHH, ROFL और OMG को MySQL प्रतिकृति कहें, मुझे सुन लें।

एक स्टार टोपोलॉजी आपको एक डीबी सर्वर (डिस्ट्रीब्यूशन मस्टर [डीएम]) को लिखने और SQL कमांड को कई डीबी सर्वरों को भेजने की अनुमति देता है। आप ऐसे डीबी इन्फ्रास्ट्रक्चर को कैसे सेटअप करते हैं?

यहाँ विवरण है

आपके पास 5 DB सर्वर (सर्वर A, B, C, D, E) हैं

सर्वर ए

  • MySQL प्रतिकृति सेटअप में, यह मास्टर होगा
  • डीएम के रूप में विशेष भूमिका निभाता है
  • सर्वर बी, सी, डी, ई के मास्टर
  • सभी टेबल स्टोरेज इंजन BLACKHOLE (/ dev / null) का उपयोग करते हैं
  • केवल बाइनरी लॉग स्टोर करता है
  • नंगे धातु की मशीन
  • लाभ
    • डीएम पर सभी तालिकाओं का उपयोग करने के बाद से बहुत तेज लिखते हैं
    • नेटवर्क लेटेंसी एक समस्या से कम है क्योंकि पढ़ता डीबी गतिविधि का 15-30% है
    • सभी दासों को डीएम से सख्ती से अपडेट किया जाता है

सर्वर बी, सी, डी, ई

  • ए का गुलाम
  • सर्वर भारी चयन के लिए एक आधार है
  • सर्वर वर्चुअल या बेयर मेटल हो सकता है
  • उन सभी सर्वरों के लिए जिनकी यूजर टेबल स्टोरेज इंजन InnoDB का उपयोग करती है
    • यह एक गर्म स्टैंडबाय DB सर्वर के रूप में सर्वर कर सकता है
    • इसके खिलाफ गैर-कानूनी बैकअप चलाया जा सकता है
  • उन सभी सर्वरों के लिए जिनके यूजर टेबल स्टोरेज इंजन MyISAM का उपयोग करते हैं
    • रीड-ओनली ऑप्रेशन के साथ सेट अप करें
    • टेबल्स को रीडायरेक्ट करने के लिए उनके पंक्ति प्रारूप को फिर से बनाया जा सकता है

मैंने पहले भी इस पर पोस्ट लिखी हैं

टिप टॉप शेप में MySQL प्रतिकृति रखने के लिए


2

माईएसक्यूएल कलस्टर शार्किंग का एक और तरीका हो सकता है। यहां पोस्ट देखें

मैं कैसंड्रा का बहुत बड़ा प्रशंसक भी हूं, लेकिन यह आपके डेटा मॉडल और आपके द्वारा किए जाने वाले प्रश्नों पर बहुत कुछ निर्भर करता है। कैसेंड्रा तेजी से लिखने के लिए, क्योंकि वे हमेशा डिस्क पर अनुक्रमिक होते हैं।


2

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

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

ओह, और जब तक मुझे लगता है कि आप कुछ इस तरह से स्केल करने की कोशिश कर सकते हैं (सभी नोड 3K कॉनस को हैंडल करते हुए एकल), मुझे नहीं लगता कि आप इसे क्लाउड में कर सकते हैं।


1

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

शार्डिंग के साथ आप आम तौर पर ठीक (2x db-server == 2x कनेक्शन) को स्केल कर सकते हैं, लेकिन यह आपके डेटासेट की प्रकृति पर निर्भर करता है और आप इसे कैसे शार्प में विभाजित कर सकते हैं।


1

मैं व्यक्तिगत रूप से प्रशासन, स्केलेबिलिटी, सामान्य सहजता के उपयोग के लिए MongoDB पसंद करता हूं। इसके अलावा, जब तक मुझे वास्तव में RDBMS की आवश्यकता नहीं होती है, मैं नो-एसक्यूएल का उपयोग करने जा रहा हूं।

उस के साथ कहा, DB कि आपके आवेदन के लिए सबसे अधिक समझ में आता है चुनें। यदि आपको लेनदेन की आवश्यकता है या जॉइन के बिना अपने ऐप को डिज़ाइन नहीं कर सकते हैं (या यह सीधे सादे उनके साथ अधिक समझ में आता है) तो RDBMS (MySQL, PostGres, आदि) का उपयोग करें

जबकि मैं व्यक्तिगत रूप से MongoDB पसंद करता हूं, यह विचार कि MySQL बड़े पैमाने पर लेनदेन को संभाल नहीं सकता है, पूरी तरह से गलत है। फेसबुक इंजीनियरिंग टीम (और इसके भीतर MySQL टीम) इसके साथ महान विस्तार में जाती है। इसके अलावा Etsy Ops टीम ब्लॉग देखें; वे MySQL से भी प्यार करते हैं।

अंत में, मैं एक MySQL कैश के लिए MongoDB का उपयोग नहीं करूंगा; उस के लिए Memcached का उपयोग करें।

Redis एक इन-रैम की-वैल्यू स्टोर भी है जो कुछ उपयोग-मामलों को संभालने के लिए अच्छा है। Blog.agoragames.com पर कुछ ब्लॉग प्रविष्टियाँ हैं जो कुछ उपयोग-मामलों का वर्णन करती हैं।

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

अंत में, क्षमता योजना की भविष्यवाणी करना आसान नहीं है। आपको यथासंभव यथार्थवादी परिस्थितियों में परीक्षण करने की आवश्यकता है और जो आप देखते हैं उसके आधार पर रीमेडिएट करने के लिए तैयार रहें। अफसोस की बात है कि "कंप्यूटर विज्ञान" विज्ञान के रूप में ज्यादा कला है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.