चुनौतियाँ
मुझे पता है कि केवल डेटाबेस ऑब्जेक्ट्स, यानी टेबल और कॉलम जोड़ने जैसी प्रथाएं हैं, उन्हें कभी भी संशोधित या हटाना नहीं है
एक कंपनी में मैंने काम किया, कच्चे डेटा की एक रोलिंग विंडो लगभग 6 महीने के बराबर थी और 10 टीबी तक खा गई। डेटा को फिर RDBMS प्रारूप में संसाधित किया गया था, जिसमें उपयोग योग्य डेटा के 6 टीबी की लागत थी, जो रिपोर्ट किए गए डेटा के लगभग 10 वर्षों के लिए जिम्मेदार थी। इस स्तर पर, इस प्रकार की प्रथाएं केवल व्यावहारिक नहीं हैं। भंडारण महंगा है - शायद सबसे बड़ी गणना खर्च। यह कई दिलचस्प चुनौतियां प्रदान करता है:
- बैकअप - इन्सोडब प्लगइन्स महान और सभी हैं, लेकिन उस डेटा पर बैकअप समय बस उतना ही व्यावहारिक नहीं है
- बड़े डेटासेट के लिए बार - बार पुनर्स्थापित करें - विशेष रूप से यदि आपको परिचालन अवस्था में वापस आने के बाद पकड़ने के लिए प्रतिकृति की आवश्यकता होती है, तो दिन या सप्ताह लग सकते हैं
- नए उदाहरण बनाना / सीडिंग करना - अक्सर आपके द्वारा देव / परीक्षण में किए जा रहे कार्य में आपके डेटासेट में ETL (एक्सट्रैक्ट, ट्रांसफ़ॉर्म और लोड) कार्य शामिल होते हैं। क्यूए परीक्षण इकाइयों का उपयोग करके इन्हें सत्यापित करने की आवश्यकता है, लेकिन इसे गैर-विनाशकारी तरीके से करने की आवश्यकता है ताकि मूल उत्पादन डेटासेट संरक्षित हो। किसी आपदा में, आप इस समझ पर लंबे समय तक बहाल करने के लिए तैयार हो सकते हैं कि बैकअप एक बीमा पॉलिसी है और इरादे से बचने के लिए, DevOps विकास वर्कफ़्लो की आवश्यकता है कि, अनिवार्य रूप से, आप एक पुनर्स्थापना करने में सक्षम हो या एक नियमित आधार पर आपके डेटा की प्रतिलिपि (शायद दिन में कई बार)
- क्षमता - मेरे द्वारा बताए गए पैमाने पर उस डेटा के चारों ओर घूमना बहुत I / O गहन हो सकता है। न केवल आपको 1-3 में वर्णित समस्याओं को संबोधित करने की आवश्यकता है, लेकिन आपको इसे इस तरह से करने की आवश्यकता है जो आपके उत्पादन सिस्टम में आउटेज या प्रदर्शन मंदी का कारण नहीं बनता है।
जबकि उपरोक्त विचार छोटे पैमानों पर, बड़े पैमानों पर एक चिंता का विषय नहीं हो सकते हैं, ये बहुत बड़ी समस्या बन जाते हैं। इसका मतलब है कि यह बेहद महत्वपूर्ण है कि आप अपनी आवश्यकताओं को परिभाषित करें और अपने डेटासेट के आकार का पूर्वानुमान लगाएं।
आवश्यकताओं को परिभाषित करना
नतीजतन, आपको कई आवश्यकताओं को परिभाषित करने की आवश्यकता है:
- आरटीओ - बैकअप के लिए आरटीओ या रिस्टोर टाइम ऑब्जेक्टिव डेटाबेस बैकअप समाधान के सबसे महत्वपूर्ण ड्राइवरों में से एक है। हालांकि, पहली बार में यह अन्य समस्याओं के अधिकांश के लिए प्रासंगिक नहीं हो सकता है, यह अत्यंत प्रासंगिक हो जाता है जब आप पूछते हैं कि "क्या होगा अगर मैंने नए उदाहरण बनाने या बीजने के लिए अपने बैकअप समाधान का उपयोग किया है?"। मैं अगले भाग में ऐसा करने के लिए कुछ तकनीकों को कवर करूँगा।
- आरपीओ - बैकअप के लिए आरपीओ या पुनर्स्थापना बिंदु उद्देश्य ए) को परिभाषित करता है कि आप कितने मिनट (मिनट, दिन, सप्ताह, महीने, या साल) को पुनर्स्थापित करने में सक्षम हैं। बी) विभिन्न स्तरों पर बैकअप अंतराल और सी) आप किस तरह से बहाल कर सकते हैं । उदाहरण के लिए, ई-मेल डेटाबेस के लिए, संदेश स्तर बैकअप - एक विशिष्ट ई-मेल को पुनर्स्थापित करना - अक्सर मांग की जाती है। इसी तरह, आप पा सकते हैं कि कुछ दिनों में डेटा पूरी तरह से बेकार हो जाता है - इसलिए एक साल में वापस बहाल करने का कोई मतलब नहीं है।
- आपके डेटासेट का आकार - यह महत्वपूर्ण है क्योंकि 1MB डेटाबेस के लिए, आपका RTO अधिकांश बैकअप उत्पादों और समाधानों के साथ प्राप्त किया जा सकता है। हालांकि 10TB डेटाबेस के लिए, आप पाएंगे कि LTO 3 टेप के लिए एक पूर्ण, पंक्ति स्तर का बैकअप शायद आपके RTO को प्राप्त नहीं करेगा और आपके RPO के साथ हस्तक्षेप कर सकता है क्योंकि बैकअप आपकी बैकअप विंडो से अधिक होने लगते हैं। आप वास्तव में डेटासेट के इस बड़े हिस्से पर सिर्फ एक mysqldump नहीं कर सकते हैं, लेकिन संभवतः 1MB डेटाबेस पर इसके साथ भाग सकते हैं।
- डेटाबेस स्थिरता - एक अंतिम चीज जो निरंतर तैनाती, साइट विश्वसनीयता, स्केलेबिलिटी और उच्च-लाभकारीता में एक बड़ा अंतर बनाती है जब डेटाबेस के साथ काम करना आपकी आवश्यकता (या इसके अभाव) स्थिरता के लिए है। तीन बुनियादी प्रकार हैं: तत्काल स्थिरता, जस्ट-इन-टाइम (जेआईटी) स्थिरता और अंतिम स्थिरता
उपरोक्त प्रमुख विचारों के अलावा, आपको लाइसेंसिंग और समर्थन आवश्यकताओं (खुले स्रोत या बंद स्रोत; घर के समर्थन में, तीसरे पक्ष के समर्थन या विक्रेता समर्थन) पर विचार करने की आवश्यकता है आवेदन / भाषा आवश्यकताओं (कई डेटाबेस के लिए कनेक्टर महत्वपूर्ण हो सकते हैं;) आपका एप्लिकेशन संकलित किया गया है? क्या आपके पास स्रोत कोड तक पहुंच है? क्या आप इसे पुनः प्राप्त कर सकते हैं, या क्या यह किसी विक्रेता द्वारा प्रदान किया गया है? या क्या यह एक व्याख्या की गई भाषा पर चलता है?) राजनीतिक आवश्यकताएं (क्या आपका संगठन केवल ओरेकल पर भरोसा करता है? क्या वे ओरेकल से नफरत करते हैं? ? oracle engine में बनाया गया है! हम कभी भी MariaDB पर कैसे पोर्ट कर सकते हैं?
ये सभी चीजें (महत्वपूर्ण) आपके लिए उपलब्ध उपकरणों को प्रभावित करती हैं।
इन-हाउस डेटा प्रबंधन के लिए कुछ विकल्प
नोट: निम्नलिखित कोई रास्ता नहीं है, और अन्य SE उपयोगकर्ताओं को अतिरिक्त सुझावों के साथ झंकार करना चाहिए।
इस तरह से सामान्य विचार के साथ, मैं आपको उपरोक्त संबोधित करने के लिए कुछ तकनीकों और तकनीकों के साथ प्रदान करता हूं। सबसे पहले, अपने आप से पूछें कि क्या आपको वास्तव में RDBMS का उपयोग करने की आवश्यकता है या यदि Hadoop, CouchDB या यहां तक कि ऑब्जेक्ट ओरिएंटेड स्टोरेज (स्विफ्ट जैसा कुछ) के साथ असंरचित डेटा एक विकल्प है।
दूसरा, क्लाउड आधारित समाधान में देखने पर विचार करें। यह इस सिरदर्द में से कुछ को आउटसोर्स करता है और जटिल समस्याओं को उच्च योग्य (और भुगतान किए गए) व्यक्तियों को छोड़ देता है। हालाँकि, आप अपने बजट में इसे वास्तव में खा सकते हैं (क्लाउड प्रोवाइडर इस पर लाभ कमाते हैं, और एक निश्चित पैमाने पर, आप इन विशेषज्ञों को स्वयं नियोजित करने का जोखिम उठा सकते हैं,) या यदि आप विशिष्ट सुरक्षा या राजनीतिक के तहत काम कर रहे हैं आवश्यकताएँ (पढ़ें: हम बादल नहीं कर सकते) एक हाइब्रिड NFS / FibreChannel फाइलर पर विचार करें। इनमें से अधिकांश फाइलर, जैसे कि नेटएप, प्योर स्टोरेज और टेगाइल एक डेल्टा आधारित स्नैपशॉटिंग और क्लोनिंग तकनीक का समर्थन करते हैं, जो बैकअप लेने के लिए ए) के लिए बहुत उपयोगी हो सकती है, बी) बैकअप को बहाल करना और सी) नए बैकअप को सीडिंग करना।
इस बिंदु पर, मुझे यह ध्यान देने की आवश्यकता है कि मैं एक बैकअप और स्टोरेज विशेषज्ञ नहीं हूं, इसलिए इस समस्या के कुछ हिस्से हैं जिन्हें मैं अन्य समस्याओं (और हरियाली चरागाहों) पर स्थानांतरित करने से पहले कभी भी हल करने में सक्षम नहीं था।
लेकिन यह कहा जा रहा है, ये उत्पाद आपको अपने डेटाबेस के नीचे अंतर स्नैपशॉट लेने की अनुमति देते हैं। आपको अपने डेटाबेस इंस्टेंस में से एक पर "रीड लॉक के साथ एक पूर्ण" लॉक टेबल को स्क्रिप्ट करने की आवश्यकता होगी (एक रीड-ओनली स्लेव की सिफारिश की गई है) और अपने बिनलॉग स्थिति या जीटीआईडी को डंप करें लेकिन इन फाइलरों के लिए, एक बार जब आप कर लेंगे, तो आप सक्षम होंगे अपने डेटाबेस के नए उदाहरण बनाने के लिए इन स्नैप का उपयोग करें। आप एक अलग विभाजन पर बिनलॉग्स डालना चाहते हैं और इन विभाजनों पर केवल अपना डेटाबेस डेटा डाल सकते हैं। एक बार जब आप कर लेंगे, तो आप इन विभाजनों को क्लोन करने में सक्षम होंगे ( नेटऐप्स पर, इसे " फ्लेक्सक्लोन " के रूप में जाना जाता है।
ऐसा इसलिए है क्योंकि प्रत्येक ब्लॉक को पढ़ने के लिए फाइलर को यह निर्धारित करना होगा कि डेटा जमे हुए मूल स्नैपशॉट में रहता है या डेल्टा में। कई स्नैपशॉट के साथ वॉल्यूम / स्टोर के लिए, इसे कई बार जांचना होगा। आप डेटा को रीफ्रेश करके इसका अर्थ निकाल सकते हैं (मतलब, अपने स्नैपशॉट को छोड़ दें और इसे समय-समय पर फिर से क्लोन करें - जो स्वाभाविक और व्यवस्थित रूप से एक अच्छे निरंतर तैनाती वातावरण के लिए हो सकता है) या स्थायी रूप से वॉल्यूम को विभाजित करके (नेटएप शब्दावली में "फ्लेक्स स्प्लिट" के रूप में जाना जाता है) ) जो एक पल को स्थायी रूप से डेल्टास को हल करने और पूरी तरह से नया और अलग वॉल्यूम बनाने के लिए ले जाएगा।
इन डेल्टा क्लोनों में आपकी समग्र भंडारण आवश्यकता को कम करने का अतिरिक्त लाभ है - आप अपने विकास, परीक्षण और सत्यापन करने के लिए अपने उत्पादन डेटाबेस डेटा के कई क्लोन या उदाहरण को स्पॉन कर सकते हैं। यदि आप केवल अपने बड़े डेटासेट की एक-एक प्रति (छोटे होने की संभावना हो तो) की एक प्रति रख रहे हैं, तो आप अपनी समग्र संग्रहण लागत और पदचिह्न को कम करते हैं।
यहाँ केवल चाल यह है कि यह एक पूर्ण बैकअप समाधान नहीं बन सकता है क्योंकि "बैकअप" अभी भी आपके फाइलर पर रहता है। इसके लिए आपको कुछ उपयोग करने की आवश्यकता हो सकती है नेटएप एक स्नैप मिरर का उपयोग करता है जो फाइलर और डेटासेंटर्स के बीच डेटा (rsync- शैली प्रौद्योगिकी का उपयोग करके) दर्पण करेगा, या कुछ प्रकार के एकीकृत बैकअप समाधान का उपयोग करेगा जो आपके डेल्टा स्नैपशॉट या में से किसी एक को टेप करने के लिए बैकअप कर सकता है फ्लेक्स क्लोन।
हालांकि इसमें एक प्रमुख दोष है: आपके सभी डेटा - देव, परीक्षण और ठेस अभी भी एक ही फाइलर और स्टोरेज हेड पर I / O का उपयोग कर रहे हैं। इसके चारों ओर काम करने के लिए, एक दूसरे फाइलर पर एक दास डेटाबेस उदाहरण बनाने पर विचार करें जो आपके लिए टेस्ट और / या देव फाइलर के लिए बोने का बिंदु हो सकता है, या अपने आवेदन पत्र के लिए एक लोड बैलेंसर / अप्लीकेशन डिलीवरी कंट्रोलर का उपयोग करने पर विचार करें। परीक्षण (और / या देव) पर्यावरण (ओं)। यह उन मुद्दों के लिए उत्पादन को बढ़ावा देने से पहले अपने क्यूए / टेस्ट वातावरण में prodcution यातायात फेंकने का अतिरिक्त लाभ है जो तुरंत ध्यान नहीं दिया जा सकता है। फिर आप उत्पादन ट्रैफ़िक और उपयोगकर्ता व्यवहार के आधार पर त्रुटियों के लिए अपने लॉग की जांच कर सकते हैं।
इसके बाद आपको निरंतर तैनाती के तरीकों के साथ उपयोग करने के लिए कुछ स्क्रिप्ट का उपयोग प्रोग्रामेटिक रूप से स्पॉन और पूरे (और बड़े) डेटासेट को नष्ट करने की अनुमति देना चाहिए।
स्केलेबिलिटी और उच्च उपलब्धता
जब आप निरंतर तैनाती के बारे में पूछते हैं, तो DevOps को केवल निरंतर तैनाती से अधिक माना जाता है - इसलिए मैं अतिरेक, मापनीयता और उच्च उपलब्धता के बारे में कुछ बिट्स को शामिल करने जा रहा हूं।
मैंने उल्लेख किया है, जेआईटी, तत्काल और अंततः स्थिरता। यह वह जगह है जहाँ वार्स आरडीबीएमएस इंजन आते हैं। बस अतुल्यकालिक प्रतिकृति को कॉन्फ़िगर करके अंततः सुसंगतता अपेक्षाकृत आसान है। हालांकि यह कुछ टकरावों का कारण बन सकता है * (क्या होगा अगर आपकी एप्लिकेशन परत क्लस्टर के एक तरफ डेटा को अपडेट करती है और प्रतिकृति पूरा होने से पहले क्लस्टर के दूसरी तरफ?) तत्काल स्थिरता के लिए, गैलेरा क्लस्टर को देखें जो तुल्यकालिक प्रतिकृति को मजबूर करेगा, लेकिन मापनीयता के मुद्दे लेकिन यह दोनों दुनिया का सबसे बुरा लगता है।
आमतौर पर, हालांकि, अधिकांश कवच को पूरी तरह से समकालिक प्रतिकृति की आवश्यकता नहीं होती है - यह आमतौर पर केवल बहुत विशिष्ट (और विदेशी) उच्च-लेखन वातावरण के लिए आवश्यक होता है जहां टेबल शेरिंग के साथ मल्टी-मास्टर की आवश्यकता होती है। अधिकांश एप्लिकेशन डेटाबेस प्रॉक्सी का उपयोग करके जस्ट-इन-टाइम सुसंगतता से निपट सकते हैं। उदाहरण के लिए, ScaleArc प्रतिकृति स्थिति और ट्रैक की निगरानी करेगा जहां राइट बस-इन-टाइम स्थिरता और उपस्थिति प्रदान करने के लिए लिखा गया था (जब तक प्रतिकृति कैच हो जाती है तब तक उप-पाठ अनुरोध भेजने के लिए)डेटाबेस स्थिरता की। ScaleArc Postgres, MySQL, MariaDB, Oracle और MSSQL के साथ मिलनसार है और अपने डेटाबेस को शार्प कीज़ का उपयोग नहीं करने वाले अनुप्रयोगों के लिए अपने डेटाबेस को शार्प / पार्टीशन करने के लिए नियमित एक्सप्रेशन का उपयोग कर सकता है। आपके कॉन्फ़िगरेशन प्रबंधन सॉफ़्टवेयर के साथ सहभागिता करने के लिए इसमें एक मजबूत REST API भी है - और उनकी सहायता टीम बकाया है
इसी तरह, आप एक मुफ्त विकल्प पर विचार करना चाह सकते हैं, मैक्सबेल मारियाडीबी के लिए मारियाडीबी टीम द्वारा विकसित किया गया है। हालांकि इसमें GUI और कुछ caleArc की कैशिंग विशेषताओं का अभाव है।
अंत में, MySQL फैब्रिक (और इन-रैम केवल MySQL क्लस्टर - यदि आप इतना रैम बर्दाश्त कर सकते हैं) अन्य संभावित हैं - विशेष रूप से MySQL के नए प्रॉक्सी के साथ। यह आपके वातावरण को मापनीयता और अतिरेक घटक प्रदान कर सकता है।
पोस्टग्रैज और ओरेकल में आपके लिए आवश्यक प्रतिकृति और पैनापन विशेषताएं होनी चाहिए, लेकिन अगर आपको प्रॉक्सी की आवश्यकता है तो स्केलएस्क्यू अच्छी तरह से जोड़ी जाएगी।
अंत में, ये सभी पेइचर्स निरंतर तैनाती और विकास के लिए उपयुक्त अत्यधिक लचीले वातावरण में जुड़ते हैं यदि आप केवल क्लाउड आधारित वातावरण का उपयोग करने में असमर्थ हैं और अपने क्लाउड प्रदाता को आपके लिए उपरोक्त समस्याओं से निपटने में सक्षम करते हैं।