मैं वर्तमान में लोड संतुलन के लिए DNS राउंड रॉबिन का उपयोग करता हूं, जो बहुत अच्छा काम करता है। रिकॉर्ड इस तरह दिखते हैं (मेरे पास 120 सेकंड का एक टीटीएल है)
;; ANSWER SECTION:
orion.2x.to. 116 IN A 80.237.201.41
orion.2x.to. 116 IN A 87.230.54.12
orion.2x.to. 116 IN A 87.230.100.10
orion.2x.to. 116 IN A 87.230.51.65
मुझे पता चला कि प्रत्येक ISP / डिवाइस इस तरह की प्रतिक्रिया को उसी तरह नहीं मानता है। उदाहरण के लिए, कुछ DNS सर्वर पते को यादृच्छिक रूप से घुमाते हैं या हमेशा उनके माध्यम से चक्र करते हैं। कुछ सिर्फ पहली प्रविष्टि का प्रचार करते हैं, अन्य यह निर्धारित करने का प्रयास करते हैं कि आईपी पते को देखकर कौन सा सबसे अच्छा (क्षेत्रीय रूप से निकट) है।
हालांकि अगर उपयोगकर्ता का आधार काफी बड़ा है (कई आईएसपी, आदि पर फैलता है) तो यह बहुत अच्छी तरह से संतुलित होता है। उच्चतम से निम्नतम लोड किए गए सर्वर की विसंगतियां शायद ही हर 15% से अधिक हो।
हालाँकि अब मुझे समस्या है कि मैं सिस्टम में अधिक सर्वर शुरू कर रहा हूं, और सभी में समान क्षमता नहीं है।
वर्तमान में मेरे पास केवल 1 जीबीपीएस सर्वर है, लेकिन मैं 100 एमबीपीएस और 10 जीबीपीएस सर्वर के साथ भी काम करना चाहता हूं।
तो मैं जो चाहता हूं, मैं 100 के वजन के साथ 10 जीबीपीएस के साथ एक सर्वर शुरू करना चाहता हूं, 10 के वजन के साथ 1 जीबीपीएस सर्वर और 1 के वजन के साथ 100 एमबीपीएस सर्वर।
मैंने पहले उनसे अधिक ट्रैफ़िक लाने के लिए दो बार सर्वर जोड़े (जो अच्छा काम करता था - बैंडविड्थ लगभग दोगुना हो गया)। लेकिन DNS में 100 Gbps सर्वर को 100 गुना जोड़ना थोड़ा हास्यास्पद है।
इसलिए मैंने TTL का उपयोग करने के बारे में सोचा।
अगर मैं सर्वर को 240 सेकंड TTL और सर्वर B केवल 120 सेकंड (जो कि राउंड रॉबिन के लिए उपयोग करने के लिए न्यूनतम के बारे में है, के रूप में देता है, तो बहुत सारे DNS सर्वर 120 पर सेट होते हैं यदि एक कम TTL निर्दिष्ट किया जाता है (इसलिए मैंने सुना है)। मुझे लगता है कि आदर्श परिदृश्य में ऐसा कुछ होना चाहिए:
First 120 seconds
50% of requests get server A -> keep it for 240 seconds.
50% of requests get server B -> keep it for 120 seconds
Second 120 seconds
50% of requests still have server A cached -> keep it for another 120 seconds.
25% of requests get server A -> keep it for 240 seconds
25% of requests get server B -> keep it for 120 seconds
Third 120 seconds
25% will get server A (from the 50% of Server A that now expired) -> cache 240 sec
25% will get server B (from the 50% of Server A that now expired) -> cache 120 sec
25% will have server A cached for another 120 seconds
12.5% will get server B (from the 25% of server B that now expired) -> cache 120sec
12.5% will get server A (from the 25% of server B that now expired) -> cache 240 sec
Fourth 120 seconds
25% will have server A cached -> cache for another 120 secs
12.5% will get server A (from the 25% of b that now expired) -> cache 240 secs
12.5% will get server B (from the 25% of b that now expired) -> cache 120 secs
12.5% will get server A (from the 25% of a that now expired) -> cache 240 secs
12.5% will get server B (from the 25% of a that now expired) -> cache 120 secs
6.25% will get server A (from the 12.5% of b that now expired) -> cache 240 secs
6.25% will get server B (from the 12.5% of b that now expired) -> cache 120 secs
12.5% will have server A cached -> cache another 120 secs
... I think I lost something at this point, but I think you get the idea...
जैसा कि आप देख सकते हैं कि यह भविष्यवाणी करने के लिए बहुत जटिल हो गया है और यह सुनिश्चित करेगा कि व्यवहार में इस तरह से काम न करें। लेकिन वितरण पर इसका असर जरूर होना चाहिए!
मुझे पता है कि भारित राउंड रॉबिन मौजूद है और बस रूट सर्वर द्वारा नियंत्रित किया जाता है। यह प्रतिक्रिया देने के दौरान DNS रिकॉर्ड्स के माध्यम से केवल साइकिल चलाता है और DNS रिकॉर्ड को एक संभावित संभावना के साथ देता है जो भार के अनुरूप है। मेरा DNS सर्वर इसका समर्थन नहीं करता है, और मेरी आवश्यकताएं सटीक नहीं हैं। अगर यह पूरी तरह से अपने ठीक वजन नहीं है, लेकिन यह सही दिशा में जाना चाहिए।
मुझे लगता है कि टीटीएल क्षेत्र का उपयोग करना एक अधिक सुरुचिपूर्ण और आसान समाधान हो सकता है - और इसे गतिशील रूप से नियंत्रित करने वाले DNS सर्वर की आवश्यकता नहीं होती है, जो संसाधनों को बचाता है - जो कि मेरी राय में DNS लोड संतुलन बनाम हार्डवेयर लोड बैलेन्कर्स के पूरे बिंदु है।
मेरा प्रश्न अब यह है: क्या DNS रिकॉर्ड्स के टीटीएल विशेषता का उपयोग करके वेट राउंड रॉबिन वितरण के लिए अंगूठे का कोई सर्वोत्तम अभ्यास / तरीके / नियम हैं?
संपादित करें:
सिस्टम एक अग्रगामी प्रॉक्सी सर्वर प्रणाली है। बैंडविड्थ की मात्रा (अनुरोध नहीं) ईथरनेट के साथ एक एकल सर्वर को संभाल सकता है। इसलिए मुझे एक संतुलन समाधान की आवश्यकता है जो बैंडविड्थ को कई सर्वरों में वितरित करता है। क्या DNS का उपयोग करने की तुलना में कोई वैकल्पिक विधियां हैं? बेशक मैं फाइबर चैनल आदि के साथ एक लोड बैलेंसर का उपयोग कर सकता हूं, लेकिन लागत हास्यास्पद है और यह केवल टोंटी की चौड़ाई को बढ़ाता है और इसे समाप्त नहीं करता है। केवल एक चीज जिसके बारे में मैं सोच सकता हूं, वह है आईपी एड्रेस।