8

पर थ्रॉटल कार्यान्वयन मैं a Google Chrome extension for Stack Exchange लिख रहा हूं। यह एक साधारण विस्तार है जो आपको अपनी प्रतिष्ठा का ट्रैक रखने और स्टैक एक्सचेंज साइटों पर टिप्पणियों की अधिसूचना प्राप्त करने की अनुमति देता है।स्टैक एक्सचेंज एपीआई अनुपालन अनुरोध Google App Engine क्लाउड इंफ्रास्ट्रक्चर

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

स्टैक एक्सचेंज एपीआई के पास अनुरोध सीमाएं हैं:
एक एकल आईपी पता केवल प्रति दिन (10,000) एपीआई अनुरोधों की एक निश्चित संख्या बना सकता है।
यदि मैं एकल आईपी पते से 5 सेकंड से अधिक 30 से अधिक अनुरोध करता हूं तो एपीआई मेरे अनुरोधों को बंद कर देगा।

यह स्पष्ट है कि सभी अनुरोधों को 30 प्रति 5 सेकंड तक थ्रॉटल किया जाना चाहिए और वर्तमान में मैंने मेमकैड के साथ एक वितरित लॉक के आधार पर अनुरोध थ्रॉटल तर्क लागू किया है। मैं जीएई उदाहरणों और थ्रॉटल UrlFetch अनुरोधों की गतिविधि को समन्वयित करने के लिए एक सरल लॉक प्रबंधक के रूप में memcached का उपयोग कर रहा हूँ।
लेकिन मुझे लगता है कि 5 सेकंड प्रति 30 से अधिक अनुरोध जारी करने के लिए ऐसे शक्तिशाली बुनियादी ढांचे को सीमित करने में बड़ी विफलता है। इस तरह की एपीआई अनुरोध दर मुझे नई रोचक और उपयोगी सुविधाओं के विकास को जारी रखने की अनुमति नहीं देती है और एक दिन यह ठीक तरह से काम करना बंद कर देगा।
अब मेरे ऐप में 9 0 उपयोगकर्ता हैं और बढ़ रहे हैं और मुझे समाधान दर को अधिकतम करने के लिए समाधान के साथ आना चाहिए।

ज्ञात ऐप इंजन विभिन्न आईपी के उसी पूल के माध्यम से बाह्य UrlFetch अनुरोध करता है। मेरा लक्ष्य उपयोग की एपीआई शर्तों के अनुपालन को सुनिश्चित करने और जीएई वितरित क्षमताओं का उपयोग करने के लिए अनुरोध थ्रॉटल कार्यक्षमता लिखना है।

तो मेरा सवाल यह है कि उपयोग की एपीआई शर्तों का पालन करते हुए और जीएई वितरित क्षमताओं का उपयोग करते हुए अधिकतम व्यावहारिक एपीआई थ्रूपुट प्रदान करना है।

किसी अन्य प्लेटफ़ॉर्म/होस्ट/प्रॉक्सी का उपयोग करने के लिए सलाह मेरे दिमाग में बस बेकार है।

+0

तो आपका क्रोम एक्सटेंशन आपके सर्वर पर अनुरोध भेज रहा है, और फिर आपका सर्वर API को स्टैक करने के अनुरोध भेज रहा है? क्रोम से सीधे स्टैक एपीआई कॉल करना संभव होगा? – serg

+0

@serg, हां, यह संभव होगा, लेकिन इसका मतलब यह होगा कि एक्सटेंशन लगातार उपयोगकर्ता के प्रत्येक खाते के लिए एपीआई एंडपॉइंट पर बहुत से अनुरोध कर रहा होगा। उपयोगकर्ता के खातों की संख्या से इसे गुणा करें। इसके अलावा विस्तार से एपीआई एंडपॉइंट्स तक पहुंचने के लिए अतिरिक्त अनुमति की आवश्यकता होगी। लेकिन हाँ, अब मैं इस समाधान के बारे में सोच रहा हूं –

+0

यदि वे एक एपीआई से 10k अनुरोधों की अनुमति देते हैं तो मुझे लगता है कि वे इसे संभाल सकते हैं। – serg

उत्तर

2

