paint-brush
अपाचे डोरिस में कार्यभार अलगाव: संसाधन प्रबंधन और प्रदर्शन का अनुकूलनद्वारा@shirleyfromapachedoris
394 रीडिंग
394 रीडिंग

अपाचे डोरिस में कार्यभार अलगाव: संसाधन प्रबंधन और प्रदर्शन का अनुकूलन

द्वारा Shirley H.10m2024/05/25
Read on Terminal Reader

बहुत लंबा; पढ़ने के लिए

अपाचे डोरिस संसाधन टैग और कार्यभार समूह के आधार पर कार्यभार अलगाव का समर्थन करता है। यह अलगाव, संसाधन उपयोग और स्थिर प्रदर्शन के स्तर के बीच विभिन्न ट्रेडऑफ़ के लिए समाधान प्रदान करता है।
featured image - अपाचे डोरिस में कार्यभार अलगाव: संसाधन प्रबंधन और प्रदर्शन का अनुकूलन
Shirley H. HackerNoon profile picture
0-item
1-item


यह अपाचे डोरिस की वर्कलोड आइसोलेशन क्षमताओं का गहन परिचय है। लेकिन सबसे पहले, आपको वर्कलोड आइसोलेशन की आवश्यकता क्यों और कब होती है? यदि आप निम्नलिखित में से किसी भी स्थिति से संबंधित हैं, तो आगे पढ़ें, और आपको समाधान मिल जाएगा:


  • आपके पास एक ही क्लस्टर साझा करने वाले विभिन्न व्यावसायिक विभाग या टेनेन्ट हैं, और आप कार्यभार में व्यवधान को रोकना चाहते हैं।


  • आपके पास अलग-अलग प्राथमिकता स्तरों के क्वेरी कार्य हैं, और आप संसाधनों और निष्पादन के संदर्भ में अपने महत्वपूर्ण कार्यों (जैसे वास्तविक समय डेटा विश्लेषण और ऑनलाइन लेनदेन) को प्राथमिकता देना चाहते हैं।


  • आपको कार्यभार पृथक्करण की आवश्यकता है, लेकिन साथ ही उच्च लागत-प्रभावशीलता और संसाधन उपयोग दर भी चाहिए।


अपाचे डोरिस संसाधन टैग और कार्यभार समूह के आधार पर कार्यभार अलगाव का समर्थन करता है। संसाधन टैग बैकएंड नोड्स के स्तर पर विभिन्न कार्यभारों के लिए CPU और मेमोरी संसाधनों को अलग करता है, जबकि कार्यभार समूह तंत्र उच्च संसाधन उपयोग के लिए बैकएंड नोड के भीतर संसाधनों को और विभाजित कर सकता है।

संसाधन टैग के आधार पर संसाधन पृथक्करण

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


संसाधन टैग-आधारित अलगाव समाधान का मुख्य विचार क्लस्टर में BE नोड्स को टैग असाइन करके कंप्यूटिंग संसाधनों को समूहों में विभाजित करना है, जहाँ एक ही टैग के BE नोड्स एक संसाधन समूह का गठन करते हैं। संसाधन समूह को डेटा संग्रहण और गणना के लिए एक इकाई के रूप में समझा जा सकता है। डोरिस में डाले गए डेटा के लिए, सिस्टम कॉन्फ़िगरेशन के अनुसार अलग-अलग संसाधन समूहों में डेटा प्रतिकृतियां लिखेगा। निष्पादन के लिए क्वेरीज़ को उनके संबंधित संसाधन समूहों को भी असाइन किया जाएगा।


