2008-10-18 23 views
7

बड़ी वेबसाइटें जो पूरी तरह से स्टेटलेस नहीं हो सकती हैं, वेब स्तरीय पर अत्यधिक स्केलेबिलिटी प्राप्त करती हैं?लोड बैलेंसर बाधा को रोकने के लिए वेब स्तरीय शेर्डिंग (एसआईसी!)?

ईबे और अमेज़ॅन जैसी साइटें हैं, जो पूरी तरह से स्टेटलेस नहीं हो सकती हैं, क्योंकि उनके पास शॉपिंग कार्ट या ऐसा कुछ है। शॉपिंग कार्ट में प्रत्येक आइटम को यूआरएल में एन्कोड करना संभव नहीं है, न ही प्रत्येक आइटम को कुकी में एन्कोड करना और इसे हर कनेक्शन पर भेजना संभव है। तो अमेज़ॅन बस सत्र-आईडी को कुकी में संग्रहीत करता है जिसे भेजा जा रहा है। इसलिए मैं समझता हूं कि ईबे और अमेज़ॅन के वेब स्तर की स्केलेबिलिटी Google सर्च इंजन की स्केलेबिलिटी से कहीं अधिक कठिन होनी चाहिए, जहां सब कुछ यूआरएल में आराम से एन्कोड किया जा सकता है।

दूसरी ओर, ईबे के साथ-साथ अमेज़ॅन दोनों बड़े पैमाने पर स्केल किए गए। अफवाह यह है कि eBay पर कुछ 15000 जे 2 ईई एप्लीकेशन सर्वर हैं।

ये साइटें दोनों कैसे संभालती हैं: चरम मापनीयता और स्थिति? चूंकि साइट राज्यपूर्ण है, इसलिए एक सरल DNS-Balancing करना संभव नहीं है। तो कोई यह मान लेगा कि इन कंपनियों के पास हार्डवेयर आधारित लोड बैलेंसर है जैसे बिगिप, नेटस्केकर या ऐसा कुछ, जो उस साइट के एकल आईपी पते के पीछे एकमात्र डिवाइस है। यह लोड बैलेंसर एसएसएल (यदि एन्कोड किया गया है) को डिक्रिप्ट करेगा, कुकी का निरीक्षण करेगा और उस कुकी के सत्र आईडी के आधार पर निर्णय लेगा कि एप्लिकेशन सर्वर उस ग्राहक का सत्र रखता है।

लेकिन यह संभवतः काम नहीं कर सकता क्योंकि कोई भी लोड-बैलेंसर संभवतः हजारों एप्लिकेशन सर्वरों के भार को संभालने में सक्षम नहीं हो सकता है? मैं कल्पना करता हूं कि इन हार्डवेयर लोड बैलेंसर्स भी इस स्तर पर स्केल नहीं करते हैं।

इसके अलावा, लोड-बैलेंसिंग उपयोगकर्ता के लिए पारदर्शी रूप से किया जा रहा है, यानी उपयोगकर्ताओं को अलग-अलग पते पर अग्रेषित नहीं किया जाता है, लेकिन फिर भी सभी सामूहिक रूप से पूरे समय www.amazon.com पर रहते हैं।

तो मेरा सवाल यह है: क्या कोई विशेष चाल है जिसके साथ कोई वेब स्तरीय पारदर्शी शेरिंग (डेटाबेस स्तर सामान्य रूप से नहीं किया जाता) जैसे कुछ हासिल कर सकता है? जब तक कुकी का निरीक्षण नहीं किया जाता है तब तक यह जानने का कोई तरीका नहीं है कि कौन सा एप्लिकेशन सर्वर इस सत्र में है।

संपादित करें: मुझे एहसास हुआ कि साइट पर स्पाइडर और बुकमार्क किए जाने की आवश्यकता होने पर पारदर्शिता की केवल आवश्यकता है। जैसे यदि साइट एक मात्र वेब ऐप है, तो विमान या ट्रेन टिकट आरक्षण प्रणाली की तरह कुछ, उपयोगकर्ताओं को विभिन्न यूआरएल के पीछे वेब सर्वर के विशिष्ट क्लस्टर को रीडायरेक्ट करने में कोई समस्या नहीं होनी चाहिए, उदा। a17.ticketreservation.com। इस विशिष्ट मामले में, एप्लिकेशन सर्वर के एकाधिक क्लस्टर का उपयोग करना संभव होगा, प्रत्येक अपने लोड बैलेंसर के पीछे। दिलचस्प बात यह है कि मुझे ऐसी साइट नहीं मिली जो इस तरह की अवधारणा का उपयोग करती है। संपादित करें: मैं इस अवधारणा discussedhighscalability.com पर जहां चर्चा लेई झू ने एक लेख को संदर्भित करता पाया, "Client Side Load Balancing for Web 2.0 Applications" नाम दिया है। लेई झू पारदर्शी रूप से इस क्लाइंट साइड लोड संतुलन को करने के लिए क्रॉस स्क्रिप्टिंग का उपयोग करता है।

