किस तरह के लोड बैलेंसिंग एल्गोरिदम हैं


32

मैं HTTP के लिए अलग-अलग लोड बैलेंसिंग एल्गोरिदम पर शोध कर रहा था और मैंने अभी पाया 3. रैंडम, राउंड रॉबिन और वेटेड राउंड रॉबिन। क्या कोई अन्य विकल्प भी हैं?

धन्यवाद पॉल

जवाबों:


33

HTTP लोड बैलेंसरों के लिए सबसे आम भार संतुलन एल्गोरिदम IMHO हैं:

  • राउंड रॉबिन (कभी-कभी "नेक्स्ट इन लूप") कहा जाता है।

  • भारित राउंड रॉबिन - राउंड रॉबिन के रूप में, लेकिन कुछ सर्वरों को समग्र यातायात का एक बड़ा हिस्सा मिलता है।

  • यादृच्छिक

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

  • URL हैश। स्रोत IP हैश की तरह अधिकांश, हैशिंग को छोड़कर अनुरोध के URL पर किया जाता है। जब प्रॉक्सी कैश के सामने लोड संतुलन होता है तब उपयोगी होता है, क्योंकि किसी दिए गए ऑब्जेक्ट के अनुरोध हमेशा केवल एक बैकएंड कैश में जाएंगे। यह कैश दोहराव से बचा जाता है, एक ही वस्तु को कई / सभी कैश में संग्रहीत किया जाता है, और बैकेंड कैश की प्रभावी क्षमता को बढ़ाता है।

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

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

  • कम से कम विलंबतापर्लबल सर्वरों के बैकएंड के लिए एक त्वरित HTTP विकल्प अनुरोध करता है, और जवाब देने के लिए पहले सर्वर को अनुरोध भेजता है।

यकीनन ऊपर एक सख्त कंप्यूटर विज्ञान अर्थ में एल्गोरिदम नहीं हैं, वे सामान्य दृष्टिकोणों के अधिक सामान्य विवरण हैं। यहां सिस्को का एक छोटा सा पेपर है जिसमें कुछ एल्गोरिदम का वर्णन है जो वे अधिक विस्तार से उपयोग करते हैं । अन्य विक्रेताओं से कार्यान्वयन थोड़ा अलग होगा।

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

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

  • राउंड रॉबिन (वैकल्पिक रूप से वेटेड राउंड रॉबिन) या रैंडम वितरण का उपयोग करके लोड संतुलन । राउंड रॉबिन और रैंडम किसी भी 'हॉट स्पॉट' समस्याओं के बिना सरल और लचीला एल्गोरिदम हैं, यानी बैकेंड को लोड वितरण सभी स्थितियों में उचित रहता है।


5

सवाल अधूरा है:

लोड संतुलन क्या है?

सीपीयू संतृप्ति ले सकते हैं; सामान्य दृष्टिकोण पीछे की ओर है - इसे खींचने के बजाय किसी संसाधन पर जोर देना।

बैलेंस में कई तरह के भार होते हैं, जैसे कि स्पेस, रीड स्पीड, राइट स्पीड, थ्रूपुट आदि।

नेटवर्क को विलंबता या कुल प्रवाह के आधार पर संतुलित किया जा सकता है ...

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

उपरोक्त थकावट से दूर है; मुद्दा यह है कि विभिन्न संसाधन लोड संतुलन के विभिन्न प्रकारों को पूरी तरह से लेते हैं। उनकी उपलब्ध विशेषताओं और क्षमताओं में से आपको WHICH को संतुलित करने में रुचि है।

आप जो संतुलन बनाने की कोशिश कर रहे हैं वह एक अच्छा संतुलन एल्गोरिथ्म बनाने में पहली कसौटी है। और सुझाव है कि केवल तीन हैं ... अप्रकाशित। यह एक पीएचडी के योग्य होगा कि सभी प्रकार के "लोड संतुलित हैं।"

आर टी


2
आप प्रश्न याद कर रहे हैं रिचर्ड, एल्गोरिदम किसी भी विधि या कार्यान्वयन का आधार हैं।
मोनोथेथ

2
क्षमा करें, मैं एक शापित चीज़ को याद नहीं करता। अपना दिमाग खोलो।
रिचर्ड टी।

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

@ जोश, @ रिचर्ड, हालांकि लोड संतुलन की अवधारणाएं समान हैं। आप डिस्क उपयोग, iSCSI, HTTP, CPU, कुछ भी संतुलित करने के लिए अभी भी राउंड रॉबिन का उपयोग कर सकते हैं।
मार्क हेंडरसन

@ फारसेकर मैं सहमत हूं, राउंड रॉबिन बहुत सार्वभौमिक है। लेकिन क्या कुछ लोड संतुलन एल्गोरिदम नहीं हैं जो कार्य के लिए विशिष्ट हैं?
जोश

0

आपके प्रश्न का सीधा उत्तर नहीं है, लेकिन एक वास्तविक समाधान जो हमने उपयोगी पाया है। LVS और पल्स डेमॉन का उपयोग करते हुए, हमारे HTTP लोड बैलेंसिंग को एक कस्टम बैश स्क्रिप्ट को कॉल करने के लिए कॉन्फ़िगर किया गया है, जो एक साधारण SSH कनेक्शन और अपटाइम के लिए कॉल के माध्यम से "वास्तविक सर्वर" पर लोड को निर्धारित करता है ।

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

मेरा 2 सी। YMMV।

पुनश्च: LVS परियोजना पर एक नज़र डालें - आपको निश्चित रूप से लोड संतुलन शेड्यूलिंग कार्यान्वयन के बारे में जानकारी मिलेगी।

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