उदाहरण के लिए, यदि आप 3-BE क्लस्टर में पढ़ने और लिखने के कार्यभार को अलग करना चाहते हैं, तो आप इन चरणों का पालन कर सकते हैं:


  1. BE नोड्स को संसाधन टैग असाइन करें : 2 BE को "रीड" टैग से तथा 1 BE को "राइट" टैग से बांधें।


  2. डेटा प्रतिकृतियों को संसाधन टैग असाइन करें : यह मानते हुए कि तालिका 1 में 3 प्रतिकृतियां हैं, उनमें से 2 को "रीड" टैग से और 1 को "राइट" टैग से बाँधें। प्रतिकृति 3 में लिखे गए डेटा को प्रतिकृति 1 और प्रतिकृति 2 के साथ सिंक्रनाइज़ किया जाएगा, और डेटा सिंक्रनाइज़ेशन प्रक्रिया BE 1 और BE2 के कुछ संसाधनों का उपभोग करती है।


  3. संसाधन टैग को कार्यभार समूह असाइन करें : जिन क्वेरीज़ में उनके SQL में "रीड" टैग शामिल है, उन्हें स्वचालित रूप से "रीड" (इस मामले में, BE 1 और BE 2) के साथ टैग किए गए नोड्स पर रूट किया जाएगा। डेटा लेखन कार्यों के लिए, आपको उन्हें "राइट" टैग के साथ असाइन करना होगा ताकि उन्हें संबंधित नोड (BE 3) पर रूट किया जा सके। इस तरह, प्रतिकृति 3 से प्रतिकृति 1 और 2 तक डेटा सिंक्रोनाइज़ेशन ओवरहेड्स को छोड़कर रीड और राइट वर्कलोड के बीच कोई संसाधन विवाद नहीं होगा।



संसाधन टैग अपाचे डोरिस में मल्टी-टेनेंसी को भी सक्षम बनाता है। उदाहरण के लिए, "उपयोगकर्ता A" के साथ टैग किए गए कंप्यूटिंग और स्टोरेज संसाधन केवल उपयोगकर्ता A के लिए हैं, जबकि "उपयोगकर्ता B" के साथ टैग किए गए उपयोगकर्ता B के लिए अनन्य हैं। इस तरह डोरिस BE साइड पर संसाधन टैग के साथ मल्टी-टेनेंट संसाधन अलगाव को लागू करता है।



बीई नोड्स को समूहों में विभाजित करने से उच्च स्तर का अलगाव सुनिश्चित होता है:


  • विभिन्न टेनन्टों के CPU, मेमोरी और I/O भौतिक रूप से पृथक होते हैं।


  • एक टेनेंट कभी भी दूसरे टेनेंट की विफलताओं (जैसे प्रक्रिया क्रैश) से प्रभावित नहीं होगा।


लेकिन इसके कुछ नकारात्मक पहलू भी हैं:


  • पढ़ने-लिखने के पृथक्करण में, जब डेटा लिखना बंद हो जाता है, तो "लिखें" के साथ टैग किए गए BE नोड निष्क्रिय हो जाते हैं। इससे समग्र क्लस्टर उपयोग कम हो जाता है।


  • मल्टी-टेनेंसी के अंतर्गत, यदि आप एक ही टेनेंट के विभिन्न कार्यभारों को अलग-अलग BE नोड्स आवंटित करके अलग करना चाहते हैं, तो आपको महत्वपूर्ण लागत और कम संसाधन उपयोग को सहन करना होगा।


  • किरायेदारों की संख्या डेटा प्रतिकृतियों की संख्या से जुड़ी हुई है। इसलिए, यदि आपके पास 5 किरायेदार हैं, तो आपको 5 डेटा प्रतिकृतियों की आवश्यकता होगी। यह बहुत बड़ी स्टोरेज अतिरेक है।


इसमें सुधार करने के लिए, हमने Apache Doris 2.0.0 में वर्कलोड ग्रुप पर आधारित वर्कलोड आइसोलेशन समाधान प्रदान किया है और Apache Doris 2.1.0 में इसे उन्नत किया है।

कार्यभार समूह के आधार पर कार्यभार पृथक्करण

