एलिटिक्सटैक पेटाबाइट क्लस्टर में ऑप्टिमल शार्ड अरेंजमेंट: लीनियर प्रोग्रामिंग

Meltwater और Fairhair.ai सर्च इंजन के बहुत दिल में, एलेस्टिक्स खोज है, जिसमें लाखों मीडिया और सोशल मीडिया लेखों के साथ क्लस्टर का एक संग्रह है।

क्लस्टर में इंडेक्स शार्ड्स एक्सेस स्ट्रक्चर, वर्कलोड और साइज में काफी भिन्न होते हैं, जो कुछ बहुत ही दिलचस्प समस्याओं को जन्म देता है।

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

प्रागितिहास


फेयरहेयर.ई के सर्च इंजन में सोशल मीडिया और संपादकीय से लगभग 40 बिलियन पोस्ट हैं, जो रोजाना लाखों प्रश्नों का प्रसंस्करण करता है। प्लेटफ़ॉर्म ग्राहकों को अधिक उन्नत विश्लेषण के लिए खोज परिणाम, ग्राफ़, एनालिटिक्स, डेटा निर्यात प्रदान करता है।

ये बड़े पैमाने पर डेटासेट कई 750-नोड एलिस्टिक्स खोज समूहों में रहते हैं, जिनमें 50,000 से अधिक शार्क के हजारों सूचकांक हैं।

हमारे क्लस्टर के बारे में अधिक जानकारी के लिए, इसकी वास्तुकला और मशीन लर्निंग लोड बैलेंसर पर पिछले लेख देखें।

असमान कार्यभार वितरण


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

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

पुराने लोगों की तुलना में अपेक्षाकृत अधिक प्रश्न नवीनतम अनुक्रमणिकाओं में जाते हैं।


अंजीर। 1. समय सूचकांकों के लिए प्रवेश योजना। ऊर्ध्वाधर अक्ष पूर्ण प्रश्नों की संख्या का प्रतिनिधित्व करता है, क्षैतिज अक्ष सूचकांक की आयु का प्रतिनिधित्व करता है। साप्ताहिक, मासिक और वार्षिक पठार स्पष्ट रूप से दिखाई देते हैं, इसके बाद पुराने सूचकांकों पर काम का बोझ कम होता है

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

निर्मित में Elasticsearch शार्क आवंटन एल्गोरिथ्म केवल दो कारकों को ध्यान में रखता है:

  1. प्रत्येक नोड पर शार्क की संख्या । एल्गोरिदम समान रूप से क्लस्टर में नोड्स प्रति नोड की संख्या को संतुलित करने का प्रयास करता है।
  2. लेबल मुक्त डिस्क स्थान। एलीस्टेकर्च यह तय करने से पहले नोड पर उपलब्ध डिस्क स्थान पर विचार करता है कि क्या इस नोड को नई शार्क आवंटित करना है या इस नोड से अन्य लोगों को स्थानांतरित करना है या नहीं। 80% डिस्क का उपयोग करने के साथ, एक नोड पर नए शार्क को रखने के लिए मना किया जाता है, 90% सिस्टम इस नोड से सक्रिय रूप से शार्क को स्थानांतरित करना शुरू कर देगा।

एल्गोरिथ्म की मौलिक धारणा यह है कि क्लस्टर में प्रत्येक खंड को लगभग समान कार्यभार प्राप्त होता है और सभी का आकार समान होता है। हमारे मामले में, यह सच्चाई से बहुत दूर है।

मानक लोड संतुलन जल्दी से क्लस्टर में गर्म स्थानों की ओर जाता है। वे दिखाई देते हैं और बेतरतीब ढंग से गायब हो जाते हैं, क्योंकि समय के साथ कार्यभार बदल जाता है।

एक हॉट स्पॉट अनिवार्य रूप से एक या एक से अधिक सिस्टम संसाधनों, जैसे सीपीयू, डिस्क I / O, या नेटवर्क बैंडविड्थ की सीमा के पास एक होस्ट ऑपरेटिंग है। जब ऐसा होता है, तो नोड पहले अनुरोधों को थोड़ी देर के लिए कतार में खड़ा करता है, जिससे अनुरोध के लिए प्रतिक्रिया समय बढ़ जाता है। लेकिन अगर अधिभार लंबे समय तक रहता है, तो अंततः अनुरोधों को अस्वीकार कर दिया जाता है, और उपयोगकर्ताओं को त्रुटियां मिलती हैं।

भीड़भाड़ का एक और सामान्य परिणाम है जेवीएम कचरे का अस्थिर दबाव, जो प्रश्नों और अनुक्रमण क्रियाओं के कारण होता है, जो जेवीएम कचरा संग्राहक की "डरावनी नरक" घटना की ओर जाता है। ऐसी स्थिति में, JVM या तो मेमोरी को तेज़ी से प्राप्त नहीं कर सकता है और मेमोरी से बाहर निकल जाता है, या अंतहीन कचरा संग्रह चक्र में फंस जाता है, क्लस्टर अनुरोधों और पिंग्स का जवाब देना बंद कर देता है।