पहला बंद: मैं आपके एक्सटेंशन और चट्टानों का उपयोग कर रहा हूं!

क्या आपने memcached का उपयोग करने और परिणामों को कैश करने पर विचार किया है?
सीधे एपीआई से परिणाम लेने के बजाय, उन्हें कैश पर ढूंढने के लिए पहले प्रयास करें यदि वे इसका उपयोग कर रहे हैं और यदि वे नहीं हैं: उन्हें पुनर्प्राप्त करें और उन्हें कैश करें और उन्हें X मिनट के बाद समाप्त कर दें।

दूसरा, उपयोगकर्ता अनुरोधों को बैच करने का प्रयास करें, एक उपयोगकर्ता की प्रतिष्ठा मांगने के बजाय कई उपयोगकर्ताओं की प्रतिष्ठा से पूछें।

+0

इसका उपयोग करने के लिए धन्यवाद। हां, मैं एपीआई प्रतिक्रिया कैश करने के लिए memcached का उपयोग कर रहा हूँ, लेकिन यह भी मुझे एपीआई अनुरोधों की संख्या को कम करने में मदद नहीं कर सकता है। अनुरोधों को बैच करने के लिए आइडिया मुझे मददगार लगता है, धन्यवाद। –

+1

@Vlasislav कि तरह का मजाकिया, मैं, शैई और आप एक ही कोटा के लिए प्रतिस्पर्धा कर रहे हैं क्योंकि हम सभी के पास GAE पर चल रहा एक वेब एप्लिकेशन है। अभी पता चला! http://stackapps.com/questions/1708/stackprinter-this-ip-has-exceeded-the-request-per-day-limit – systempuntoout

+0

@Vlasislav http://stackapps.com/questions/1713/google-app- इंजन-ऐप-क्यों-करते-आप-थ्रॉटल-बस-जांच-द-आईपी – systempuntoout

4

यदि आप Google App Engine को आईपी के साझा पूल को प्रोग्रामेटिक रूप से प्रबंधित करने का कोई तरीका खोज रहे हैं, तो मैं दृढ़ता से मानता हूं कि आप भाग्य से बाहर हैं।

वैसे भी, यह सलाह है कि faq का हिस्सा है के हवाले से, मुझे लगता है कि आप एक मौका से अधिक अपने भयानक एप्लिकेशन चलाने पर रखने के लिए:

अगर मैं अधिक जरूरत है मुझे क्या करना चाहिए अनुरोध प्रति दिन?

अनुप्रयोगों के कुछ प्रकार - सेवाओं और वेबसाइटों के नाम पर दो - वैध तरीके से विशेष अनुप्रयोगों का तुलना में बहुत अधिक प्रति दिन अनुरोध आवश्यकताओं हो सकता है। यदि आप उच्च अनुरोध कोटा की आवश्यकता प्रदर्शित कर सकते हैं, तो हमसे संपर्क करें।

संपादित करें:
मैं गलत था, वास्तव में आप कोई मौका नहीं है।
Google ऐप इंजन [ऐप] doomed हैं।

+0

धन्यवाद @ सिस्टम सिस्टम, मुझे इस तरह की संभावना से अवगत है। मैं किसी भी तरह से 10,000 प्रति आईपी अनुरोध सीमा का काम कर सकता हूं, लेकिन वास्तव में, मुझे अधिकतर विस्तारित अनुरोधों की आवश्यकता है "गति", 30 प्रति सेकेंड या उससे अधिक कहें, लेकिन फिर भी, वे कहते हैं, "कृपया अपना आवेदन लाइव होने पर केवल बढ़े हुए कोटा का अनुरोध करें और न ही उपयोगकर्ताओं की वास्तविक संख्या "। मुझे यकीन नहीं है कि 100 और यहां तक ​​कि 1000 उपयोगकर्ताओं की एक गैर-तुच्छ संख्या है। –

+0

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

+1

@Vladislav जैसा कि आपने कहा था, आपको अपने व्यापार तर्क को ब्राउज़र में ले जाना चाहिए (जहां आईपी कोई समस्या नहीं है) उदाहरण के लिए SOAPI.js जैसे परिपक्व जेएस लाइब्रेरी को अपनाना। – systempuntoout