वर्कलोड ग्रुप -आधारित समाधान संसाधनों के अधिक विस्तृत विभाजन को साकार करता है। यह BE नोड्स पर प्रक्रियाओं के भीतर CPU और मेमोरी संसाधनों को और विभाजित करता है, जिसका अर्थ है कि एक BE नोड में क्वेरीज़ को कुछ हद तक एक दूसरे से अलग किया जा सकता है। यह BE प्रक्रियाओं के भीतर संसाधन प्रतिस्पर्धा से बचता है और संसाधन उपयोग को अनुकूलित करता है।


उपयोगकर्ता क्वेरीज़ को वर्कलोड ग्रुप से जोड़ सकते हैं, इस प्रकार क्वेरी द्वारा उपयोग किए जाने वाले CPU और मेमोरी संसाधनों के प्रतिशत को सीमित कर सकते हैं। उच्च क्लस्टर लोड के तहत, डोरिस वर्कलोड ग्रुप में सबसे अधिक संसाधन-खपत वाली क्वेरीज़ को स्वचालित रूप से समाप्त कर सकता है। कम क्लस्टर लोड के तहत, डोरिस कई वर्कलोड ग्रुप को निष्क्रिय संसाधनों को साझा करने की अनुमति दे सकता है।


डोरिस CPU सॉफ्ट लिमिट और CPU हार्ड लिमिट दोनों का समर्थन करता है। सॉफ्ट लिमिट वर्कलोड ग्रुप को लिमिट को तोड़ने और निष्क्रिय संसाधनों का उपयोग करने की अनुमति देता है, जिससे अधिक कुशल उपयोग संभव होता है। हार्ड लिमिट स्थिर प्रदर्शन की एक कठोर गारंटी है क्योंकि यह वर्कलोड ग्रुप के आपसी प्रभाव को रोकता है।


(सीपीयू सॉफ्ट लिमिट और सीपीयू हार्ड लिमिट एक दूसरे के विरोधाभासी हैं। आप अपने उपयोग के आधार पर उनके बीच चयन कर सकते हैं।)


संसाधन टैग-आधारित समाधान से इसके अंतर इस प्रकार हैं:


  • कार्यभार समूह प्रक्रियाओं के भीतर बनते हैं। एक ही BE नोड के भीतर कई कार्यभार समूह संसाधनों के लिए प्रतिस्पर्धा करते हैं।


  • डेटा प्रतिकृति वितरण पर विचार करना असंभव है, क्योंकि कार्यभार समूह केवल संसाधन प्रबंधन का एक तरीका है।

सीपीयू सॉफ्ट सीमा

CPU सॉफ्ट लिमिट को cpu_share पैरामीटर द्वारा लागू किया जाता है, जो वैचारिक रूप से भार के समान है। उच्च cpu_share वाले वर्कलोड समूहों को एक समय स्लॉट के दौरान अधिक CPU समय आवंटित किया जाएगा।


उदाहरण के लिए, यदि समूह A को 1 के cpu_share और समूह B को 9 के साथ कॉन्फ़िगर किया गया है। 10 सेकंड के समय स्लॉट में, जब समूह A और समूह B दोनों पूरी तरह से लोड होते हैं, तो समूह A और समूह B क्रमशः 1s और 9s CPU समय का उपभोग करने में सक्षम होंगे।


वास्तविक दुनिया के मामलों में ऐसा होता है कि क्लस्टर में सभी कार्यभार पूरी क्षमता से नहीं चलते हैं। सॉफ्ट लिमिट के तहत, यदि ग्रुप बी में कम या शून्य कार्यभार है, तो ग्रुप ए सीपीयू समय के सभी 10 सेकंड का उपयोग करने में सक्षम होगा, जिससे क्लस्टर में समग्र सीपीयू उपयोग बढ़ जाएगा।



सॉफ्ट लिमिट लचीलापन और उच्च संसाधन उपयोग दर लाती है। दूसरी ओर, यह प्रदर्शन में उतार-चढ़ाव का कारण बन सकती है।

सीपीयू हार्ड सीमा

