एंटीपैटर्न: जो कोटा नहीं दिया गया है उसे कॉन्फ़िगर करें

Apigee Edge दस्तावेज़ देखा जा रहा है.
Apigee X दस्तावेज़ पर जाएं.
जानकारी

Apigee Edge, कोटा नीति का इस्तेमाल करके, एक खास समयावधि के लिए एपीआई प्रॉक्सी को अनुमति वाले अनुरोधों की संख्या कॉन्फ़िगर कर सकता है.

एंटीपैटर्न

एपीआई प्रॉक्सी अनुरोध को Message प्रोसेसर नाम के एक या उससे ज़्यादा डिस्ट्रिब्यूटेड एज कॉम्पोनेंट की मदद से पूरा किया जा सकता है. अगर एपीआई अनुरोधों को दिखाने के लिए एक से ज़्यादा मैसेज प्रोसेसर कॉन्फ़िगर किए गए हैं, तो कोटा पूरा हो सकता है. ऐसा इसलिए, क्योंकि हर मैसेज प्रोसेसर के पास प्रोसेस किए जाने वाले अनुरोधों की अपनी "गिनती" होती है.

आइए, एक उदाहरण की मदद से इसे समझाएं. एपीआई प्रॉक्सी के लिए, नीचे दी गई कोटा नीति देखें:

<!-- /antipatterns/examples/1-6.xml -->
<Quota name="CheckTrafficQuota">
  <Interval>1</Interval>
  <TimeUnit>hour</TimeUnit>
  <Allow count="100"/>
</Quota>

ऊपर दिए गए कॉन्फ़िगरेशन में, हर घंटे कुल 100 अनुरोध किए जा सकते हैं.

हालांकि, जब एक से ज़्यादा मैसेज प्रोसेसर एपीआई अनुरोधों को पूरा करते हैं, तो ये काम होते हैं:

ऊपर दिए गए उदाहरण में:

  • कोटा नीति को इस तरह कॉन्फ़िगर किया गया है कि हर घंटे 100 अनुरोध किए जा सकते हैं.
  • एपीआई प्रॉक्सी को भेजे जाने वाले अनुरोध, दो मैसेज प्रोसेसर के ज़रिए पूरे किए जा रहे हैं.
  • हर मैसेज प्रोसेसर, प्रोसेस किए जा रहे अनुरोधों की संख्या को ट्रैक करने के लिए, अपना कोटा काउंट वैरिएबल, quota_count_mp1 और quota_count_mp2 बनाए रखता है.
  • इसलिए, हर मैसेज प्रोसेसर, 100 एपीआई अनुरोधों को अलग-अलग अनुमति देगा. इसका कुल असर यह है कि 100 अनुरोधों के बजाय कुल 200 अनुरोध प्रोसेस किए जाते हैं.

असर

इस स्थिति से कोटा कॉन्फ़िगरेशन का मकसद पूरा नहीं होता. साथ ही, इसका अनुरोधों को पूरा करने वाले बैकएंड सर्वर पर नुकसान हो सकता है.

बैकएंड सर्वर ये काम कर सकते हैं:

  • उम्मीद से ज़्यादा ट्रैफ़िक की वजह से परेशान हों
  • 503 गड़बड़ियों की वजह से आने वाले नए एपीआई अनुरोधों का जवाब न देना

सबसे सही तरीका

कोटा नीति में, <Distributed> एलिमेंट को true पर सेट करें. इससे यह पक्का किया जा सकेगा कि सभी मैसेज प्रोसेसर में, एपीआई अनुरोधों को ट्रैक करने के लिए एक कॉमन काउंटर का इस्तेमाल किया जाता है. <Distributed> एलिमेंट को सेट किया जा सकता है, जैसा कि नीचे दिए गए कोड स्निपेट में दिखाया गया है:

<!-- /antipatterns/examples/1-7.xml -->
<Quota name="CheckTrafficQuota">
  <Interval>1</Interval>
  <TimeUnit>hour</TimeUnit>
  <Distributed>true</Distributed>
  <Allow count="100"/>
</Quota>