परिचय: डीएनएस इंतज़ार के समय की वजहें और उन्हें कम करने से जुड़ी जानकारी
जैसे-जैसे वेब पेज ज़्यादा जटिल होते जाते हैं, वैसे-वैसे कई डोमेन के रिसॉर्स रेफ़र करने लगते हैं. इस वजह से, डीएनएस लुकअप को इस्तेमाल करने से ब्राउज़िंग के दौरान मुश्किल हो सकती है. जब किसी क्लाइंट को नेटवर्क पर किसी डीएनएस रिज़ॉल्वर के बारे में क्वेरी करनी पड़ती है, तब इंतज़ार का समय काफ़ी हो सकता है. यह काफ़ी पास में है और रिज़ॉल्वर को क्वेरी किए जाने वाले नाम सर्वर की संख्या पर निर्भर करता है (दो से ज़्यादा होने की संभावना नहीं है, लेकिन हो सकता है). उदाहरण के लिए, नीचे दिया गया स्क्रीन शॉट पेज स्पीड के वेब परफ़ॉर्मेंस मेज़रमेंट टूल से रिपोर्ट किया गया समय दिखाता है. हर बार, पेज के रेफ़र किए गए रिसॉर्स को दिखाता है; काले रंग के सेगमेंट, डीएनएस लुकअप का संकेत देते हैं. इस पेज में, पेज लोड होने के पहले 11 सेकंड में 13 लुकअप चलाए जाते हैं. हालांकि, कई लुकअप साथ-साथ किए जाते हैं, लेकिन स्क्रीन शॉट से पता चलता है कि 5 सीरियल लुकअप समय की ज़रूरत होती है, जिसमें पेज लोड होने में लगने वाले कुल 11 सेकंड में से कुछ सेकंड का समय शामिल होता है.
डीएनएस के इंतज़ार का समय दो कॉम्पोनेंट है:
- क्लाइंट (उपयोगकर्ता) और डीएनएस रिज़ॉल्यूशन करने वाले सर्वर के बीच इंतज़ार का समय. ज़्यादातर मामलों में ऐसा नेटवर्क सिस्टम में आम तौर पर होने वाली राउंड-ट्रिप टाइम (आरटीटी) की वजह से होता है. जैसे: क्लाइंट और सर्वर मशीनों के बीच भौगोलिक दूरी; नेटवर्क में नेटवर्क बहुत ज़्यादा होना, पैकेट लॉस और लंबे समय तक ट्रांसमिशन में देरी (औसतन एक सेकंड), सर्वर पर बहुत ज़्यादा लोड होना, सेवा में रुकावट डालना वगैरह.
- समाधान करने वाले सर्वर और दूसरे नेम सर्वर के बीच इंतज़ार का समय.
इंतज़ार के समय की यह वजह मुख्य रूप से इन वजहों से होती है:
- कैश मेमोरी में सेव नहीं हुआ. अगर रिज़ॉल्वर के कैश से रिस्पॉन्स नहीं दिखाया जा सकता, लेकिन दूसरे नेम सर्वर से बार-बार क्वेरी करने की ज़रूरत होती है, तो नेटवर्क के इंतज़ार का समय जोड़ा जा सकता है. ऐसा खास तौर पर तब किया जाता है, जब आधिकारिक सर्वर भौगोलिक रूप से रिमोट हों.
- प्रावधान नहीं किया जा रहा है. अगर डीएनएस रिज़ॉल्वर ओवरलोड हो जाते हैं, तो उन्हें डीएनएस रिज़ॉल्यूशन के अनुरोधों और जवाबों को सूची में शामिल करना होगा. इसके अलावा, वे पैकेट छोड़ना और फिर से ट्रांसमिट करना शुरू कर सकते हैं.
- नुकसान पहुंचाने वाला ट्रैफ़िक. अगर डीएनएस सेवा का प्रावधान बहुत ज़्यादा किया गया है, तब भी DoS ट्रैफ़िक, सर्वर पर ज़रूरत से ज़्यादा लोड डाल सकता है. इसी तरह, कमींस्की शैली के हमलों में बाढ़ रिज़ॉल्वर की क्वेरी शामिल हो सकती हैं, जिनके सवालों के जवाब कैश मेमोरी को बायपास करने चाहिए. साथ ही, समस्या को हल करने के लिए आउटगोइंग अनुरोध करना ज़रूरी है.
हमें लगता है कि डीएनएस में देरी की मुख्य वजह कैश मेमोरी में सेव न होने की वजह से है. इसके बारे में नीचे चर्चा की गई है.
कैश मेमोरी में सेव नहीं हुआ
अगर रिज़ॉल्वर के पास बहुत ज़्यादा स्थानीय संसाधन हैं, तब भी रिमोट नेम सर्वर से बात करने में होने वाली देरी से बचना मुश्किल होता है. दूसरे शब्दों में, यह मानते हुए कि रिज़ॉल्वर का प्रावधान अच्छी तरह से किया गया है, ताकि सर्वर-साइड पर कैश हिट को कोई समय न लगे, लेकिन इंतज़ार का समय होने पर कैश मेमोरी का डेटा बहुत महंगा रहता है. किसी मिस को मैनेज करने के लिए, रिज़ॉल्वर को कम से कम एक लेकिन अक्सर दो या इससे ज़्यादा बाहरी नेम सर्वर से बात करनी होती है. Googlebot के वेब क्रॉलर पर काम करते हुए, हमने रिस्पॉन्स देने वाले नेम सर्वर के लिए औसत रिज़ॉल्यूशन समय 130 मि॰से॰ का देखा है. हालांकि, पूरे 4-6% अनुरोधों का समय खत्म हो जाता है. ऐसा इसलिए होता है, क्योंकि यूडीपी पैकेट लॉस और सर्वर तक नहीं पहुंच पाते. अगर हम पैकेट लॉस, खराब नेम सर्वर, डीएनएस कॉन्फ़िगरेशन की गड़बड़ियों वगैरह जैसी गड़बड़ियों पर ध्यान दें, तो शुरू से आखिर तक असल औसत रिज़ॉल्यूशन 300-400 मि॰से॰ ही होता है. हालांकि, इसमें बहुत ज़्यादा फ़र्क़ और लॉन्ग टेल भी होता है.
हालांकि, अलग-अलग डीएनएस सर्वर के लिए कैश मेमोरी में जाने की दर अलग-अलग हो सकती है, लेकिन कैश मेमोरी में सेव नहीं होने की दर से बचना, नीचे दी गई वजहों से बुनियादी तौर पर मुश्किल है:
- इंटरनेट का आकार और विकास. इसका मतलब है कि जैसे-जैसे इंटरनेट का दायरा बढ़ रहा है, जैसे-जैसे नए उपयोगकर्ताओं और नई साइटों का इज़ाफ़ा हुआ है वैसे-वैसे ज़्यादातर कॉन्टेंट कम लोगों के हित में है. हालांकि, कुछ साइटें (और इस वजह से, डीएनएस नाम) बहुत लोकप्रिय हैं, लेकिन ज़्यादातर साइटें बहुत कम लोगों को पसंद आती हैं और उन्हें शायद ही कभी ऐक्सेस किया जाता है. इसलिए, ज़्यादातर अनुरोधों में कैश मेमोरी की सुविधा को चालू नहीं किया जाता.
- टाइम-टू-लाइव (टीटीएल) की कम वैल्यू. कम डीएनएस TTL (टीटीएल) वैल्यू के रुझान का मतलब है कि रिज़ॉल्यूशन को बार-बार देखने की ज़रूरत है.
- कैश आइसोलेशन. आम तौर पर, डीएनएस सर्वर लोड बैलेंसर के साथ डिप्लॉय किए जाते हैं, जो अलग-अलग मशीनों को किसी भी क्रम में क्वेरी असाइन करते हैं. इसका नतीजा यह होता है कि हर सर्वर, शेयर किए गए पूल से कैश मेमोरी में सेव किए गए रिज़ॉल्यूशन का फिर से इस्तेमाल करने के बजाय, एक अलग कैश मेमोरी में सेव रखता है.
पाबंदियां
Google के सार्वजनिक डीएनएस में हमने डीएनएस लुकअप के समय को तेज़ करने के लिए कई तरीके लागू किए हैं. इनमें से कुछ तरीके करीब-करीब स्टैंडर्ड हैं और कुछ एक्सपेरिमेंटल भी हैं:
- क्लाइंट के ट्रैफ़िक से लोड को मैनेज करने के लिए, सर्वर का सही तरीके से प्रावधान करना. इसमें, नुकसान पहुंचाने वाला ट्रैफ़िक भी शामिल है.
- DoS और एम्प्लफ़िकेशन अटैक को रोकना. हालांकि, यह ज़्यादातर सुरक्षा से जुड़ी समस्या है और क्लोज़्ड रिज़ॉल्वर पर इसका असर, ओपन रिज़ॉल्वर पर कम होता है. हालांकि, DoS हमलों को रोकने से, डीएनएस सर्वर पर ट्रैफ़िक का अतिरिक्त बोझ कम हो जाता है और परफ़ॉर्मेंस बेहतर होती है. हमलों की संभावना को कम करने के लिए, हम कौनसे तरीके अपना रहे हैं, यह जानने के लिए सुरक्षा से जुड़े फ़ायदे पेज देखें.
- शेयर की गई कैश मेमोरी के लिए लोड-बैलेंसिंग. इससे, दिखाए जाने वाले क्लस्टर में, कैश मेमोरी की हिट रेट को बेहतर बनाया जा सकता है.
- सभी उपयोगकर्ताओं से नज़दीकी के लिए ग्लोबल कवरेज उपलब्ध कराना.
सही तरीके से सर्विंग क्लस्टर का प्रावधान करना
कैश मेमोरी में सेव किए जाने वाले डीएनएस रिज़ॉल्वर को आधिकारिक नेम सर्वर के मुकाबले ज़्यादा महंगी कार्रवाइयां करनी पड़ती हैं. ऐसा इसलिए होता है, क्योंकि कई रिस्पॉन्स, मेमोरी से नहीं दिए जा सकते. इसके बजाय, उन्हें दूसरे नेम सर्वर से संपर्क करना होता है और इसलिए, बहुत ज़्यादा नेटवर्क इनपुट/आउटपुट की ज़रूरत होती है. इसके अलावा, ओपन रिज़ॉल्वर को कैश पॉइज़निंग की कोशिशों से बहुत ज़्यादा खतरा होता है. इससे कैश मिस रेट बढ़ जाता है (इस तरह के हमले खास तौर पर ऐसे फर्जी नामों के लिए अनुरोध भेजते हैं जिन्हें कैश से ठीक नहीं किया जा सकता) और डीओएस हमलों से ट्रैफ़िक बढ़ जाता है. अगर रिज़ॉल्वर को सही तरीके से सेट नहीं किया गया है और वे लोड पर बने रहेंगे, तो इससे परफ़ॉर्मेंस पर बहुत खराब असर पड़ सकता है. पैकेट छोड़ दिए जाते हैं और उन्हें फिर से ट्रांसमिट किया जाता है, नाम सर्वर के अनुरोधों को सूची में रखना होता है वगैरह. इन सभी वजहों से देरी होती है.
इसलिए, यह ज़रूरी है कि डीएनएस रिज़ॉल्वर को ज़्यादा वॉल्यूम वाले इनपुट/आउटपुट का प्रावधान किया जाए. इसमें संभावित DDoS हमलों से निपटना शामिल है. इसके लिए, कई मशीनों को ज़रूरत से ज़्यादा इस्तेमाल करना ही एकमात्र प्रभावी समाधान है. हालांकि, मशीन जोड़ने के साथ-साथ कैश हिट रेट को कम न करना ज़रूरी है. इसके लिए, लोड बैलेंस करने की एक असरदार नीति लागू करनी होगी, जिसके बारे में हमने नीचे चर्चा की है.
शेयर की गई कैश मेमोरी के लिए लोड-बैलेंसिंग
अगर लोड बैलेंसिंग ठीक से नहीं की जाती, तो मशीन जोड़कर रिज़ॉल्वर इन्फ़्रास्ट्रक्चर को स्केल करने से, असल में बैकफ़ायर हो सकता है और कैश हिट रेट कम हो सकती है. एक सामान्य डिप्लॉयमेंट में कई मशीनें एक लोड बैलेंसर के साथ काम करती हैं, जो राउंड रॉबिन जैसे आसान एल्गोरिदम का इस्तेमाल करके, हर मशीन पर ट्रैफ़िक को बराबर बांटता है. इस वजह से हर मशीन अपना स्वतंत्र कैश बनाए रखती है, ताकि कैश मेमोरी सभी मशीनों से अलग-अलग रहे. अगर आने वाली हर क्वेरी को किसी रैंडम मशीन पर भेजा जाता है, तो ट्रैफ़िक के हिसाब से, कैश मेमोरी में मौजूद डेटा की मिस रेट को आनुपातिक रूप से बढ़ाया जा सकता है. उदाहरण के लिए, बार-बार क्वेरी किए जाने वाले लंबे TTL (टीटीएल) वाले नामों के लिए, कैश मेमोरी में गड़बड़ी की दर को क्लस्टर में मौजूद मशीनों की संख्या तक बढ़ाया जा सकता है. (बहुत छोटे TTL वाले नामों के लिए, जिनकी कभी-कभी क्वेरी की जाती है या जिनके कारण कैश नहीं किए जा सकने वाले जवाब (0 TTL (टीटीएल) और गड़बड़ियां होती हैं) होती हैं, मशीन जोड़ने से कैश मिस रेट पर कोई असर नहीं पड़ता.
कैश किए जा सकने वाले नामों की हिट दर को बढ़ाने के लिए, सर्वर को लोड-बैलेंस करना ज़रूरी है, ताकि कैश मेमोरी को अलग-अलग हिस्सों में न बांटा जा सके. Google की सार्वजनिक डीएनएस सेवा में, कैश मेमोरी के दो लेवल होते हैं. मशीनों के एक पूल में, उपयोगकर्ता के बहुत करीब, एक छोटे प्रति-मशीन कैश में सबसे लोकप्रिय नाम होते हैं. अगर किसी क्वेरी का जवाब इस कैश मेमोरी से नहीं मिलता, तो उसे दूसरी मशीनों पर भेजा जाता है जो कैश को नामों से बांटती है. दूसरे लेवल की कैश मेमोरी के लिए, एक ही नाम की सभी क्वेरी एक ही मशीन पर भेजी जाती हैं, जहां नाम या तो कैश मेमोरी में सेव किया जाता है या नहीं.
बहुत ज़्यादा भौगोलिक कवरेज के लिए, विज्ञापन दिखाने वाले क्लस्टर दिए जा रहे हैं
क्लोज़्ड रिज़ॉल्वर के लिए, यह वास्तव में कोई समस्या नहीं है. ओपन रिज़ॉल्वर के लिए, आपके सर्वर आपके उपयोगकर्ताओं के जितना करीब होंगे क्लाइंट एंड पर उन्हें उतना ही कम इंतज़ार का समय दिखेगा. इसके अलावा, पर्याप्त भौगोलिक कवरेज होने से, किसी और तरीके से शुरू से आखिर तक इंतज़ार का समय बेहतर हो सकता है, क्योंकि नाम सर्वर आम तौर पर डीएनएस रिज़ॉल्वर की जगह के लिए ऑप्टिमाइज़ किए गए नतीजे दिखाते हैं. इसका मतलब है कि अगर कॉन्टेंट देने वाली कोई कंपनी दुनिया भर में, डुप्लीकेट साइटों को होस्ट करती है, तो उस कंपनी के नेम सर्वर आईपी पते को डीएनएस रिज़ॉल्वर के सबसे करीब दिखाते हैं.
Google की सार्वजनिक डीएनएस सेवा को दुनिया भर के डेटा सेंटर में होस्ट किया जाता है. यह उपयोगकर्ताओं को भौगोलिक रूप से सबसे नज़दीकी डेटा सेंटर पर भेजने के लिए, एनीकास्ट रूटिंग का इस्तेमाल करता है.
इसके अलावा, Google का सार्वजनिक डीएनएस, ईडीएनएस क्लाइंट सबनेट (ईसीएस) के साथ काम करता है. यह रिज़ॉल्वर एक डीएनएस प्रोटोकॉल एक्सटेंशन है, ताकि क्लाइंट की जगह को नेम सर्वर पर भेजा जा सके. यह रिज़ॉल्वर के आईपी पते के बजाय, असल क्लाइंट आईपी पते के लिए ऑप्टिमाइज़ की गई जगह के हिसाब से संवेदनशील रिस्पॉन्स दिखा सकता है. ज़्यादा जानकारी के लिए, कृपया अक्सर पूछे जाने वाले सवाल पढ़ें. Google सार्वजनिक डीएनएस अपने-आप ऐसे नेम सर्वर का पता लगाता है जो Eडीएनएस क्लाइंट सबनेट के साथ काम करते हैं.