अनुरोध की संख्या सीमित है

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

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

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

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

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

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

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

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

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

इसके अलावा, क्लाइंट-साइड से QPS को थ्रॉटल किया जा सकता है. इसके लिए, थ्रॉटलिंग और रेट लिमिटर देखें.

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

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

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

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

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

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

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

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

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

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