अपाचे डोरिस 2.1.0 में CPU हार्ड लिमिट उन उपयोगकर्ताओं के लिए डिज़ाइन की गई है जिन्हें स्थिर प्रदर्शन की आवश्यकता होती है। सरल शब्दों में, CPU हार्ड लिमिट यह परिभाषित करती है कि वर्कलोड ग्रुप अपनी सीमा से अधिक CPU संसाधनों का उपयोग नहीं कर सकता है, चाहे निष्क्रिय CPU संसाधन हों या नहीं।


इस तरह से ये कार्य करता है:


मान लीजिए कि ग्रुप ए को cpu_hard_limit=10% और ग्रुप बी को cpu_hard_limit=90% पर सेट किया गया है। अगर ग्रुप ए और ग्रुप बी दोनों ही पूरे लोड पर चलते हैं, तो ग्रुप ए और ग्रुप बी क्रमशः कुल CPU समय का 10% और 90% इस्तेमाल करेंगे। अंतर तब होता है जब ग्रुप बी का कार्यभार घटता है। ऐसे मामलों में, चाहे ग्रुप ए का क्वेरी लोड कितना भी अधिक क्यों न हो, उसे आवंटित 10% CPU संसाधनों से अधिक का उपयोग नहीं करना चाहिए।




सॉफ्ट लिमिट के विपरीत, हार्ड लिमिट लचीलेपन और उच्च संसाधन उपयोग दर की संभावना की कीमत पर स्थिर सिस्टम प्रदर्शन की गारंटी देती है।

मेमोरी संसाधन सीमा

बीई नोड की मेमोरी में निम्नलिखित भाग शामिल होते हैं:


  • ऑपरेटिंग सिस्टम के लिए आरक्षित मेमोरी.


  • गैर-प्रश्नों द्वारा उपभोग की गई मेमोरी, जिसे कार्यभार समूह के मेमोरी सांख्यिकी में नहीं माना जाता है।


  • मेमोरी का उपयोग क्वेरीज़ द्वारा किया जाता है, जिसमें डेटा लेखन भी शामिल है। इसे वर्कलोड ग्रुप द्वारा ट्रैक और नियंत्रित किया जा सकता है।


memory_limit पैरामीटर BE प्रक्रिया के भीतर वर्कलोड समूह के लिए उपलब्ध अधिकतम (%) मेमोरी को परिभाषित करता है। यह संसाधन समूहों की प्राथमिकता को भी प्रभावित करता है।


प्रारंभिक स्थिति के तहत, उच्च प्राथमिकता वाले संसाधन समूह को अधिक मेमोरी आवंटित की जाएगी। enable_memory_overcommit सेट करके, आप संसाधन समूहों को निष्क्रिय स्थान होने पर सीमाओं से अधिक मेमोरी पर कब्जा करने की अनुमति दे सकते हैं। जब मेमोरी कम होती है, तो डोरिस उन मेमोरी संसाधनों को पुनः प्राप्त करने के लिए कार्यों को रद्द कर देगा जो वे प्रतिबद्ध करते हैं। इस मामले में, सिस्टम उच्च प्राथमिकता वाले संसाधन समूहों के लिए यथासंभव अधिक मेमोरी संसाधन बनाए रखेगा।



क्वेरी कतार

ऐसा होता है कि क्लस्टर अपनी क्षमता से ज़्यादा लोड ले रहा होता है। इस मामले में, नए क्वेरी अनुरोध सबमिट करना न केवल निरर्थक होगा, बल्कि चल रही क्वेरीज़ में भी बाधा उत्पन्न करेगा।


इस पर सुधार करने के लिए, अपाचे डोरिस क्वेरी कतार तंत्र प्रदान करता है। उपयोगकर्ता क्लस्टर में समवर्ती रूप से चलने वाली क्वेरी की संख्या पर एक सीमा निर्धारित कर सकते हैं। क्वेरी कतार भर जाने पर या प्रतीक्षा समय समाप्त होने के बाद क्वेरी को अस्वीकार कर दिया जाएगा, इस प्रकार उच्च लोड के तहत सिस्टम स्थिरता सुनिश्चित की जाएगी।