यहां तक ​​कि अगर बुकमार्किंग, xss, आदि जैसे दोष हैं, तो मुझे लगता है कि यह कुछ विशेष स्थितियों, अर्थात् लगभग सामग्री मुक्त वेब अनुप्रयोगों के लिए बेहद अच्छा विचार है, जिन्हें स्पाइडर या बुकमार्क करने की आवश्यकता नहीं है (जैसे टिकट आरक्षण प्रणाली या ऐसा कुछ)। फिर लोड संतुलन पारदर्शी रूप से करने की कोई आवश्यकता नहीं है।

मुख्य साइट से सर्वर पर एक साधारण रीडायरेक्ट हो सकता है, उदा। www.ticketreservation.com से एक17.ticketreservation.com पर एक रीडायरेक्ट। वहां से उपयोगकर्ता सर्वर पर रहता है a17। a17 एक सर्वर नहीं है, लेकिन एक क्लस्टर स्वयं है, जिसके द्वारा अनावश्यकता प्राप्त की जा सकती है।

प्रारंभिक रीडायरेक्ट सर्वर लोड लोडर के पीछे स्वयं क्लस्टर हो सकता है। इस तरह, वास्तव में उच्च स्केलेबिलिटी हासिल की जा सकती है, क्योंकि www के पीछे प्राथमिक लोड बैलेंसर केवल प्रत्येक सत्र की शुरुआत में ही मारा जाता है।

बेशक

, अलग URL पर ले जाते बेहद बुरा है, लेकिन मात्र वेब अनुप्रयोगों के साथ (जो की जरूरत नहीं है spidered जा करने के लिए, गहरे जुड़ा हुआ या गहरे बुकमार्क किए गए वैसे भी), यह उपयोगकर्ता के लिए केवल एक ऑप्टिकल समस्या नहीं होनी चाहिए ?

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

उत्तर

1

ईए एसवाई। वेब सर्वर, जो स्टेटलेस हैं, संतुलित हैं। एप्लिकेशन सर्वर (मध्यम स्तर), जो सत्र डेटा धारण करता है, नहीं हैं। वेब सर्वर आपके सत्र आईडी कुकी का उपयोग यह निर्धारित करने के लिए कर सकता है कि कौन सा ऐप सर्वर संपर्क करे।

मेमकैड और माइक्रोसॉफ्ट की वेग ऐसे उत्पाद हैं जो इस सटीक आवश्यकता को हल करते हैं।

संपादित करें: वेब सर्वर कैसे पता लगाता है कि कौन से ऐप सर्वर से संपर्क करना है? यह सत्र आईडी हैश में एम्बेड किया गया है, और सामान्य रूप से किया जा सकता है हालांकि आपको पसंद है। यह आपके सत्र आईडी सर्वर के रूप में सरल हो सकता है: guid। Memcached हैश को बंद कर देता है, हालांकि।

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

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

उन ऐप सर्वरों में एक "स्मार्ट" डीएएल है जो शेड किए गए डेटाबेस (पथ और डेटा दोनों द्वारा विभाजित किया गया है, इसलिए डेटाबेस 1 पर उपयोगकर्ता ए-एल, डेटाबेस 2 पर उपयोगकर्ता एम-जेड, आइटम 1-10000 आइटम 1 आदि)।

उनके पास मध्य स्तर में राज्य नहीं है क्योंकि वे कार्य द्वारा विभाजित हैं। इसलिए, एक सामान्य उपयोगकर्ता अनुभव में ऐप सर्वर के 1 से अधिक पूल शामिल होंगे। मान लें कि आप एक आइटम (ViewAppServerPool) देखते हैं, फिर किसी आइटम (BidAppServerPool) पर बोली लगाने के लिए जाएं। उन सभी ऐप सर्वरों को सिंक में रहना होगा, जिसके बाद सब कुछ प्रबंधित करने के लिए एक वितरित कैश की आवश्यकता होती है। लेकिन, उनका पैमाने इतना बड़ा है कि कोई वितरित कैश प्रभावी ढंग से इसका प्रबंधन नहीं कर सकता है, न ही एक डेटाबेस सर्वर हो सकता है। इसका मतलब है कि उन्हें डेटा स्तर को छोटा करना है, और किसी भी कैश कार्यान्वयन को समान सीमाओं में विभाजित करना होगा।