समस्या तब और बदतर हो गई जब हमने अपनी वास्तुकला को AWS के तहत बदल दिया । पहले, हमें इस तथ्य से "बचाया" गया था कि हम अपने डेटा केंद्र में अपने स्वयं के शक्तिशाली सर्वर (24 कोर) पर चार एलिटिक्स खोज नोड तक भाग गए थे। इसने शार्क के असममित वितरण के प्रभाव को प्रभावित किया: मशीन पर अपेक्षाकृत बड़ी संख्या में कोर द्वारा लोड को काफी हद तक चिकना कर दिया गया था।

रिफैक्टरिंग के बाद, हमने कम शक्तिशाली मशीनों (8 कोर) पर एक समय में केवल एक नोड रखा - और पहले परीक्षणों में तुरंत "हॉट स्पॉट" के साथ बड़ी समस्याएं सामने आईं।

इलास्टिसर्च यादृच्छिक क्रम में शार्क को असाइन करता है, और एक क्लस्टर में 500 से अधिक नोड्स के साथ, एक नोड पर बहुत अधिक "गर्म" शार्क की संभावना बहुत बढ़ गई है - और ऐसे नोड जल्दी से बह निकले हैं।

उपयोगकर्ताओं के लिए, इसका मतलब होगा काम में एक गंभीर गिरावट, क्योंकि भीड़भाड़ वाले नोड धीरे-धीरे प्रतिक्रिया करते हैं, और कभी-कभी अनुरोधों या दुर्घटना को पूरी तरह से अस्वीकार करते हैं। यदि आप इस तरह की प्रणाली को उत्पादन में लाते हैं, तो उपयोगकर्ता बार-बार देखेंगे, ऐसा प्रतीत होगा, रैंडम UI स्लोडाउन और रैंडम टाइमआउट।

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

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

क्लस्टर निरंतर परिवर्तन


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

  • नए सूचकांक बनाए जाते हैं, और पुराने को छोड़ दिया जाता है।
  • अनुक्रमण और अन्य शार्द परिवर्तनों के कारण डिस्क लेबल चालू हो जाते हैं।
  • एलिटिक्स खोज बेतरतीब ढंग से यह तय करती है कि क्लस्टर के औसत मूल्य की तुलना में नोड पर बहुत कम या बहुत अधिक शार्क हैं।
  • ओएस स्तर पर हार्डवेयर क्रैश और क्रैश होने से क्लस्टर के लिए उन्हें शुरू करने और उन्हें जोड़ने के लिए नए एडब्ल्यूएस उदाहरण हैं। 500 नोड्स के साथ, यह सप्ताह में औसतन कई बार होता है।
  • सामान्य डेटा वृद्धि के कारण हर सप्ताह नई साइटें जोड़ी जाती हैं।

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

समाधान: शारदोन्नय


उपलब्ध विकल्पों के लंबे अध्ययन के बाद, हम इस निष्कर्ष पर पहुंचे कि हमें क्या चाहिए:

  1. अपना खुद का समाधान बनाएँ। हमें कोई अच्छा लेख, कोड, या अन्य मौजूदा विचार नहीं मिले जो हमारे पैमाने पर और हमारे कार्यों के लिए अच्छी तरह से काम करेंगे।
  2. इलास्टिसर्च के बाहर की रीबैलेंसिंग प्रक्रिया को लॉन्च करें और एक प्लगइन बनाने की कोशिश करने के बजाय क्लस्टर किए गए रीडायरेक्ट एपीआई का उपयोग करें। हम एक त्वरित प्रतिक्रिया पाश चाहते थे, और इस पैमाने के एक क्लस्टर पर एक प्लगइन को तैनात करने में कई सप्ताह लग सकते हैं।
  3. किसी भी समय इष्टतम शार्क आंदोलनों की गणना करने के लिए रैखिक प्रोग्रामिंग का उपयोग करें।
  4. अनुकूलन लगातार करें ताकि क्लस्टर स्थिति धीरे-धीरे इष्टतम में आए।
  5. एक बार में बहुत अधिक दाढ़ें न हिलाएं।

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

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

इस समस्या को हल करने के लिए, हमने प्रसिद्ध शारदोन्नय अंगूर किस्म के सम्मान में शारदोन्नय सेवा विकसित की।

रैखिक अनुकूलन


रैखिक अनुकूलन (या रैखिक प्रोग्रामिंग , एलपी) एक गणितीय मॉडल में सर्वोत्तम परिणाम प्राप्त करने की एक विधि है, जैसे कि अधिकतम लाभ या सबसे कम लागत, जिसकी आवश्यकताओं को रैखिक संबंधों द्वारा दर्शाया जाता है।

अनुकूलन विधि रैखिक चर की एक प्रणाली पर आधारित है, कुछ बाधाओं को पूरा किया जाना चाहिए, और एक उद्देश्य फ़ंक्शन जो निर्धारित करता है कि एक सफल समाधान कैसा दिखता है। रैखिक अनुकूलन का लक्ष्य उन चर के मानों को खोजना है जो उद्देश्य फ़ंक्शन को कम करते हैं, प्रतिबंधों के अधीन हैं।