क्वेरी कतार तंत्र में तीन पैरामीटर शामिल हैं: max_concurrency , max_queue_size , और queue_timeout

परीक्षण

सीपीयू सॉफ्ट लिमिट और हार्ड लिमिट की प्रभावशीलता को प्रदर्शित करने के लिए, हमने कुछ परीक्षण किए।


  • परिवेश: एकल मशीन, 16 कोर, 64GB


  • तैनाती: 1 एफई + 1 बीई


  • डेटासेट: क्लिकबेंच, टीपीसी-एच


  • लोड परीक्षण उपकरण: अपाचे JMeter

सीपीयू सॉफ्ट लिमिट टेस्ट

दो क्लाइंट शुरू करें और लगातार क्वेरीज़ सबमिट करें (क्लिकबेंच Q23) क्रमशः वर्कलोड ग्रुप्स के साथ और बिना उपयोग किए। ध्यान दें कि पेज कैश को परीक्षण परिणामों को प्रभावित करने से रोकने के लिए अक्षम किया जाना चाहिए।


दोनों परीक्षणों में दोनों ग्राहकों के थ्रूपुट की तुलना करने पर यह निष्कर्ष निकाला जा सकता है कि:


  • कार्यभार समूह को कॉन्फ़िगर किए बिना , दोनों क्लाइंट समान आधार पर CPU संसाधनों का उपभोग करते हैं।


  • वर्कलोड ग्रुप को कॉन्फ़िगर करने और cpu_share 2:1 पर सेट करने से, दो क्लाइंट का थ्रूपुट अनुपात 2:1 होता है। उच्च cpu_share के साथ, क्लाइंट 1 को CPU संसाधनों का उच्च भाग प्रदान किया जाता है, और यह उच्च थ्रूपुट प्रदान करता है।

सीपीयू हार्ड लिमिट टेस्ट

क्लाइंट प्रारंभ करें, कार्यभार समूह के लिए cpu_hard_limit=50% सेट करें, तथा क्रमशः 1, 2, और 4 के समवर्ती स्तर के अंतर्गत 5 मिनट के लिए ClickBench Q23 निष्पादित करें।



जैसे-जैसे क्वेरी समवर्ती बढ़ती है, CPU उपयोग दर लगभग 800% पर बनी रहती है, जिसका अर्थ है कि 8 कोर का उपयोग किया जाता है। 16-कोर मशीन पर, यह 50% उपयोग है, जो कि अपेक्षित है। इसके अलावा, चूंकि CPU हार्ड सीमाएँ लगाई जाती हैं, इसलिए समवर्ती बढ़ने पर TP99 विलंबता में वृद्धि भी एक अपेक्षित परिणाम है।

नकली उत्पादन वातावरण में परीक्षण करें

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


हमने एक SQL सेट चुना जिसमें ऐसी क्वेरीज़ शामिल हैं जिन्हें 1 सेकंड के भीतर पूरा किया जाना चाहिए (क्लिकबेंच Q15, Q17, Q23 और TPC-H Q3, Q7, Q19), जिसमें सिंगल-टेबल एग्रीगेशन और जॉइन क्वेरीज़ शामिल हैं। TPC-H डेटासेट का आकार 100GB है।


इसी प्रकार, हम कार्यभार समूह को कॉन्फ़िगर करने के साथ और उसके बिना भी परीक्षण करते हैं।


जैसा कि परिणाम दर्शाते हैं:


  • कार्यभार समूह के बिना (परीक्षण 1 और 2 की तुलना): क्लाइंट 2 की समवर्तीता को डायल करते समय, दोनों क्लाइंट क्वेरी विलंबता में 2~3 गुना वृद्धि का अनुभव करते हैं।


  • कार्यभार समूह को कॉन्फ़िगर करना (परीक्षण 3 और 4 की तुलना): जैसे-जैसे क्लाइंट 2 की समवर्तीता बढ़ती है, क्लाइंट 1 में प्रदर्शन में उतार-चढ़ाव बहुत कम होता है, जो इस बात का प्रमाण है कि कार्यभार अलगाव द्वारा इसे कैसे प्रभावी रूप से संरक्षित किया जाता है।

