दर की सीमाएं

Google Ads API, ग्राहक आईडी और Google Cloud प्रोजेक्ट, दोनों पर क्वेरी प्रति सेकंड (क्यूपीएस) के हिसाब से अनुरोध संख्या सीमित करना लागू करता है. Google Ads API, अनुरोधों को मापने और क्यूपीएस की सही सीमा तय करने के लिए, टोकन बकेट एल्गोरिदम का इस्तेमाल करता है. इसलिए, किसी भी समय सर्वर पर लोड के हिसाब से, यह सीमा अलग-अलग हो सकती है.

दर की सीमाएं लागू करने का मकसद, किसी एक उपयोगकर्ता को Google Ads API के सर्वर पर बड़ी संख्या में अनुरोध भेजकर, अन्य उपयोगकर्ताओं के लिए सेवा में रुकावट डालने से रोकना है. ऐसा जान-बूझकर या अनजाने में किया जा सकता है.

दर की सीमाओं का उल्लंघन करने वाले अनुरोधों को इस गड़बड़ी के साथ अस्वीकार कर दिया जाएगा: RESOURCE_TEMPORARILY_EXHAUSTED.

अपने ऐप्लिकेशन पर कंट्रोल पाने और दर की सीमाओं को कम करने के लिए, अनुरोधों की संख्या कम करें. साथ ही, क्लाइंट की ओर से क्यूपीएस को थ्रॉटल करें.

दर की सीमा से ज़्यादा अनुरोध भेजने की संभावना को कम करने के कई तरीके हैं. Enterprise Integration Patterns (EIP) के कॉन्सेप्ट के बारे में जानने से, क्लाइंट ऐप्लिकेशन को बेहतर बनाया जा सकता है. जैसे, मैसेजिंग, फिर से डिलीवरी, और थ्रॉटलिंग.

यहां, जटिलता के हिसाब से सुझाए गए तरीके दिए गए हैं. इनमें सबसे आसान रणनीतियां सबसे ऊपर हैं और ज़्यादा बेहतर, लेकिन जटिल आर्किटेक्चर नीचे दिए गए हैं:

एक साथ कई टास्क करने की सीमा तय करना

दर की सीमाओं से ज़्यादा अनुरोध भेजने की एक मुख्य वजह यह है कि क्लाइंट ऐप्लिकेशन, एक साथ कई टास्क कर रहा है. हम क्लाइंट ऐप्लिकेशन के लिए, एक साथ कई अनुरोध भेजने की कोई सीमा तय नहीं करते. हालांकि, इससे Google Cloud प्रोजेक्ट के लेवल पर, हर सेकंड किए जाने वाले अनुरोधों की सीमा से ज़्यादा अनुरोध भेजे जा सकते हैं.

हमारा सुझाव है कि एक साथ कई टास्क करने की कुल संख्या के लिए, एक सही ऊपरी सीमा तय करें. साथ ही, दर की सीमा से ज़्यादा अनुरोध भेजे बिना, थ्रूपुट को ऑप्टिमाइज़ करने के लिए, इस सीमा को बढ़ाएं.

इसके अलावा, क्लाइंट की ओर से क्यूपीएस को थ्रॉटल किया जा सकता है. इसके लिए, थ्रॉटलिंग और दर की सीमा तय करने वाले टूल देखें Throttling and rate limiters.

अनुरोधों को बैच में भेजना

कई कार्रवाइयों को एक ही अनुरोध में बैच करने पर विचार करें. यह अलग-अलग सेवाओं के लिए Mutate कॉल पर सबसे ज़्यादा लागू होता है. उदाहरण के लिए, अगर आपको AdGroupAd के कई इंस्टेंस की स्थिति अपडेट करनी है, तो MutateAdGroupAds को एक बार कॉल करें. साथ ही, हर AdGroupAd के लिए MutateAdGroupAds को एक बार कॉल करने के बजाय, कई operations पास करें. कुछ अन्य उदाहरणों के लिए, बैच में कार्रवाइयां करने के बारे में हमारी गाइड देखें.

अनुरोधों को बैच में भेजने से, अनुरोधों की कुल संख्या कम हो जाती है. साथ ही, हर मिनट किए जाने वाले अनुरोधों की दर की सीमा कम हो जाती है. हालांकि, अगर किसी एक खाते के लिए बड़ी संख्या में कार्रवाइयां की जाती हैं, तो हर मिनट की जाने वाली कार्रवाइयों की दर की सीमा ट्रिगर हो सकती है.

थ्रॉटलिंग और दर की सीमा तय करने वाले टूल

अपने ऐप्लिकेशन में थ्रेड की कुल संख्या सीमित करने के अलावा, क्लाइंट की ओर से दर की सीमा तय करने वाले टूल भी लागू किए जा सकते हैं. इससे यह पक्का किया जा सकता है कि आपकी सभी प्रोसेस और / या क्लस्टर में मौजूद सभी थ्रेड, क्लाइंट की ओर से तय की गई क्यूपीएस की किसी खास सीमा से नियंत्रित हों.

क्लस्टर वाले एनवायरमेंट के लिए, Guava Rate Limiter देखें या टोकन बकेट पर आधारित अपना एल्गोरिदम लागू करें. उदाहरण के लिए, टोकन जनरेट किए जा सकते हैं और उन्हें शेयर किए गए ट्रांज़ैक्शनल स्टोरेज में सेव किया जा सकता है. जैसे, डेटाबेस. इसके बाद, हर क्लाइंट को अनुरोध प्रोसेस करने से पहले, टोकन लेना और इस्तेमाल करना होगा. अगर टोकन खत्म हो जाते हैं, तो क्लाइंट को टोकन का अगला बैच जनरेट होने तक इंतज़ार करना होगा.

सूची बनाने की सुविधा

मैसेज क्यू, ऑपरेशन लोड डिस्ट्रिब्यूशन का समाधान है. साथ ही, इससे अनुरोध और उपभोक्ता की दरों को भी कंट्रोल किया जा सकता है. मैसेज क्यू के कई विकल्प उपलब्ध हैं. इनमें से कुछ ओपन सोर्स हैं, तो कुछ मालिकाना हक वाले हैं. इनमें से कई विकल्प, अलग-अलग भाषाओं के साथ काम कर सकते हैं.

मैसेज क्यू का इस्तेमाल करते समय, कई प्रोड्यूसर, क्यू में मैसेज पुश कर सकते हैं. साथ ही, कई कंज्यूमर उन मैसेज को प्रोसेस कर सकते हैं. एक साथ कई कंज्यूमर की संख्या सीमित करके, कंज्यूमर की ओर से थ्रॉटल लागू किए जा सकते हैं. इसके अलावा, प्रोड्यूसर या कंज्यूमर के लिए, दर की सीमा तय करने वाले टूल या थ्रॉटलर लागू किए जा सकते हैं.

उदाहरण के लिए, अगर किसी मैसेज कंज्यूमर को दर की सीमा से जुड़ी गड़बड़ी मिलती है, तो वह कंज्यूमर, अनुरोध को क्यू में वापस भेज सकता है, ताकि उसे फिर से भेजा जा सके. इसके साथ ही, वह कंज्यूमर, अन्य सभी कंज्यूमर को कुछ सेकंड के लिए प्रोसेसिंग रोकने की सूचना भी दे सकता है, ताकि गड़बड़ी से ठीक हो सके.