यह समान है जो मैंने ऊपर पोस्ट किया है, बस एक परत नीचे ले जाया गया है। वेब सर्वर को यह निर्धारित करने के बजाय कि कौन सा ऐप सर्वर संपर्क करना है, ऐप सर्वर निर्धारित करता है कि कौन से डेटाबेस से संपर्क करना है। केवल, eBay के मामले में, यह वास्तव में उनकी विभाजन रणनीति के कारण 20+ डेटाबेस सर्वर पर टक्कर मार सकता है। लेकिन, फिर, स्टेटलेस टियर के पास कुछ प्रकार के नियम हैं जिनका उपयोग राज्य के स्तर से संपर्क करने के लिए किया जाता है। EBay के नियम, हालांकि, सरल "उपयोगकर्ता 1 सर्वर 10 पर है" नियम से थोड़ा अधिक जटिल हैं, मैं ऊपर बता रहा था।

+0

स्टेटलेस वेब सर्वर सही ऐप सर्वर कैसे ढूंढते हैं? क्या हर वेब सर्वर को प्रत्येक सत्र के बारे में किसी भी ऐप सर्वर के बारे में पता होना चाहिए? यह भयानक संचार ओवरहेड नहीं होगा? – SAL9000

+0

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

2

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

Ebay Architecture और Amazon Architecture

बस एक भी लोड से ही आज की दुनिया में संतुलन साल अतीत के DNS राउंड रोबिन के बराबर की तरह है। आज आपके पास anycast जैसी चीजें हैं जो आपको सभी प्रकार की चाल चलने देती हैं। आप यह सुनिश्चित कर सकते हैं कि eBay और अमेज़ॅन की पसंद लोड बैलेंसर्स का उपयोग करती है और वे उनमें से बहुत से उपयोग करते हैं।

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

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

+0

हां, मैंने दोनों लेख highscalability.com पर पढ़े हैं। मैंने इस सवाल को पोस्ट किया क्योंकि मैं वहां लोडबेलेंसिंग के बारे में कुछ भी नहीं ढूंढ पाया। एनाकास्ट राउंड रॉबिन की तुलना में निश्चित रूप से अधिक उन्नत है, लेकिन यह भी समझ में आता है कि यह स्टेटस लोड संतुलन प्रदान नहीं करता है। – SAL9000

2

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

ग्यूसेप DeCandia, डेनिज़ Hastorun, मदन Jampani, Gunavardhan Kakulapati, अविनाश लक्ष्मण, एलेक्स Pilchin, स्वामी Sivasubramanian, पीटर Vosshall और वर्नर वोगल्स, "Dynamo: Amazon's Highly Available Key-Value Store", पर आपरेटिंग सिस्टम सिद्धांतों, स्टीवेंसन, वाशिंगटन 21 वीं ACM संगोष्ठी की कार्यवाही में, अक्टूबर 2007.

2

मैं नहीं जानता कि वे इसे कैसे करते हैं, लेकिन यहाँ कुछ सुझाव हैं:

  • एक लोड संतुलन मेजबान ही ओवरलोडिंग से बचने के लिए राउंड-रोबिन DNS या
  • अलग करने के लिए विभिन्न ग्राहकों को पुन: निर्देशित का उपयोग लोड, सेटिंग्स, जियोलोकेशन, आदि के आधार पर क्लस्टर पतों

मध्य स्तरीय लोड वितरित करने के लिए,

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

शुरू एंड डेटाबेस लोड वापस वितरित करने के लिए

  • "परम्परागत" प्रति-खाता या प्रति "वास्तविक समय" की sharding -उसर डेटा
  • असीमित रूप से धीरे-धीरे बदलते या अपेक्षाकृत स्थिर डेटा को दोहराना; उपयोगकर्ता इसे पुराना देख सकते थे (लेकिन अधिकतर समय नहीं)। मध्य स्तर और वेब सर्वर स्थानीय डेटाबेस से अपने स्थान पर स्थानीय