आप जैसे पाठक MUO का समर्थन करने में मदद करते हैं। जब आप हमारी साइट पर लिंक का उपयोग करके खरीदारी करते हैं, तो हम संबद्ध कमीशन अर्जित कर सकते हैं।
अपने आवेदन का निर्माण करते समय आप जिन कारकों पर विचार कर सकते हैं उनमें से एक वह ट्रैफ़िक की मात्रा है जिसकी आप उपयोगकर्ताओं से अपेक्षा करते हैं। ट्रैफ़िक की मात्रा संभवतः अधिक कारक तय करती है जिसमें संसाधन आवंटन शामिल हो सकता है, खासकर यदि आप अपने ऐप को क्लाउड सेवा प्रदाता पर होस्ट कर रहे हैं।
रेट लिमिटिंग उन तकनीकों में से एक है जिसका उपयोग आप अपने एप्लिकेशन या नेटवर्क पर ट्रैफ़िक को नियंत्रित करने के लिए कर सकते हैं।
दर सीमित क्या है?
दर सीमित करना नेटवर्क ट्रैफ़िक को सीमित करने के लिए एक व्यापक पहुँच प्रतिबंध तकनीक है, मुख्य रूप से अनुमानित समय सीमा के भीतर या जब उपयोगकर्ता ने कई अनुरोधों को निष्पादित किया हो।
क्रूर बल और जैसे साइबर हमलों को कम करने के लिए दर सीमित करना लोकप्रिय है डीडीओएस (डिस्ट्रीब्यूटेड डेनियल ऑफ सर्विस), सीमित वेब स्क्रेपिंग, एपीआई अनुरोध, और अन्य अनियमित उपयोगकर्ता इंटरैक्शन जैसे बॉट ऑटोमेशन और सर्वर तनाव।
गो दर-सीमित अनुप्रयोगों के लिए प्रथम श्रेणी का समर्थन प्रदान करता है
दर पैकेज जो एक दर सीमक प्रदान करता है और इसके साथ इंटरऑपरेट करता है समय पैकेट।दर पैकेज गो प्रोजेक्ट का हिस्सा है, लेकिन मानक लाइब्रेरी में पैकेज उपलब्ध नहीं है। आपको इसके साथ पैकेज इंस्टॉल करना होगा पाना आज्ञा।
अपने प्रोजेक्ट की निर्भरताओं में पैकेज जोड़ने के लिए इस आदेश को अपनी कार्यशील निर्देशिका के टर्मिनल में चलाएं।
जाना "golang.org/x/time/rate" प्राप्त करें
इस ट्यूटोरियल के लिए इन पैकेजों को अपनी गो फ़ाइल में आयात करें।
आयात (
"एन्कोडिंग/जेसन"
"golang.org/x/time/rate"
"लकड़ी का लट्ठा"
"नेट/एचटीटीपी"
)
json पैकेज क्लाइंट को जेएसओएन के रूप में एक संरचना को एन्कोड करने के लिए है। आप उपयोग करेंगे लकड़ी का लट्ठा पैकेज को लकड़ी का लट्ठा कंसोल और एचटीटीपी एंडपॉइंट और मिडलवेयर बनाने और सर्वर शुरू करने के लिए पैकेज।
एक एंडपॉइंट के साथ एक साधारण एपीआई बनाना
परंपरागत रूप से, आप उन हैंडलर कार्यों के लिए एक मिडलवेयर लिखेंगे जिन्हें आप सीमित करना चाहते हैं। हर बार जब उपयोगकर्ता अनुरोध भेजता है, तो मामले के आधार पर, हैंडलर फ़ंक्शन तक पहुंच रिले करने से पहले मिडलवेयर अनुरोध स्थिति को मान्य करता है।
यहां स्ट्रिंग फ़ील्ड वाला स्ट्रक्चर मॉडल है जिसे आप क्लाइंट को एनकोड करेंगे।
प्रकार संदेश struct {
जवाब डोरी`जेसन: "प्रतिक्रिया"`
विवरण डोरी`जेसन: "विवरण"`
}
हैंडलर फ़ंक्शन सामग्री प्रकार को JSON पर सेट करेगा, एक सफल स्थिति कोड लिखेगा, और क्लाइंट को एन्कोडेड स्ट्रक्चर इंस्टेंस लौटाएगा।
समारोहसमापन बिंदु उदाहरण(लेखक http. रिस्पांस राइटर, अनुरोध * http। अनुरोध) {
लेखक। हैडर ()। सेट ("सामग्री-प्रकार", "एप्लिकेशन / जसन")
लेखक। राइटहेडर (http। स्थितिठीक)
संदेश: = संदेश {
प्रतिक्रिया: "सफल",
विवरण: "आपने एपीआई समापन बिंदु को सफलतापूर्वक हिट किया है",
}
त्रुटि: = json. NewEncoder (लेखक)। एन्कोड (और संदेश)
अगर गलती! = शून्य {
वापस करना
}
}
समापन बिंदु उदाहरण हैंडलर फ़ंक्शन एक लेता है एचटीटीपी पैकेट लेखक और अनुरोध विधि उदाहरण और क्लाइंट को एक संदेश देता है लेखक उदाहरण।
रेट लिमिटिंग ए सिंपल गो एप्लीकेशन
उपयोगकर्ता के अनुरोधों की संख्या या अनुरोधों की उपलब्ध संख्या के माध्यम से दर सीमित करना समान है। प्राधिकरण प्रक्रिया से पहले आपको हमेशा एक सीमक बनाने की आवश्यकता होगी।
यहां बताया गया है कि आप दर सीमक कैसे बना सकते हैं और अनुरोधों की संख्या के आधार पर उपयोगकर्ताओं को अधिकृत कर सकते हैं।
समारोहरेटलिमिटर मिडलवेयर(अगला समारोह(लेखक http. रिस्पांस राइटर, अनुरोध * http। अनुरोध)) एचटीटीपी.हैंडलरफंक {
सीमक := दर। न्यूलिमिटर(3, 6) // अधिकतम 6 अनुरोध और फिर प्रति सेकंड तीन और अनुरोध
वापस करना एचटीटीपी। हैंडलरफंक(समारोह(लेखक http. रिस्पांस राइटर, अनुरोध * http। अनुरोध) {
अगर! सीमक। अनुमति देना() {
लेखक। लिखना([]बाइट("दर सीमा पार हो गई "))
वापस करना
} अन्य {
समापन बिंदु उदाहरण (लेखक, अनुरोध)
}
})
}
रेटलिमिटर मिडलवेयर हैंडलर फ़ंक्शन एक मिडलवेयर है जो एक हैंडलर फ़ंक्शन को तर्क के रूप में स्वीकार करता है और एक नया दर सीमक बनाने के बाद प्राधिकरण का परिणाम देता है NewLimiter विधि जो निर्दिष्ट अधिकतम अनुरोधों के बाद प्रति सेकंड अनुरोधों की संख्या के लिए दो पैरामीटर लेती है।
अनुमति देना अधिकृत अनुरोधों की स्थिति के आधार पर सीमक उदाहरण की विधि एक बूलियन लौटाती है। रेटलिमिटर मिडलवेयर अनुरोध अधिकृत होने पर JSON संदेश लौटाता है या "दर सीमा पार हो गई " संदेश जब ग्राहक ने अनुरोधों की अधिकतम संख्या भेजी है।
समारोहमुख्य() {
एचटीटीपी। हैंडलफंक ("/ होम", रेटलिमिटर मिडलवेयर (एंडपॉइंट उदाहरण))
त्रुटि: = http. सुनो और सेवा करो (":8080", शून्य)
अगर गलती! = शून्य {
लकड़ी का लट्ठा। Println ("पोर्ट पर सुनने में त्रुटि हुई:8080", गलती)
}
}
मुख्य फ़ंक्शन माउंट करता है /home के लिए समापन बिंदु रेटलिमिटर मिडलवेयर हैंडलर फ़ंक्शन जो लेता है समापन बिंदु उदाहरण हैंडलर फ़ंक्शन।
सुनो और परोसें विधि लोकलहोस्ट पोर्ट पर एक सर्वर शुरू करती है 8080 और संभावित त्रुटियां लौटाता है।
आप इस कमांड को अपनी वर्किंग डायरेक्टरी के टर्मिनल पर या इसके साथ चला सकते हैं एक बैश स्क्रिप्ट सर्वर चलाने के बाद एंडपॉइंट का परीक्षण करने के लिए।
के लिए मैं में {1..10}; करना कर्ल http://localhost: 8080/होम; पूर्ण
कोड हिट करता है /home अनुरोध के साथ दस बार समापन बिंदु। यहाँ अनुरोधों के परिणाम हैं।
छठे अनुरोध (अधिकतम) के बाद, ग्राहक अनधिकृत है और अब एंडपॉइंट तक नहीं पहुंच सकता है।
दर-सीमित करना महत्वपूर्ण है
दर-सीमित करना आवश्यक है, खासकर यदि आप अपने एप्लिकेशन को होस्ट करने की लागत में कटौती करना चाहते हैं, बॉट हस्तक्षेप को कम करना चाहते हैं, या अपने ऐप को साइबर हमलों से सुरक्षित करना चाहते हैं। गो के समान दर पैकेज, एनपीएम प्रदान करता है एक्सप्रेस-दर-सीमा दर-सीमा एक्सप्रेस अनुप्रयोगों के लिए पैकेज।