एक रैखिक अनुकूलन समस्या के रूप में वितरण को साझा करें


शारदोन्नय को लगातार काम करना चाहिए, और प्रत्येक पुनरावृत्ति में यह निम्नलिखित एल्गोरिथ्म करता है:

  1. एपीआई का उपयोग करते हुए, इलास्टिसर्च क्लस्टर में मौजूदा शार्क, इंडेक्स और नोड्स के बारे में और साथ ही साथ उनके वर्तमान स्थान के बारे में जानकारी प्राप्त करता है।
  2. बाइनरी एलपी चर के एक सेट के रूप में एक क्लस्टर की स्थिति को मॉडल करें। प्रत्येक संयोजन (नोड, इंडेक्स, शार्क, प्रतिकृति) को अपना स्वयं का चर मिलता है। एलपी मॉडल में, नीचे दिए गए और अधिक ध्यान से डिज़ाइन किए गए उत्तराधिकार, प्रतिबंध और एक उद्देश्य समारोह की एक संख्या है।
  3. एलपी मॉडल को एक रैखिक सॉल्वर में भेजता है, जो बाधाओं और उद्देश्य फ़ंक्शन को ध्यान में रखते हुए एक इष्टतम समाधान देता है। इसका समाधान शार्क को नोड्स को फिर से सौंपना है।
  4. एलपी के समाधान की व्याख्या करता है और इसे शार्द आंदोलनों के अनुक्रम में परिवर्तित करता है।
  5. क्लस्टर पुनर्निर्देशन एपीआई के माध्यम से शार्क को स्थानांतरित करने के लिए एलेस्टिक्स को निर्देश देता है।
  6. क्लस्टर को स्थानांतरित करने के लिए प्रतीक्षा करता है।
  7. चरण 1 पर लौटता है।

मुख्य बात सही बाधाओं और उद्देश्य समारोह को विकसित करना है। बाकी काम सॉल्वर एलपी और इलास्टिक्स खोज द्वारा किया जाएगा।

आश्चर्य की बात नहीं, इस आकार और जटिलता के एक क्लस्टर के लिए कार्य बहुत मुश्किल था!

प्रतिबंध


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

दूसरों को बड़े समूहों के साथ काम करने के वर्षों में प्राप्त अनुभव के आधार पर जोड़ा जाता है। यहाँ हमारी अपनी सीमाओं के कुछ उदाहरण दिए गए हैं:

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


लागत समारोह


हमारी लागत फ़ंक्शन कई अलग-अलग कारकों का एक साथ वजन करता है। उदाहरण के लिए, हम चाहते हैं:

  • "हॉट स्पॉट" की संख्या को कम करने के लिए अनुक्रमण और खोज प्रश्नों के विचरण को कम करें;
  • स्थिर सिस्टम ऑपरेशन के लिए डिस्क उपयोग का न्यूनतम संस्करण रखें;
  • शार्द आंदोलनों की संख्या को कम करें ताकि एक श्रृंखला प्रतिक्रिया के साथ "तूफान" शुरू न हो, जैसा कि ऊपर वर्णित है।

एलपी चर की कमी


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


अंजीर। 2. गर्मी का नक्शा एलिस्टिक्सखोज क्लस्टर पर असंतुलित भार दिखाता है। यह ग्राफ के बाईं ओर संसाधन उपयोग के एक बड़े फैलाव में प्रकट होता है। निरंतर अनुकूलन के माध्यम से, स्थिति धीरे-धीरे स्थिर हो रही है


अंजीर। 3. शारदोन्नय में हॉटनेस फंक्शन स्थापित करने से पहले और बाद में हीट मैप क्लस्टर के सभी नोड्स पर सीपीयू उपयोग दिखाता है। निरंतर काम के बोझ के साथ सीपीयू के उपयोग में एक महत्वपूर्ण बदलाव देखा जाता है।


अंजीर। 4. गर्मी का नक्शा उसी अवधि के दौरान डिस्क के रीड थ्रूपुट को दिखाता है जैसा कि अंजीर में है। 3. पढ़ें संचालन भी क्लस्टर में समान रूप से वितरित किए जाते हैं।

परिणाम


नतीजतन, हमारे एलपी सॉल्वर कुछ ही मिनटों में, हमारे विशाल क्लस्टर के लिए भी अच्छा समाधान पाता है। इस प्रकार, सिस्टम पुनरावृत्तता को इष्टतमता की दिशा में क्लस्टर की स्थिति में सुधार करता है।

और सबसे अच्छी बात यह है कि वर्कलोड और डिस्क के उपयोग का फैलाव अपेक्षित रूप से परिवर्तित होता है - और यह निकट-इष्टतम स्थिति क्लस्टर राज्य में कई जानबूझकर और अप्रत्याशित परिवर्तनों के बाद बनाए रखी जाती है!

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

Source: https://habr.com/ru/post/hi429738/


All Articles