अनुशंसाएँ एवं योजनाएँ

संसाधन टैग-आधारित समाधान एक संपूर्ण कार्यभार अलगाव योजना है। कार्यभार समूह-आधारित समाधान संसाधन अलगाव और उपयोग के बीच बेहतर संतुलन को साकार करता है, और यह स्थिरता की गारंटी के लिए क्वेरी कतार तंत्र द्वारा पूरक है।


तो, आपको अपने उपयोग के लिए कौन सा विकल्प चुनना चाहिए? हमारी सिफारिश यह है:


  • संसाधन टैग : ऐसे मामलों के लिए जहां विभागों की विभिन्न व्यावसायिक लाइनें एक ही क्लस्टर साझा करती हैं, इसलिए संसाधन और डेटा विभिन्न किरायेदारों के लिए भौतिक रूप से पृथक होते हैं।


  • कार्यभार समूह : ऐसे उपयोग मामलों के लिए जहां एक क्लस्टर लचीले संसाधन आवंटन के लिए विभिन्न क्वेरी कार्यभार संभालता है।


भविष्य के रिलीज़ में, हम कार्यभार समूह और क्वेरी कतार सुविधाओं के उपयोगकर्ता अनुभव में सुधार करते रहेंगे:


  • क्वेरीज़ को रद्द करके मेमोरी स्पेस खाली करना एक क्रूर तरीका है। हम डिस्क स्पिलिंग द्वारा इसे लागू करने की योजना बना रहे हैं, जो क्वेरी प्रदर्शन में उच्च स्थिरता लाएगा।


  • चूंकि BE में गैर-क्वेरी द्वारा खपत की गई मेमोरी वर्कलोड ग्रुप के मेमोरी सांख्यिकी में शामिल नहीं है, इसलिए उपयोगकर्ता BE प्रक्रिया मेमोरी उपयोग और वर्कलोड ग्रुप मेमोरी उपयोग के बीच असमानता देख सकते हैं। भ्रम से बचने के लिए हम इस मुद्दे को संबोधित करेंगे।


  • क्वेरी कतार तंत्र में, क्लस्टर लोड को अधिकतम क्वेरी समवर्तीता सेट करके नियंत्रित किया जाता है। हम BE पर संसाधन उपलब्धता के आधार पर गतिशील अधिकतम क्वेरी समवर्तीता को सक्षम करने की योजना बनाते हैं। यह क्लाइंट साइड पर बैकप्रेशर बनाता है और इस प्रकार जब क्लाइंट उच्च लोड सबमिट करते रहते हैं तो डोरिस की उपलब्धता में सुधार होता है।


  • संसाधन टैग का मुख्य विचार BE नोड्स को समूहीकृत करना है, जबकि कार्यभार समूह का उद्देश्य एकल BE नोड के संसाधनों को और विभाजित करना है। इन विचारों को समझने के लिए, उपयोगकर्ताओं को सबसे पहले डोरिस में BE नोड्स की अवधारणा के बारे में सीखना होगा। हालाँकि, परिचालन के दृष्टिकोण से, उपयोगकर्ताओं को केवल अपने प्रत्येक कार्यभार के संसाधन उपभोग प्रतिशत को समझने की आवश्यकता है और जब क्लस्टर लोड संतृप्त हो जाता है तो उन्हें क्या प्राथमिकता देनी चाहिए। इस प्रकार, हम उपयोगकर्ताओं के लिए सीखने की अवस्था को समतल करने का एक तरीका निकालने का प्रयास करेंगे, जैसे कि BE नोड्स की अवधारणा को ब्लैक बॉक्स में रखना।


अपाचे डोरिस में कार्यभार अलगाव पर आगे सहायता के लिए, अपाचे डोरिस समुदाय में शामिल हों।