কোটা নীতি

আপনি Apigee Edge-এর ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন
.info- তে যান।

কী

একটি এপিআই প্রক্সি নির্দিষ্ট সময়কালে (যেমন মিনিট, ঘন্টা, দিন, সপ্তাহ বা মাস) কতগুলো অনুরোধ বার্তা গ্রহণ করবে, তা নির্ধারণ করতে কোটা নীতি ব্যবহার করুন। আপনি এপিআই প্রক্সি অ্যাক্সেসকারী সমস্ত অ্যাপের জন্য কোটা একই রাখতে পারেন, অথবা নিম্নলিখিত বিষয়গুলোর উপর ভিত্তি করে কোটা নির্ধারণ করতে পারেন:

  • যে পণ্যটিতে এপিআই প্রক্সি রয়েছে
  • এপিআই-এর জন্য অনুরোধকারী অ্যাপটি
  • অ্যাপ ডেভেলপার
  • আরও অনেক মানদণ্ড

সামগ্রিক ট্র্যাফিক স্পাইক থেকে সুরক্ষা পেতে কোটা ব্যবহার করবেন না। এর জন্য স্পাইক অ্যারেস্ট পলিসি ব্যবহার করুন। স্পাইক অ্যারেস্ট পলিসি দেখুন।

ভিডিও

এই ভিডিওগুলিতে কোটা নীতির মাধ্যমে কোটা ব্যবস্থাপনার সাথে পরিচয় করিয়ে দেওয়া হয়েছে:

ভূমিকা (নিউ এজ)

ভূমিকা (ক্লাসিক এজ)

গতিশীল কোটা

বিতরণ এবং সিঙ্ক্রোনাস

বার্তার ওজন

ক্যালেন্ডার

ঘূর্ণায়মান জানালা

ফ্লেক্সি

শর্তসাপেক্ষ কোটা

প্রবাহ পরিবর্তনশীল

ত্রুটি পরিচালনা

নমুনা

এই নীতি কোডের নমুনাগুলো নিম্নোক্ত উপায়ে কোটার মেয়াদ শুরু ও শেষ করার পদ্ধতি ব্যাখ্যা করে:

আরও গতিশীল কোটা

<Quota name="CheckQuota">
  <Interval ref="verifyapikey.verify-api-key.apiproduct.developer.quota.interval">1</Interval>
  <TimeUnit ref="verifyapikey.verify-api-key.apiproduct.developer.quota.timeunit">hour</TimeUnit>
  <Allow count="200" countRef="verifyapikey.verify-api-key.apiproduct.developer.quota.limit"/>
</Quota>

ডাইনামিক কোটা আপনাকে একটি একক কোটা পলিসি কনফিগার করার সুযোগ দেয়, যা পলিসিতে পাঠানো তথ্যের উপর ভিত্তি করে বিভিন্ন কোটা সেটিংস প্রয়োগ করে। এই প্রসঙ্গে কোটা সেটিংসের আরেকটি পরিভাষা হলো "সার্ভিস প্ল্যান"। ডাইনামিক কোটা অ্যাপের "সার্ভিস প্ল্যান" যাচাই করে এবং তারপর সেই সেটিংসগুলো প্রয়োগ করে।

দ্রষ্টব্য : যদি আপনি কোনো এলিমেন্টের জন্য ভ্যালু এবং রেফারেন্স উভয়ই উল্লেখ করেন, তাহলে রেফারেন্সটি অগ্রাধিকার পাবে। যদি রানটাইমে রেফারেন্সটি রিজলভ না হয়, তাহলে ভ্যালুটি ব্যবহৃত হবে।

উদাহরণস্বরূপ, যখন আপনি একটি এপিআই প্রোডাক্ট তৈরি করেন, তখন আপনি ঐচ্ছিকভাবে অনুমোদিত কোটা সীমা, সময় একক এবং ব্যবধান নির্ধারণ করতে পারেন। তবে, এপিআই প্রোডাক্টে এই মানগুলি নির্ধারণ করা হলে তা এপিআই প্রক্সিতে সেগুলির ব্যবহার বাধ্যতামূলক করে না। আপনাকে অবশ্যই এপিআই প্রক্সিতে একটি কোটা পলিসি যোগ করতে হবে যা এই মানগুলি পড়ে। আরও জানতে ‘এপিআই প্রোডাক্ট তৈরি করুন’ দেখুন।

উপরের উদাহরণে, কোটা পলিসি ধারণকারী এপিআই প্রক্সিটি একটি অনুরোধে পাঠানো এপিআই কী যাচাই করার জন্য verify-api-key নামের একটি VerifyAPIKey পলিসি ব্যবহার করে। এরপর কোটা পলিসিটি এপিআই প্রোডাক্টে সেট করা কোটার মানগুলো পড়ার জন্য VerifyAPIKey পলিসি থেকে ফ্লো ভ্যারিয়েবলগুলো অ্যাক্সেস করে। VerifyAPIKey ফ্লো ভ্যারিয়েবল সম্পর্কে আরও জানতে, Verify API Key policy দেখুন।

আরেকটি উপায় হলো, স্বতন্ত্র ডেভেলপার বা অ্যাপে কাস্টম অ্যাট্রিবিউট সেট করা এবং তারপর কোটা পলিসিতে সেই মানগুলো ব্যবহার করা। উদাহরণস্বরূপ, আপনি প্রতি ডেভেলপারের জন্য আলাদা কোটা মান নির্ধারণ করতে চান। এক্ষেত্রে, আপনি ডেভেলপারের উপর লিমিট, টাইম ইউনিট এবং ইন্টারভ্যাল সম্বলিত কাস্টম অ্যাট্রিবিউট সেট করবেন। এরপর, নিচে দেখানো পদ্ধতি অনুযায়ী আপনি কোটা পলিসিতে এই মানগুলো উল্লেখ করবেন:

<Quota name="DeveloperQuota">
  <Identifier ref="verifyapikey.verify-api-key.client_id"/>
  <Interval ref="verifyapikey.verify-api-key.developer.timeInterval"/>
  <TimeUnit ref="verifyapikey.verify-api-key.developer.timeUnit"/>
  <Allow countRef="verifyapikey.verify-api-key.developer.limit"/>
</Quota>

এই উদাহরণটিতেও ডেভেলপারের উপর সেট করা কাস্টম অ্যাট্রিবিউটগুলোকে রেফারেন্স করার জন্য VerifyAPIKey ফ্লো ভেরিয়েবল ব্যবহার করা হয়েছে।

কোটা নীতির প্যারামিটার নির্ধারণ করতে আপনি যেকোনো ভেরিয়েবল ব্যবহার করতে পারেন। এই ভেরিয়েবলগুলো নিম্নলিখিত উৎস থেকে আসতে পারে:

  • প্রবাহ পরিবর্তনশীল
  • এপিআই পণ্য, অ্যাপ বা ডেভেলপারের বৈশিষ্ট্যসমূহ
  • একটি কী ভ্যালু ম্যাপ (KVM)
  • হেডার, কোয়েরি প্যারামিটার, ফর্ম প্যারামিটার, ইত্যাদি

প্রতিটি এপিআই প্রক্সির জন্য, আপনি এমন একটি কোটা পলিসি যোগ করতে পারেন যা হয় অন্য সব প্রক্সির সমস্ত কোটা পলিসির মতো একই ভেরিয়েবলকে রেফারেন্স করে, অথবা কোটা পলিসিটি সেই পলিসি এবং প্রক্সির জন্য স্বতন্ত্র ভেরিয়েবলকে রেফারেন্স করতে পারে।

শুরুর সময়

<Quota name="QuotaPolicy" type="calendar">
  <StartTime>2017-02-18 10:30:00</StartTime>
  <Interval>5</Interval>
  <TimeUnit>hour</TimeUnit>
  <Allow count="99"/>
</Quota>

calendar type কোটার জন্য, আপনাকে অবশ্যই একটি সুস্পষ্ট <StartTime> ভ্যালু নির্ধারণ করতে হবে। এই সময়ের মানটি হলো জিএমটি (GMT) সময়, স্থানীয় সময় নয়। আপনি যদি calendar টাইপের কোনো পলিসির জন্য <StartTime> ভ্যালু প্রদান না করেন, তাহলে Edge একটি এরর দেখাবে।

প্রতিটি অ্যাপের কোটা কাউন্টার <StartTime> , <Interval> এবং <TimeUnit> ভ্যালুগুলোর উপর ভিত্তি করে রিফ্রেশ করা হয়। এই উদাহরণে, কোটা গণনা শুরু হয় ১৮ই ফেব্রুয়ারি, ২০১৭ তারিখে সকাল ১০:৩০ জিএমটি-তে এবং প্রতি ৫ ঘণ্টা পর পর রিফ্রেশ হয়। সুতরাং, পরবর্তী রিফ্রেশ হবে ১৮ই ফেব্রুয়ারি, ২০১৭ তারিখে বিকাল ৩:৩০ জিএমটি-তে।

অ্যাক্সেস কাউন্টার

<Quota name="QuotaPolicy">
  <Interval>5</Interval>
  <TimeUnit>hour</TimeUnit>
  <Allow count="99"/>
</Quota>

একটি এপিআই প্রক্সির কোটা পলিসি দ্বারা সেট করা ফ্লো ভেরিয়েবলগুলিতে অ্যাক্সেস থাকে। আপনি শর্তসাপেক্ষ প্রসেসিং সম্পাদন করতে, পলিসিটি কোটা সীমার কাছাকাছি এলে তা পর্যবেক্ষণ করতে, কোনো অ্যাপে বর্তমান কোটা কাউন্টার ফেরত পাঠাতে বা অন্যান্য কারণে এপিআই প্রক্সিতে এই ফ্লো ভেরিয়েবলগুলি অ্যাক্সেস করতে পারেন।

যেহেতু পলিসির ফ্লো ভেরিয়েবল অ্যাক্সেস করা পলিসির name অ্যাট্রিবিউটের উপর ভিত্তি করে হয়, তাই উপরে উল্লিখিত QuotaPolicy নামের পলিসিটির ফ্লো ভেরিয়েবলগুলো আপনি নিম্নলিখিত ফর্মে অ্যাক্সেস করবেন:

  • ratelimit.QuotaPolicy.allowed.count : অনুমোদিত সংখ্যা।
  • ratelimit.QuotaPolicy.used.count : বর্তমান কাউন্টারের মান।
  • ratelimit.QuotaPolicy.expiry.time : UTC সময় যখন কাউন্টারটি রিসেট হয়।

আরও অনেক ফ্লো ভেরিয়েবল আছে যেগুলো আপনি ব্যবহার করতে পারবেন, যেমনটা নিচে বর্ণনা করা হলো।

উদাহরণস্বরূপ, কোটা ফ্লো ভেরিয়েবলের মানগুলোকে রেসপন্স হেডার হিসেবে ফেরত দিতে আপনি নিম্নলিখিত AssignMessage পলিসিটি ব্যবহার করতে পারেন:

<AssignMessage async="false" continueOnError="false" enabled="true" name="ReturnQuotaVars">
    <AssignTo createNew="false" type="response"/>
    <Set>
        <Headers>
            <Header name="QuotaLimit">{ratelimit.QuotaPolicy.allowed.count}</Header>
            <Header name="QuotaUsed">{ratelimit.QuotaPolicy.used.count}</Header>
            <Header name="QuotaResetUTC">{ratelimit.QuotaPolicy.expiry.time}</Header>
        </Headers>
    </Set>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
</AssignMessage>

প্রথম অনুরোধ

<Quota name="MyQuota">
  <Interval>1</Interval>
  <TimeUnit>hour</TimeUnit>
  <Allow count="10000"/>
</Quota>

প্রতি ঘণ্টায় ১০,০০০ কলের কোটা কার্যকর করতে এই নমুনা কোডটি ব্যবহার করুন। এই পলিসিটি প্রতি ঘণ্টার শুরুতে কোটা কাউন্টারটি রিসেট করে। যদি ঘণ্টা শেষ হওয়ার আগেই কাউন্টারটি ১০,০০০ কলের কোটায় পৌঁছে যায়, তবে ১০,০০০-এর অতিরিক্ত কলগুলো বাতিল করে দেওয়া হয়।

উদাহরণস্বরূপ, যদি কাউন্টারটি 2017-07-08 07:00:00 এ শুরু হয়, তাহলে এটি 2017-07-08 08:00:00 এ (শুরুর সময় থেকে ১ ঘন্টা পর) ০-তে রিসেট হবে। যদি প্রথম বার্তাটি 2017-07-08 07:35:28 এ পাওয়া যায় এবং 2017-07-08 08:00:00 এর আগে বার্তার সংখ্যা ১০,০০০ এ পৌঁছে যায়, তাহলে ঘন্টার শুরুতে গণনাটি রিসেট না হওয়া পর্যন্ত সেই সংখ্যার পরের কলগুলি প্রত্যাখ্যান করা হবে।

কাউন্টার রিসেট হওয়ার সময় <Interval> এবং <TimeUnit> এর সমন্বয়ের উপর নির্ভর করে। উদাহরণস্বরূপ, যদি আপনি <Interval> কে ১২ এবং <TimeUnit> কে ঘণ্টা হিসেবে সেট করেন, তাহলে কাউন্টারটি প্রতি বারো ঘণ্টা পর পর রিসেট হবে। আপনি <TimeUnit> কে মিনিট, ঘণ্টা, দিন, সপ্তাহ বা মাস হিসেবে সেট করতে পারেন।

আপনি আপনার এপিআই প্রক্সিতে একাধিক জায়গায় এই পলিসিটি উল্লেখ করতে পারেন। উদাহরণস্বরূপ, আপনি এটিকে প্রক্সি প্রিফ্লো-তে রাখতে পারেন যাতে এটি প্রতিটি অনুরোধে কার্যকর হয়। অথবা, আপনি এটিকে এপিআই প্রক্সির একাধিক ফ্লো-তে রাখতে পারেন। আপনি যদি প্রক্সিতে একাধিক জায়গায় এই পলিসিটি ব্যবহার করেন, তবে এটি একটি একক কাউন্টার বজায় রাখে যা পলিসিটির সমস্ত ইনস্ট্যান্স দ্বারা আপডেট করা হয়।

বিকল্পভাবে, আপনি আপনার এপিআই প্রক্সিতে একাধিক কোটা পলিসি নির্ধারণ করতে পারেন। প্রতিটি কোটা পলিসি তার name অ্যাট্রিবিউটের উপর ভিত্তি করে নিজস্ব কাউন্টার বজায় রাখে।

শনাক্তকারী সেট করুন

<Quota name="QuotaPolicy" type="calendar">
  <Identifier ref="request.header.clientId"/>
  <StartTime>2017-02-18 10:00:00</StartTime>
  <Interval>5</Interval>
  <TimeUnit>hour</TimeUnit>
  <Allow count="99"/>
</Quota>

ডিফল্টরূপে, একটি কোটা পলিসি অনুরোধের উৎস নির্বিশেষে এপিআই প্রক্সির জন্য একটি একক কাউন্টার নির্ধারণ করে। বিকল্পভাবে, আপনি <Identifier> অ্যাট্রিবিউটের মানের উপর ভিত্তি করে পৃথক কাউন্টার বজায় রাখতে একটি কোটা পলিসির সাথে <Identifier> অ্যাট্রিবিউট ব্যবহার করতে পারেন।

উদাহরণস্বরূপ, প্রতিটি ক্লায়েন্ট আইডির জন্য আলাদা কাউন্টার নির্ধারণ করতে <Identifier> ট্যাগটি ব্যবহার করুন। আপনার প্রক্সিতে কোনো অনুরোধ পাঠানো হলে, ক্লায়েন্ট অ্যাপটি তখন clientID সম্বলিত একটি হেডার প্রেরণ করে, যেমনটি উপরের উদাহরণে দেখানো হয়েছে।

আপনি <Identifier> অ্যাট্রিবিউটে যেকোনো ফ্লো ভেরিয়েবল নির্দিষ্ট করতে পারেন। উদাহরণস্বরূপ, আপনি নির্দিষ্ট করতে পারেন যে id নামের একটি কোয়েরি প্যারাম অনন্য আইডেন্টিফায়ারটি ধারণ করে:

<Identifier ref="request.queryparam.id"/>

আপনি যদি এপিআই কী যাচাই করার জন্য VerifyAPIKey পলিসি, অথবা OAuth টোকেন সহ OAuthV2 পলিসি ব্যবহার করেন, তাহলে আপনি একই কোটা পলিসির জন্য স্বতন্ত্র কাউন্টার নির্ধারণ করতে এপিআই কী বা টোকেনের তথ্য ব্যবহার করতে পারেন। উদাহরণস্বরূপ, নিম্নলিখিত <Identifier> ট্যাগটি verify-api-key নামের একটি VerifyAPIKey পলিসির client_id ফ্লো ভেরিয়েবল ব্যবহার করে:

<Identifier ref="verifyapikey.verify-api-key.client_id"></Identifier>

এখন প্রতিটি অনন্য client_id মান কোটা নীতিতে তার নিজস্ব কাউন্টার নির্ধারণ করে।

শ্রেণী

<Quota name="QuotaPolicy">
  <Interval>1</Interval>
  <TimeUnit>day</TimeUnit>
  <Allow>
    <Class ref="request.header.developer_segment">
      <Allow class="platinum" count="10000"/>
      <Allow class="silver" count="1000" />
    </Class>
  </Allow>
</Quota>

আপনি ক্লাস-ভিত্তিক কোটা গণনা ব্যবহার করে গতিশীলভাবে কোটার সীমা নির্ধারণ করতে পারেন। এই উদাহরণে, প্রতিটি অনুরোধের সাথে পাঠানো developer_segment হেডারের মান দ্বারা কোটার সীমা নির্ধারিত হয়। সেই ভেরিয়েবলটির মান platinum বা silver হতে পারে। যদি হেডারটির মান অবৈধ হয়, তাহলে পলিসিটি একটি কোটা লঙ্ঘনের ত্রুটি ফেরত দেয়।


কোটা নীতি সম্পর্কে

কোটা হলো অনুরোধ বার্তার একটি বরাদ্দ, যা একটি এপিআই প্রক্সি একটি নির্দিষ্ট সময়কালে (যেমন মিনিট, ঘন্টা, দিন, সপ্তাহ বা মাস) পরিচালনা করতে পারে। এই পলিসি কাউন্টার বজায় রাখে যা এপিআই প্রক্সি দ্বারা প্রাপ্ত অনুরোধের সংখ্যা গণনা করে। এই ক্ষমতা এপিআই প্রোভাইডারদের একটি নির্দিষ্ট সময়সীমার মধ্যে অ্যাপ দ্বারা করা এপিআই কলের সংখ্যার উপর সীমা আরোপ করতে সক্ষম করে। কোটা পলিসি ব্যবহার করে আপনি, উদাহরণস্বরূপ, অ্যাপগুলিকে প্রতি মিনিটে ১টি অনুরোধ বা প্রতি মাসে ১০,০০০টি অনুরোধে সীমাবদ্ধ করতে পারেন।

উদাহরণস্বরূপ, যদি প্রতি মাসে ১০,০০০ মেসেজের একটি কোটা নির্ধারণ করা হয়, তবে ১০,০০০তম মেসেজের পর থেকে রেট-লিমিটিং শুরু হবে। ঐ নির্দিষ্ট সময়ের প্রথম দিনে বা শেষ দিনে ১০,০০০ মেসেজ গণনা করা হয়েছে কিনা, তা বিবেচ্য নয়; নির্দিষ্ট সময়সীমার শেষে কোটা কাউন্টারটি স্বয়ংক্রিয়ভাবে রিসেট না হওয়া পর্যন্ত, অথবা 'রিসেট কোটা পলিসি' ব্যবহার করে কোটা স্পষ্টভাবে রিসেট না করা পর্যন্ত কোনো অতিরিক্ত অনুরোধের অনুমতি দেওয়া হবে না।

কোটার একটি ভিন্ন রূপ, স্পাইকঅ্যারেস্ট, ব্যবহারের আকস্মিক বৃদ্ধি, ত্রুটিপূর্ণ ক্লায়েন্ট বা ক্ষতিকারক আক্রমণের কারণে সৃষ্ট ট্র্যাফিক স্পাইক (বা আকস্মিক বৃদ্ধি) প্রতিরোধ করে। স্পাইকঅ্যারেস্ট সম্পর্কে আরও তথ্যের জন্য, স্পাইকঅ্যারেস্ট নীতি দেখুন।

কোটা প্রতিটি এপিআই প্রক্সির জন্য আলাদাভাবে প্রযোজ্য এবং এটি প্রক্সিগুলোর মধ্যে বন্টন করা হয় না। উদাহরণস্বরূপ, যদি আপনার একটি এপিআই প্রোডাক্টে তিনটি এপিআই প্রক্সি থাকে, তবে একটিমাত্র কোটা তিনটির মধ্যে ভাগ করা হয় না, এমনকি যদি তিনটিই একই কোটা পলিসি কনফিগারেশন ব্যবহার করে থাকে।

কোটা নীতির প্রকারভেদ

কোটা পলিসি বিভিন্ন ধরনের পলিসি সমর্থন করে: ডিফল্ট, calendar , flexi এবং rollingwindow । প্রতিটি ধরন নির্ধারণ করে দেয় কখন কোটা কাউন্টার শুরু হবে এবং কখন তা রিসেট হবে, যা নিচের সারণিতে দেখানো হয়েছে:

সময় একক ডিফল্ট (বা নাল) রিসেট ক্যালেন্ডার রিসেট ফ্লেক্সি রিসেট
মিনিট পরবর্তী মিনিটের শুরু <StartTime> এক মিনিট পর প্রথম অনুরোধের এক মিনিট পর
ঘন্টা পরবর্তী ঘন্টার শীর্ষে <StartTime> এক ঘন্টা পরে প্রথম অনুরোধের এক ঘন্টা পর
দিন বর্তমান দিনের জিএমটি মধ্যরাত <StartTime> এর ২৪ ঘন্টা পরে প্রথম অনুরোধের ২৪ ঘন্টা পর
সপ্তাহ সপ্তাহের শেষে রবিবার মধ্যরাত জিএমটি <StartTime> এক সপ্তাহ পরে প্রথম অনুরোধের এক সপ্তাহ পর
মাস মাসের শেষ দিনের মধ্যরাত জিএমটি <StartTime> এক মাস (২৮ দিন) পরে প্রথম অনুরোধের এক মাস (২৮ দিন) পরে

type="calendar" এর জন্য, আপনাকে অবশ্যই <StartTime> এর মান নির্দিষ্ট করতে হবে।

টেবিলে rollingwindow টাইপের জন্য মান তালিকাভুক্ত করা নেই। রোলিং উইন্ডো কোটা একটি কোটা "উইন্ডো"-এর আকার নির্ধারণের মাধ্যমে কাজ করে, যেমন এক ঘন্টা বা এক দিনের উইন্ডো। যখন একটি নতুন অনুরোধ আসে, তখন পলিসি নির্ধারণ করে যে বিগত "উইন্ডো" সময়ের মধ্যে কোটা অতিক্রম করা হয়েছে কি না।

উদাহরণস্বরূপ, আপনি দুই ঘণ্টার একটি সময়সীমা নির্ধারণ করেছেন যা ১০০০টি অনুরোধের অনুমতি দেয়। বিকেল ৪:৪৫ মিনিটে একটি নতুন অনুরোধ আসে। পলিসিটি বিগত দুই ঘণ্টার জন্য কোটার সংখ্যা গণনা করে, অর্থাৎ দুপুর ২:৪৫ মিনিটের পর থেকে অনুরোধের সংখ্যা। যদি সেই দুই ঘণ্টার মধ্যে কোটার সীমা অতিক্রম না করা হয়, তাহলে অনুরোধটি অনুমোদিত হয়।

এক মিনিট পর, বিকেল ৪:৪৬ মিনিটে, আরেকটি অনুরোধ আসে। এখন সীমা অতিক্রম করা হয়েছে কিনা তা নির্ধারণ করার জন্য নীতিমালাটি দুপুর ২:৪৬ মিনিট থেকে কোটার সংখ্যা গণনা করে।

rollingwindow টাইপের ক্ষেত্রে, কাউন্টারটি কখনও রিসেট হয় না, বরং প্রতিটি অনুরোধে এটি পুনরায় গণনা করা হয়।

কোটা কাউন্টার বোঝা

ডিফল্টরূপে, একটি কোটা পলিসি একটিমাত্র কাউন্টার বজায় রাখে, আপনি একটি এপিআই প্রক্সিতে এটিকে যতবারই উল্লেখ করুন না কেন। কোটা কাউন্টারের নামটি পলিসির name অ্যাট্রিবিউটের উপর ভিত্তি করে নির্ধারিত হয়।

উদাহরণস্বরূপ, আপনি MyQuotaPolicy নামে ৫টি রিকোয়েস্টের সীমা সহ একটি কোটা পলিসি তৈরি করেন এবং এটিকে এপিআই প্রক্সির একাধিক ফ্লোতে (ফ্লো এ, বি, এবং সি) স্থাপন করেন। যদিও এটি একাধিক ফ্লোতে ব্যবহৃত হয়, এটি একটি একক কাউন্টার বজায় রাখে যা পলিসিটির সমস্ত ইনস্ট্যান্স দ্বারা আপডেট করা হয়:

  • ফ্লো A সম্পাদিত হয় -> MyQuotaPolicy কার্যকর হয় এবং এর কাউন্টার = 1
  • ফ্লো B কার্যকর করা হয়েছে -> MyQuotaPolicy কার্যকর করা হয়েছে এবং এর কাউন্টার = 2
  • ফ্লো A কার্যকর করা হয়েছে -> MyQuotaPolicy কার্যকর করা হয়েছে এবং এর কাউন্টার = 3
  • ফ্লো C কার্যকর করা হয়েছে -> MyQuotaPolicy কার্যকর করা হয়েছে এবং এর কাউন্টার = 4
  • ফ্লো A সম্পাদিত হয়েছে -> MyQuotaPolicy কার্যকর হয়েছে এবং এর কাউন্টার = 5

তিনটি ফ্লো-এর যেকোনো একটিতে পরবর্তী অনুরোধটি প্রত্যাখ্যান করা হয়েছে, কারণ কোটা কাউন্টার তার সীমায় পৌঁছে গেছে।

একটি এপিআই প্রক্সি ফ্লো-তে একাধিক স্থানে একই কোটা পলিসি ব্যবহার করা, যা অনিচ্ছাকৃতভাবে আপনার প্রত্যাশার চেয়ে দ্রুত কোটা শেষ করে দিতে পারে, সেটি 'দ্য বুক অফ এপিজি এজ অ্যান্টিপ্যাটার্নস'- এ বর্ণিত একটি অ্যান্টি-প্যাটার্ন।

বিকল্পভাবে, আপনি আপনার এপিআই প্রক্সিতে একাধিক কোটা পলিসি নির্ধারণ করতে পারেন এবং প্রতিটি ফ্লোতে ভিন্ন পলিসি ব্যবহার করতে পারেন। প্রতিটি কোটা পলিসি তার name অ্যাট্রিবিউটের উপর ভিত্তি করে নিজস্ব কাউন্টার বজায় রাখে।

অথবা, একটিমাত্র পলিসিতে একাধিক ও স্বতন্ত্র কাউন্টার নির্ধারণ করতে কোটা পলিসিতে <Class> বা <Identifier> এলিমেন্ট ব্যবহার করুন। এই এলিমেন্টগুলো ব্যবহার করে, একটিমাত্র পলিসি অনুরোধকারী অ্যাপ, অনুরোধকারী অ্যাপ ডেভেলপার, একটি ক্লায়েন্ট আইডি বা অন্য কোনো ক্লায়েন্ট আইডেন্টিফায়ার এবং আরও অনেক কিছুর উপর ভিত্তি করে ভিন্ন ভিন্ন কাউন্টার বজায় রাখতে পারে। <Class> বা <Identifier> এলিমেন্ট ব্যবহারের বিষয়ে আরও তথ্যের জন্য উপরের উদাহরণগুলো দেখুন।

সময় সংকেত

সকল কোটার সময় কোঅর্ডিনেটেড ইউনিভার্সাল টাইম (UTC) সময় অঞ্চল অনুযায়ী নির্ধারণ করা হয়।

কোটা সময়ের সংকেত আন্তর্জাতিক মান ISO 8601- এ সংজ্ঞায়িত আন্তর্জাতিক মান তারিখ সংকেত পদ্ধতি অনুসরণ করে।

তারিখকে বছর, মাস এবং দিন দিয়ে YYYY-MM-DD বিন্যাসে সংজ্ঞায়িত করা হয়। উদাহরণস্বরূপ, 2015-02-04 বলতে 4 ফেব্রুয়ারী, 2015 বোঝায়।

দিনের সময়কে ঘন্টা, মিনিট এবং সেকেন্ড হিসাবে নিম্নলিখিত বিন্যাসে সংজ্ঞায়িত করা হয়: hours:minutes:seconds । উদাহরণস্বরূপ, 23:59:59 মধ্যরাতের এক সেকেন্ড আগের সময়কে বোঝায়।

উল্লেখ্য যে, একটি তারিখের সাথে সম্পর্কিত দুটি মধ্যরাত্রিকে আলাদা করার জন্য 00:00:00 এবং 24:00:00 , এই দুটি চিহ্ন ব্যবহার করা হয়। সুতরাং, 2015-02-04 24:00:00 এবং 2015-02-05 00:00:00 একই তারিখ ও সময়। সাধারণত শেষের চিহ্নটিই বেশি পছন্দ করা হয়।

এপিআই প্রোডাক্ট কনফিগারেশন থেকে কোটা সেটিংস পাওয়া

আপনি এপিআই প্রোডাক্ট কনফিগারেশনে কোটার সীমা নির্ধারণ করতে পারেন। এই সীমাগুলো স্বয়ংক্রিয়ভাবে কোটা কার্যকর করে না। এর পরিবর্তে, আপনি একটি কোটা পলিসিতে প্রোডাক্টের কোটা সেটিংস উল্লেখ করতে পারেন। কোটা পলিসিতে উল্লেখ করার জন্য প্রোডাক্টে কোটা নির্ধারণ করার কিছু সুবিধা নিচে দেওয়া হলো:

  • এপিআই প্রোডাক্টের সমস্ত এপিআই প্রক্সিতে কোটা পলিসি একটি অভিন্ন সেটিং ব্যবহার করতে পারে।
  • আপনি একটি এপিআই প্রোডাক্টের কোটা সেটিং-এ রানটাইম পরিবর্তন করতে পারেন, এবং যে কোটা পলিসিগুলো সেই মানটিকে উল্লেখ করে, সেগুলোর কোটার মান স্বয়ংক্রিয়ভাবে আপডেট হয়ে যায়।

একটি এপিআই প্রোডাক্ট থেকে কোটা সেটিংস ব্যবহার করার বিষয়ে আরও তথ্যের জন্য, উপরের 'ডাইনামিক কোটা' উদাহরণটি দেখুন

কোটা সীমা সহ এপিআই পণ্য কনফিগার করার তথ্যের জন্য, এপিআই পণ্য তৈরি করুন দেখুন।

উপাদান রেফারেন্স

এই পলিসিতে আপনি নিম্নলিখিত উপাদান এবং অ্যাট্রিবিউটগুলো কনফিগার করতে পারেন। মনে রাখবেন যে কিছু উপাদানের সংমিশ্রণ পরস্পর বর্জনীয় বা আবশ্যক নয়। নির্দিষ্ট ব্যবহারের জন্য নমুনাগুলো দেখুন। যখন অনুরোধে অ্যাপের এপিআই কী যাচাই করার জন্য "VerifyAPIKey" নামক একটি ভেরিফাই এপিআই কী পলিসি ব্যবহার করা হয়, তখন নিচের verifyapikey.VerifyAPIKey.apiproduct.* ভেরিয়েবলগুলো ডিফল্টরূপে উপলব্ধ থাকে। ভেরিয়েবলের মানগুলো সেই এপিআই প্রোডাক্টের কোটা সেটিংস থেকে আসে যার সাথে কী-টি যুক্ত, যেমনটি "এপিআই প্রোডাক্ট কনফিগারেশন থেকে কোটা সেটিংস পাওয়া" অংশে বর্ণনা করা হয়েছে।

<Quota async="false" continueOnError="false" enabled="true" name="Quota-3" type="calendar">
   <DisplayName>Quota 3</DisplayName>
   <Allow count="2000" countRef="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.limit"/>
   <Allow>
      <Class ref="request.queryparam.time_variable">
        <Allow class="peak_time" count="5000"/>
        <Allow class="off_peak_time" count="1000"/>
      </Class>
   </Allow>
   <Interval ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.interval">1</Interval>
   <TimeUnit ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.timeunit">month</TimeUnit>
   <StartTime>2017-7-16 12:00:00</StartTime>
   <Distributed>false</Distributed>
   <Synchronous>false</Synchronous>
   <AsynchronousConfiguration>
      <SyncIntervalInSeconds>20</SyncIntervalInSeconds>
      <SyncMessageCount>5</SyncMessageCount>
   </AsynchronousConfiguration>
   <Identifier/>
   <MessageWeight/>
</Quota>

<কোটা> বৈশিষ্ট্য

<Quota async="false" continueOnError="false" enabled="true" name="Quota-3" type="calendar">

নিম্নলিখিত বৈশিষ্ট্যগুলো এই পলিসির জন্য নির্দিষ্ট।

বৈশিষ্ট্য বর্ণনা ডিফল্ট উপস্থিতি
প্রকার

কোটা কাউন্টার কখন এবং কীভাবে কোটার ব্যবহার পরীক্ষা করবে তা নির্ধারণ করতে এটি ব্যবহার করুন। আরও তথ্যের জন্য কোটা নীতির প্রকারভেদ দেখুন।

আপনি type ভ্যালু উল্লেখ না করলে, কাউন্টারটি মিনিট/ঘণ্টা/দিন/সপ্তাহ/মাসের শুরু থেকে গণনা শুরু হবে।

বৈধ মানগুলির মধ্যে রয়েছে:

  • calendar : একটি নির্দিষ্ট শুরুর সময়ের উপর ভিত্তি করে কোটা নির্ধারণ করুন। আপনার সেট করা <StartTime> , <Interval> , এবং <TimeUnit> মানের উপর ভিত্তি করে প্রতিটি অ্যাপের কোটা কাউন্টার রিফ্রেশ করা হয়।
  • rollingwindow : এমন একটি কোটা কনফিগার করুন যা কোটার ব্যবহার নির্ধারণ করতে একটি "রোলিং উইন্ডো" ব্যবহার করে। rollingwindow এর মাধ্যমে, আপনি <Interval> এবং <TimeUnit> এলিমেন্ট ব্যবহার করে উইন্ডোটির আকার নির্ধারণ করতে পারেন; উদাহরণস্বরূপ, ১ দিন। যখন কোনো অনুরোধ আসে, Edge অনুরোধটির সঠিক সময় (ধরা যাক বিকাল ৫:০১) দেখে, সেই সময় থেকে আগের দিনের (১ দিন) বিকাল ৫:০১ পর্যন্ত আসা অনুরোধের সংখ্যা গণনা করে এবং সেই উইন্ডোর মধ্যে কোটা অতিক্রম করা হয়েছে কি না তা নির্ধারণ করে।
  • flexi : এমন একটি কোটা কনফিগার করুন, যার ফলে কোনো অ্যাপ থেকে প্রথম অনুরোধ বার্তা পাওয়ার সাথে সাথে কাউন্টারটি চালু হবে এবং <Interval>,<TimeUnit> মানের উপর ভিত্তি করে রিসেট হবে।
ক্যালেন্ডার ঐচ্ছিক

নিম্নলিখিত সারণী সমস্ত নীতির মূল উপাদানগুলির জন্য সাধারণ বৈশিষ্ট্যগুলি বর্ণনা করে:

বৈশিষ্ট্য বর্ণনা ডিফল্ট উপস্থিতি
name

নীতির অভ্যন্তরীণ নাম। name বৈশিষ্ট্যের মানটিতে অক্ষর, সংখ্যা, স্পেস, হাইফেন, আন্ডারস্কোর এবং পিরিয়ড থাকতে পারে। এই মান 255 অক্ষরের বেশি হতে পারে না।

ঐচ্ছিকভাবে, ম্যানেজমেন্ট UI প্রক্সি এডিটরে নীতিটিকে একটি ভিন্ন, প্রাকৃতিক-ভাষা নামের সাথে লেবেল করতে <DisplayName> উপাদানটি ব্যবহার করুন।

N/A প্রয়োজন
continueOnError

একটি নীতি ব্যর্থ হলে একটি ত্রুটি ফেরত দিতে false সেট করুন৷ এটি বেশিরভাগ নীতির জন্য প্রত্যাশিত আচরণ।

একটি নীতি ব্যর্থ হওয়ার পরেও ফ্লো এক্সিকিউশন চালিয়ে যেতে true সেট করুন৷

মিথ্যা ঐচ্ছিক
enabled

নীতি প্রয়োগ করতে true সেট করুন৷

নীতি বন্ধ করতে false সেট করুন। নীতিটি প্রবাহের সাথে সংযুক্ত থাকলেও তা কার্যকর করা হবে না।

সত্য ঐচ্ছিক
async

এই বৈশিষ্ট্যটি অবমূল্যায়ন করা হয়েছে৷

মিথ্যা অবচয়

<DisplayName> উপাদান

ম্যানেজমেন্ট UI প্রক্সি এডিটরে নীতিটিকে একটি ভিন্ন, প্রাকৃতিক-ভাষা নামের সাথে লেবেল করতে name বৈশিষ্ট্য ছাড়াও ব্যবহার করুন।

<DisplayName>Policy Display Name</DisplayName>
ডিফল্ট

N/A

আপনি এই উপাদানটি বাদ দিলে, নীতির name বৈশিষ্ট্যের মান ব্যবহার করা হবে।

উপস্থিতি ঐচ্ছিক
টাইপ স্ট্রিং

<Allow> উপাদান

কোটার জন্য গণনার সীমা নির্দিষ্ট করে। যদি পলিসির কাউন্টারটি এই নির্ধারিত সীমায় পৌঁছে যায়, তবে কাউন্টারটি রিসেট না হওয়া পর্যন্ত পরবর্তী কলগুলো প্রত্যাখ্যান করা হয়।

নিচে <Allow> এলিমেন্টটি সেট করার তিনটি উপায় দেখানো হলো:

<Allow count="2000"/>
<Allow countRef="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.limit"/>
<Allow count="2000" countRef="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.limit"/>

যদি আপনি count এবং countRef উভয়ই উল্লেখ করেন, তাহলে countRef অগ্রাধিকার পাবে। যদি রানটাইমে countRef নির্ধারিত না হয়, তাহলে count এর মান ব্যবহৃত হবে।

ডিফল্ট: প্রযোজ্য নয়
উপস্থিতি: ঐচ্ছিক
প্রকার: পূর্ণসংখ্যা

বৈশিষ্ট্য

বৈশিষ্ট্য বর্ণনা ডিফল্ট উপস্থিতি
গণনা

কোটার জন্য বার্তার সংখ্যা নির্দিষ্ট করতে এটি ব্যবহার করুন।

উদাহরণস্বরূপ, count অ্যাট্রিবিউটের মান 100, Interval 1 এবং TimeUnit month হলে প্রতি মাসে 100টি মেসেজের একটি কোটা নির্দিষ্ট করা হয়।

২০০০ ঐচ্ছিক
গণনা

কোনো কোটার জন্য বার্তার সংখ্যা ধারণকারী একটি ফ্লো ভেরিয়েবল নির্দিষ্ট করতে এটি ব্যবহার করুন। countRef count অ্যাট্রিবিউটের চেয়ে অগ্রাধিকার পায়।

কোনোটিই না ঐচ্ছিক

<Allow>/<Class> উপাদান

<Class> এলিমেন্টটি আপনাকে একটি ফ্লো ভ্যারিয়েবলের মানের উপর ভিত্তি করে <Allow> এলিমেন্টের মান শর্তসাপেক্ষ করার সুযোগ দেয়। <Class> এর প্রতিটি ভিন্ন <Allow> চাইল্ড ট্যাগের জন্য, পলিসিটি একটি ভিন্ন কাউন্টার বজায় রাখে।

<Class> এলিমেন্টটি ব্যবহার করতে, <Class> ট্যাগের ref অ্যাট্রিবিউটের মাধ্যমে একটি ফ্লো ভ্যারিয়েবল নির্দিষ্ট করুন। এরপর Edge সেই ফ্লো ভ্যারিয়েবলের মান ব্যবহার করে পলিসির অনুমোদিত সংখ্যা নির্ধারণ করার জন্য <Allow> চাইল্ড ট্যাগগুলোর মধ্যে একটিকে নির্বাচন করে। Edge ফ্লো ভ্যারিয়েবলের মানটিকে <Allow> ট্যাগের class অ্যাট্রিবিউটের সাথে মিলিয়ে দেখে, যেমনটি নিচে দেখানো হয়েছে:

<Allow>
  <Class ref="request.queryparam.time_variable">
    <Allow class="peak_time" count="5000"/>
    <Allow class="off_peak_time" count="1000"/>
  </Class>
</Allow>

এই উদাহরণে, প্রতিটি অনুরোধের সাথে পাঠানো time_variable কোয়েরি প্যারামিটারের মান দ্বারা বর্তমান কোটা কাউন্টার নির্ধারিত হয়। সেই ভেরিয়েবলটির মান peak_time বা off_peak_time হতে পারে। যদি কোয়েরি প্যারামিটারটিতে কোনো অবৈধ মান থাকে, তাহলে পলিসিটি একটি কোটা লঙ্ঘনের ত্রুটি ফেরত দেয়।

ডিফল্ট: প্রযোজ্য নয়
উপস্থিতি: ঐচ্ছিক
প্রকার: প্রযোজ্য নয়

বৈশিষ্ট্য

বৈশিষ্ট্য বর্ণনা ডিফল্ট উপস্থিতি
রেফারেন্স

কোন কোটার জন্য কোটা শ্রেণী ধারণকারী একটি ফ্লো ভেরিয়েবল নির্দিষ্ট করতে এটি ব্যবহার করুন।

কোনোটিই না প্রয়োজনীয়

<Allow>/<Class>/<Allow> এলিমেন্ট

<Allow> এলিমেন্টটি <Class> এলিমেন্ট দ্বারা সংজ্ঞায়িত একটি কোটা কাউন্টারের সীমা নির্দিষ্ট করে। <Class> এর প্রতিটি ভিন্ন <Allow> চাইল্ড ট্যাগের জন্য, পলিসিটি একটি ভিন্ন কাউন্টার বজায় রাখে।

উদাহরণস্বরূপ:

<Allow>
  <Class ref="request.queryparam.time_variable">
    <Allow class="peak_time" count="5000"/>
    <Allow class="off_peak_time" count="1000"/>
  </Class>
</Allow>

এই উদাহরণে, কোটা পলিসিটি peak_time এবং off_peak_time নামে দুটি কোটা কাউন্টার বজায় রাখে।

ডিফল্ট: প্রযোজ্য নয়
উপস্থিতি: ঐচ্ছিক
প্রকার: প্রযোজ্য নয়

বৈশিষ্ট্য

বৈশিষ্ট্য বর্ণনা ডিফল্ট উপস্থিতি
শ্রেণী

কোটা কাউন্টারের নাম নির্ধারণ করে।

কোনোটিই না প্রয়োজনীয়
গণনা কাউন্টারের জন্য কোটার সীমা নির্দিষ্ট করে। কোনোটিই না প্রয়োজনীয়

<Interval> উপাদান

একটি পূর্ণসংখ্যা (যেমন, ১, ২, ৫, ৬০, ইত্যাদি) নির্দিষ্ট করতে এটি ব্যবহার করুন, যা আপনার নির্দিষ্ট করা TimeUnit (মিনিট, ঘন্টা, দিন, সপ্তাহ বা মাস) সাথে যুক্ত হয়ে একটি সময়কাল নির্ধারণ করবে, যে সময়ের মধ্যে Edge কোটা ব্যবহারের হিসাব করবে।

উদাহরণস্বরূপ, hour TimeUnit সহ একটি 24 এর Interval অর্থ হলো, কোটাটি ২৪ ঘন্টা ধরে গণনা করা হবে।

<Interval ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.interval">1</Interval>
ডিফল্ট: কোনোটিই না
উপস্থিতি: প্রয়োজনীয়
প্রকার: পূর্ণসংখ্যা

বৈশিষ্ট্য

বৈশিষ্ট্য বর্ণনা ডিফল্ট উপস্থিতি
রেফারেন্স

কোটার ব্যবধান ধারণকারী একটি ফ্লো ভেরিয়েবল নির্দিষ্ট করতে এটি ব্যবহার করুন। একটি সুস্পষ্ট ব্যবধান মানের চেয়ে ref অগ্রাধিকার বেশি। যদি 'reference' এবং 'value' উভয়ই নির্দিষ্ট করা হয়, তবে 'reference' অগ্রাধিকার পায়। যদি রানটাইমে ref সমাধান না হয়, তবে 'value' ব্যবহৃত হয়।

কোনোটিই না ঐচ্ছিক

<TimeUnit> উপাদান

কোটার জন্য প্রযোজ্য সময়ের একক নির্দিষ্ট করতে ব্যবহার করুন।

উদাহরণস্বরূপ, hour TimeUnit সহ একটি 24 এর Interval অর্থ হলো, কোটাটি ২৪ ঘন্টা ধরে গণনা করা হবে।

<TimeUnit ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.timeunit">month</TimeUnit>
ডিফল্ট: কোনোটিই না
উপস্থিতি: প্রয়োজনীয়
প্রকার:

স্ট্রিং। minute , hour , day , week বা month থেকে নির্বাচন করুন।

বৈশিষ্ট্য

বৈশিষ্ট্য বর্ণনা ডিফল্ট উপস্থিতি
রেফারেন্স কোটার জন্য সময়ের একক ধারণকারী একটি ফ্লো ভেরিয়েবল নির্দিষ্ট করতে এটি ব্যবহার করুন। একটি সুস্পষ্ট ইন্টারভ্যাল মানের চেয়ে ref অগ্রাধিকার বেশি। যদি রানটাইমে ref টি রিজলভ না হয়, তাহলে মানটি ব্যবহৃত হয়। কোনোটিই না ঐচ্ছিক

<শুরুর সময়> উপাদান

type calendar, এটি সেই তারিখ ও সময় নির্দিষ্ট করে যখন কোটা কাউন্টার গণনা শুরু করবে, কোনো অ্যাপ থেকে কোনো অনুরোধ এসেছে কি না তা নির্বিশেষে।

উদাহরণস্বরূপ:

<StartTime>2017-7-16 12:00:00</StartTime>
ডিফল্ট: কোনোটিই না
উপস্থিতি: type calendar হিসেবে সেট করা থাকলে এটি আবশ্যক।
প্রকার:

ISO 8601 তারিখ এবং সময় বিন্যাসে স্ট্রিং।

<বিতরণকৃত> উপাদান

Edge-এর একটি ইনস্টলেশন অনুরোধগুলি প্রক্রিয়া করার জন্য এক বা একাধিক মেসেজ প্রসেসর ব্যবহার করতে পারে। পলিসিটি যেন একটি কেন্দ্রীয় কাউন্টার বজায় রাখে এবং সমস্ত মেসেজ প্রসেসর জুড়ে এটিকে ক্রমাগত সিঙ্ক্রোনাইজ করে, তা নির্দিষ্ট করতে এই উপাদানটিকে ' true তে সেট করুন। মেসেজ প্রসেসরগুলি অ্যাভেইলেবিলিটি জোন এবং/অথবা রিজিয়ন জুড়ে থাকতে পারে।

আপনি যদি ' false ' ডিফল্ট মানটি ব্যবহার করেন, তাহলে আপনার কোটা অতিক্রম করার সম্ভাবনা রয়েছে, কারণ প্রতিটি মেসেজ প্রসেসরের জন্য নির্ধারিত সংখ্যা ভাগ করা হয় না:

<Distributed>true</Distributed>

কাউন্টারগুলো যেন সিঙ্ক্রোনাইজড থাকে এবং প্রতিটি অনুরোধে আপডেট হয়, তা নিশ্চিত করতে <Distributed> এবং <Synchronous> কে true তে সেট করুন:

<Distributed>true</Distributed>
<Synchronous>true</Synchronous>
ডিফল্ট: মিথ্যা
উপস্থিতি: ঐচ্ছিক
প্রকার: বুলিয়ান

<সিঙ্ক্রোনাস> উপাদান

একটি ডিস্ট্রিবিউটেড কোটা কাউন্টার সিনক্রোনাসভাবে আপডেট করতে এটিকে ' true সেট করুন। এর মানে হলো, এপিআই-তে কোনো অনুরোধের মাধ্যমে কোটা যাচাই করার সময়েই কাউন্টারটি আপডেট করা হয়। যদি কোটার বাইরে কোনো এপিআই কল অনুমোদন না করা অপরিহার্য হয়, তবে এটিকে ' true সেট করুন।

কোটা কাউন্টারটি অ্যাসিঙ্ক্রোনাসভাবে আপডেট করতে এটিকে 'ফলস' ( false সেট করুন। এর মানে হলো, সেন্ট্রাল রিপোজিটরিতে কোটা কাউন্টারটি কখন অ্যাসিঙ্ক্রোনাসভাবে আপডেট করা হচ্ছে তার উপর নির্ভর করে, কোটা অতিক্রমকারী কিছু এপিআই কল সফল হওয়ার সম্ভাবনা রয়েছে। তবে, সিঙ্ক্রোনাস আপডেটের সাথে সম্পর্কিত সম্ভাব্য পারফরম্যান্সের প্রভাব আপনাকে মোকাবেলা করতে হবে না।

ডিফল্ট অ্যাসিঙ্ক্রোনাস আপডেট ব্যবধান হলো ১০ সেকেন্ড। এই অ্যাসিঙ্ক্রোনাস আচরণটি কনফিগার করতে AsynchronousConfiguration এলিমেন্টটি ব্যবহার করুন।

<Synchronous>false</Synchronous>
ডিফল্ট: মিথ্যা
উপস্থিতি: ঐচ্ছিক
প্রকার: বুলিয়ান

<অ্যাসিঙ্ক্রোনাস কনফিগারেশন> উপাদান

যখন পলিসি কনফিগারেশন এলিমেন্ট <Synchronous> অনুপস্থিত থাকে অথবা উপস্থিত থেকে false এ সেট করা থাকে, তখন ডিস্ট্রিবিউটেড কোটা কাউন্টারগুলোর মধ্যে সিনক্রোনাইজেশন ইন্টারভ্যাল কনফিগার করে।

আপনি SyncIntervalInSeconds অথবা SyncMessageCount চাইল্ড এলিমেন্টগুলো ব্যবহার করে একটি নির্দিষ্ট সময় পর অথবা একটি নির্দিষ্ট সংখ্যক মেসেজের পর সিঙ্ক্রোনাইজ করতে পারেন। এগুলো পরস্পর স্বতন্ত্র। উদাহরণস্বরূপ,

<AsynchronousConfiguration>
   <SyncIntervalInSeconds>20</SyncIntervalInSeconds>
</AsynchronousConfiguration>

অথবা

<AsynchronousConfiguration>
   <SyncMessageCount>5</SyncMessageCount>
</AsynchronousConfiguration>
ডিফল্ট: SyncIntervalInSeconds = ১০ সেকেন্ড
উপস্থিতি: ঐচ্ছিক; <Synchronous> true সেট করা থাকলে এটি উপেক্ষা করা হয়।
প্রকার:

যৌগ

<AsynchronousConfiguration>/<SyncIntervalInSeconds> এলিমেন্ট

১০ সেকেন্ডের ব্যবধান পর অ্যাসিঙ্ক্রোনাস আপডেট সম্পন্ন হওয়ার ডিফল্ট আচরণটি পরিবর্তন করতে এটি ব্যবহার করুন।

<AsynchronousConfiguration>
   <SyncIntervalInSeconds>20</SyncIntervalInSeconds>
</AsynchronousConfiguration>

লিমিটস টপিকে বর্ণিত নিয়ম অনুযায়ী সিঙ্ক ইন্টারভ্যাল অবশ্যই ১০ সেকেন্ড বা তার বেশি হতে হবে।

ডিফল্ট: ১০
উপস্থিতি: ঐচ্ছিক
প্রকার:

পূর্ণসংখ্যা

<অ্যাসিঙ্ক্রোনাস কনফিগারেশন>/<সিঙ্ক মেসেজ সংখ্যা> উপাদান

কোটা আপডেটের মধ্যবর্তী সময়ে সমস্ত Apigee মেসেজ প্রসেসর জুড়ে অনুরোধের সংখ্যা নির্দিষ্ট করে।

<AsynchronousConfiguration>
   <SyncMessageCount>5</SyncMessageCount>
</AsynchronousConfiguration>

এই উদাহরণে উল্লেখ করা হয়েছে যে, প্রতিটি Apigee Edge মেসেজ প্রসেসর জুড়ে প্রতি ৫টি অনুরোধ পর পর কোটা সংখ্যা আপডেট করা হয়।

ডিফল্ট: প্রযোজ্য নয়
উপস্থিতি: ঐচ্ছিক
প্রকার:

পূর্ণসংখ্যা

<শনাক্তকারী> উপাদান

ফ্লো ভেরিয়েবলের উপর ভিত্তি করে অনন্য কাউন্টার তৈরি করার জন্য পলিসি কনফিগার করতে <Identifier> এলিমেন্টটি ব্যবহার করুন।

আপনি একটি ফ্লো ভেরিয়েবল দ্বারা সংজ্ঞায়িত বৈশিষ্ট্যগুলির জন্য স্বতন্ত্র কাউন্টার তৈরি করতে পারেন। উদাহরণস্বরূপ, আপনি কোনো নির্দিষ্ট ডেভেলপারের সাথে একটি কোটা সংযুক্ত করতে ডেভেলপারের ইমেল ঠিকানা ব্যবহার করতে পারেন। একটি কোটা শনাক্ত করার জন্য আপনি বিভিন্ন ধরনের ভেরিয়েবল ব্যবহার করতে পারেন, তা কাস্টম ভেরিয়েবল হোক বা প্রিডিফাইন্ড ভেরিয়েবল, যেমন ‘ভেরিফাই এপিআই কী’ পলিসিতে উপলব্ধ ভেরিয়েবলগুলো। আরও দেখুন ‘ ভেরিয়েবলস রেফারেন্স’

আপনি যদি এই উপাদানটি ব্যবহার না করেন, তাহলে নীতিমালাটি একটি একক কাউন্টার ব্যবহার করে যা কোটার বিপরীতে প্রয়োগ করা হয়।

এই উপাদানটি নিম্নলিখিত Apigee কমিউনিটি পোস্টেও আলোচনা করা হয়েছে: বিভিন্ন পলিসি জুড়ে কোটা শনাক্তকারী

<Identifier ref="verifyapikey.verify-api-key.client_id"/>
ডিফল্ট: প্রযোজ্য নয়
উপস্থিতি: ঐচ্ছিক
প্রকার:

স্ট্রিং

বৈশিষ্ট্য

বৈশিষ্ট্য বর্ণনা ডিফল্ট উপস্থিতি
রেফারেন্স

একটি ফ্লো ভেরিয়েবল নির্দিষ্ট করে যা অনুরোধের জন্য ব্যবহৃত কাউন্টারটিকে শনাক্ত করে। এই শনাক্তকারীটি একটি HTTP হেডার, কোয়েরি প্যারামিটার, ফর্ম প্যারামিটার, বা বার্তার বিষয়বস্তু হতে পারে, যা প্রতিটি অ্যাপ, অ্যাপ ব্যবহারকারী, অ্যাপ ডেভেলপার, এপিআই পণ্য বা অন্যান্য বৈশিষ্ট্যের জন্য অনন্য।

অ্যাপগুলোকে স্বতন্ত্রভাবে শনাক্ত করার জন্য সবচেয়ে বেশি ব্যবহৃত <Identifier> হলো client_idclient_id হলো এপিআই কী বা কনজিউমার কী-এর অপর নাম, যা Apigee Edge-এ কোনো অর্গানাইজেশনে একটি অ্যাপ রেজিস্টার করার সময় তৈরি হয়। আপনার এপিআই-এর জন্য যদি এপিআই কী বা OAuth অথরাইজেশন পলিসি চালু করা থাকে, তবে আপনি এই আইডেন্টিফায়ারটি ব্যবহার করতে পারেন।

কিছু পরিস্থিতিতে, যেখানে কোনো client_id উপলব্ধ থাকে না, যেমন কোনো নিরাপত্তা নীতি (security policy) কার্যকর না থাকলে, কোটা সেটিংস (Quota settings) পুনরুদ্ধার করার প্রয়োজন হয়। সেইসব ক্ষেত্রে, আপনি উপযুক্ত এপিআই প্রোডাক্ট সেটিংস (API product settings) পুনরুদ্ধার করতে অ্যাক্সেস এনটিটি পলিসি (Access Entity policy) ব্যবহার করতে পারেন, তারপর এক্সট্র্যাক্টভেরিয়েবলস (ExtractVariables) ব্যবহার করে ভ্যালুগুলো এক্সট্র্যাক্ট (extract) করতে পারেন এবং এরপর এক্সট্র্যাক্ট করা কনটেক্সট ভেরিয়েবলটি (context variable) কোটা পলিসিতে ব্যবহার করতে পারেন। আরও তথ্যের জন্য, অ্যাক্সেস এনটিটি পলিসি দেখুন।

প্রযোজ্য নয় ঐচ্ছিক

<MessageWeight> উপাদান

প্রতিটি বার্তার জন্য নির্ধারিত গুরুত্ব নির্দিষ্ট করতে এটি ব্যবহার করুন। উদাহরণস্বরূপ, যেসব অনুরোধ বার্তা অন্যগুলোর চেয়ে বেশি কম্পিউটেশনাল রিসোর্স ব্যবহার করে, সেগুলোর প্রভাব বাড়াতে বার্তার গুরুত্ব ব্যবহার করুন।

উদাহরণস্বরূপ, আপনি POST মেসেজগুলোকে GET মেসেজের তুলনায় দ্বিগুণ "ভারী" বা ব্যয়বহুল হিসেবে গণনা করতে চান। এজন্য, আপনি একটি POST-এর জন্য MessageWeight ২ এবং একটি GET-এর জন্য ১ সেট করেন। আপনি এমনকি MessageWeight ০-ও সেট করতে পারেন, যাতে অনুরোধটি কাউন্টারকে প্রভাবিত না করে। এই উদাহরণে, যদি কোটা প্রতি মিনিটে ১০টি মেসেজ হয় এবং POST অনুরোধের জন্য MessageWeight 2 হয়, তাহলে কোটাটি যেকোনো ১০ মিনিটের ব্যবধানে ৫টি POST অনুরোধের অনুমতি দেবে। কাউন্টার রিসেট হওয়ার আগে যেকোনো অতিরিক্ত অনুরোধ, তা POST বা GET যাই হোক না কেন, প্রত্যাখ্যান করা হবে।

MessageWeight মান একটি ফ্লো ভেরিয়েবলের মাধ্যমে নির্দিষ্ট করতে হবে, এবং এটি HTTP হেডার, কোয়েরি প্যারামিটার, একটি XML বা JSON রিকোয়েস্ট পেলোড, বা অন্য যেকোনো ফ্লো ভেরিয়েবল থেকে নেওয়া যেতে পারে। উদাহরণস্বরূপ, আপনি weight নামের একটি হেডারে এটি সেট করতে পারেন:

<MessageWeight ref="message_weight"/>
ডিফল্ট: প্রযোজ্য নয়
উপস্থিতি: ঐচ্ছিক
প্রকার:

পূর্ণসংখ্যা

প্রবাহ পরিবর্তনশীল

যখন একটি কোটা পলিসি কার্যকর হয়, তখন নিম্নলিখিত পূর্বনির্ধারিত ফ্লো ভেরিয়েবলগুলো স্বয়ংক্রিয়ভাবে পূরণ হয়ে যায়। ফ্লো ভেরিয়েবল সম্পর্কে আরও তথ্যের জন্য, ভেরিয়েবল রেফারেন্স দেখুন।

ভেরিয়েবল প্রকার অনুমতি বর্ণনা
ratelimit.{policy_name}.allowed.count দীর্ঘ শুধুমাত্র পঠনযোগ্য অনুমোদিত কোটার সংখ্যা ফেরত দেয়
ratelimit.{policy_name}.used.count দীর্ঘ শুধুমাত্র পঠনযোগ্য একটি কোটা ব্যবধানের মধ্যে ব্যবহৃত বর্তমান কোটা ফেরত দেয়।
রেটলিমিট.{পলিসির_নাম}.উপলব্ধ.গণনা দীর্ঘ শুধুমাত্র পঠনযোগ্য কোটা ব্যবধানের মধ্যে উপলব্ধ কোটার সংখ্যা ফেরত দেয়।
ratelimit.{policy_name}.exceed.count দীর্ঘ শুধুমাত্র পঠনযোগ্য কোটা অতিক্রম করলে ১ ফেরত দেয়।
ratelimit.{policy_name}.total.exceed.count দীর্ঘ শুধুমাত্র পঠনযোগ্য কোটা অতিক্রম করলে ১ ফেরত দেয়।
রেটলিমিট.{পলিসির_নাম}.মেয়াদ.সময় দীর্ঘ শুধুমাত্র পঠনযোগ্য

মিলিসেকেন্ডে UTC সময় ফেরত দেয়, যা নির্ধারণ করে কখন কোটার মেয়াদ শেষ হবে এবং নতুন কোটা সময়কাল শুরু হবে।

যখন কোটা পলিসির ধরন rollingwindow হয়, তখন এই মানটি বৈধ নয়, কারণ কোটার মেয়াদ কখনও শেষ হয় না।

রেটলিমিট.{পলিসির_নাম}.আইডেন্টিফায়ার স্ট্রিং শুধুমাত্র পঠনযোগ্য পলিসির সাথে সংযুক্ত (ক্লায়েন্ট) শনাক্তকারী রেফারেন্সটি ফেরত দেয়।
রেটলিমিট.{পলিসির_নাম}.ক্লাস স্ট্রিং শুধুমাত্র পঠনযোগ্য ক্লায়েন্ট আইডেন্টিফায়ারের সাথে যুক্ত ক্লাসটি ফেরত দেয়।
ratelimit.{policy_name}.class.allowed.count দীর্ঘ শুধুমাত্র পঠনযোগ্য ক্লাসে সংজ্ঞায়িত অনুমোদিত কোটার সংখ্যা ফেরত দেয়।
ratelimit.{policy_name}.class.used.count দীর্ঘ শুধুমাত্র পঠনযোগ্য একটি ক্লাসের মধ্যে ব্যবহৃত কোটা ফেরত দেয়।
রেটলিমিট.{পলিসির_নাম}.ক্লাস.উপলব্ধ.গণনা দীর্ঘ শুধুমাত্র পঠনযোগ্য ক্লাসে উপলব্ধ কোটার সংখ্যা ফেরত দেয়।
ratelimit.{policy_name}.class.exceed.count দীর্ঘ শুধুমাত্র পঠনযোগ্য বর্তমান কোটা ব্যবধানে নির্দিষ্ট ক্লাসে সীমা অতিক্রমকারী অনুরোধের সংখ্যা ফেরত দেয়।
ratelimit.{policy_name}.class.total.exceed.count দীর্ঘ শুধুমাত্র পঠনযোগ্য এটি সমস্ত কোটা ব্যবধান জুড়ে একটি ক্লাসের সীমা অতিক্রমকারী অনুরোধের মোট সংখ্যা ফেরত দেয়, অর্থাৎ এটি সমস্ত কোটা ব্যবধানের জন্য class.exceed.count এর যোগফল।
রেটলিমিট.{পলিসির_নাম}.ব্যর্থ হয়েছে বুলিয়ান শুধুমাত্র পঠনযোগ্য

নীতিমালাটি ব্যর্থ হয়েছে কি না তা নির্দেশ করে (সত্য বা মিথ্যা)।

ত্রুটির রেফারেন্স

এই বিভাগটি ফল্ট কোড এবং ত্রুটি বার্তাগুলি বর্ণনা করে যেগুলি ফেরত দেওয়া হয় এবং ত্রুটি ভেরিয়েবলগুলি যেগুলি এজ দ্বারা সেট করা হয় যখন এই নীতিটি একটি ত্রুটি ট্রিগার করে৷ এই তথ্যটি জানা গুরুত্বপূর্ণ যে আপনি ত্রুটিগুলি পরিচালনা করার জন্য ত্রুটির নিয়ম তৈরি করছেন কিনা। আরও জানতে, নীতিগত ত্রুটি এবং হ্যান্ডলিং ফল্ট সম্পর্কে আপনার যা জানা দরকার তা দেখুন৷

রানটাইম ত্রুটি

নীতি কার্যকর করার সময় এই ত্রুটিগুলি ঘটতে পারে৷

ফল্ট কোড HTTP স্থিতি কারণ ঠিক করুন
policies.ratelimit.FailedToResolveQuotaIntervalReference 500 কোটা নীতির মধ্যে <Interval> উপাদানটি সংজ্ঞায়িত না হলে ঘটে। এই উপাদানটি বাধ্যতামূলক এবং কোটার জন্য প্রযোজ্য সময়ের ব্যবধান নির্দিষ্ট করতে ব্যবহৃত হয়। সময়ের ব্যবধান মিনিট, ঘন্টা, দিন, সপ্তাহ বা মাস হতে পারে যেমন <TimeUnit> উপাদানের সাথে সংজ্ঞায়িত করা হয়েছে।
policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference 500 কোটা নীতির মধ্যে <TimeUnit> উপাদানটি সংজ্ঞায়িত না হলে ঘটে। এই উপাদানটি বাধ্যতামূলক এবং কোটার ক্ষেত্রে প্রযোজ্য সময়ের একক নির্দিষ্ট করতে ব্যবহৃত হয়। সময়ের ব্যবধান মিনিট, ঘন্টা, দিন, সপ্তাহ বা মাসে হতে পারে।
policies.ratelimit.InvalidMessageWeight 500 একটি ফ্লো ভেরিয়েবলের মাধ্যমে নির্দিষ্ট করা <MessageWeight> উপাদানটির মানটি অবৈধ হলে (একটি অ-পূর্ণসংখ্যা মান) ঘটে।
policies.ratelimit.QuotaViolation 500 কোটার সীমা ছাড়িয়ে গেছে। N/A

স্থাপনার ত্রুটি

ত্রুটির নাম কারণ ঠিক করুন
InvalidQuotaInterval যদি <Interval> উপাদানে উল্লেখ করা কোটা ব্যবধানটি একটি পূর্ণসংখ্যা না হয়, তাহলে API প্রক্সির স্থাপনা ব্যর্থ হয়। উদাহরণস্বরূপ, যদি <Interval> উপাদানে উল্লেখিত কোটা ব্যবধান 0.1 হয়, তাহলে API প্রক্সির স্থাপনা ব্যর্থ হয়।
InvalidQuotaTimeUnit যদি <TimeUnit> উপাদানে নির্দিষ্ট সময় ইউনিট অসমর্থিত হয়, তাহলে API প্রক্সির স্থাপনা ব্যর্থ হয়। সমর্থিত সময়ের একক হল minute , hour , day , week এবং month
InvalidQuotaType যদি <Quota> উপাদানে type অ্যাট্রিবিউট দ্বারা নির্দিষ্ট করা কোটার ধরনটি অবৈধ হয়, তাহলে API প্রক্সির স্থাপনা ব্যর্থ হয়। সমর্থিত কোটার প্রকারগুলি হল default , calendar , flexi এবং rollingwindow
InvalidStartTime যদি <StartTime> উপাদানে নির্দিষ্ট সময়ের বিন্যাসটি অবৈধ হয়, তাহলে API প্রক্সির স্থাপনা ব্যর্থ হয়। বৈধ বিন্যাস হল yyyy-MM-dd HH:mm:ss , যা ISO 8601 তারিখ এবং সময় বিন্যাস৷ উদাহরণস্বরূপ, যদি <StartTime> উপাদানে নির্দিষ্ট সময় 7-16-2017 12:00:00 হয় তাহলে API প্রক্সির স্থাপনা ব্যর্থ হয়।
StartTimeNotSupported যদি <StartTime> উপাদানটি নির্দিষ্ট করা হয় যার কোটার ধরন calendar প্রকার নয়, তাহলে API প্রক্সির স্থাপনা ব্যর্থ হয়। <StartTime> উপাদানটি শুধুমাত্র calendar কোটার প্রকারের জন্য সমর্থিত। উদাহরণস্বরূপ, যদি type অ্যাট্রিবিউটটি <Quota> এলিমেন্টে flexi বা rolling window সেট করা থাকে, তাহলে API প্রক্সির স্থাপনা ব্যর্থ হয়।
InvalidTimeUnitForDistributedQuota যদি <Distributed> উপাদানটি true সেট করা হয় এবং <TimeUnit> উপাদানটি second সেট করা হয় তবে API প্রক্সির স্থাপনা ব্যর্থ হয়। টাইমইউনিট second একটি বিতরণ করা কোটার জন্য অবৈধ৷
InvalidSynchronizeIntervalForAsyncConfiguration যদি একটি কোটা নীতিতে <SyncIntervalInSeconds> উপাদানের <AsynchronousConfiguration> উপাদানের জন্য নির্দিষ্ট করা মান শূন্যের কম হয়, তাহলে API প্রক্সির স্থাপনা ব্যর্থ হয়।
InvalidAsynchronizeConfigurationForSynchronousQuota যদি <AsynchronousConfiguration> > উপাদানটির মান একটি কোটা নীতিতে true হিসাবে সেট করা হয়, যেটিতে <AsynchronousConfiguration> > উপাদান ব্যবহার করে সংজ্ঞায়িত অ্যাসিঙ্ক্রোনাস কনফিগারেশনও রয়েছে, তাহলে API প্রক্সির স্থাপনা ব্যর্থ হয়।

ফল্ট ভেরিয়েবল

যখন এই নীতি একটি ত্রুটি ট্রিগার করে তখন এই ভেরিয়েবলগুলি সেট করা হয়৷ আরও তথ্যের জন্য, নীতি ত্রুটি সম্পর্কে আপনার যা জানা দরকার তা দেখুন।

ভেরিয়েবল যেখানে উদাহরণ
fault.name=" fault_name " fault_name হল ফল্টের নাম, যা উপরে রানটাইম ত্রুটির সারণীতে তালিকাভুক্ত করা হয়েছে। ফল্ট নামটি ফল্ট কোডের শেষ অংশ। fault.name Matches "QuotaViolation"
ratelimit. policy_name .failed policy_name হল সেই নীতির ব্যবহারকারী-নির্দিষ্ট নাম যা ত্রুটিটি ফেলেছে। ratelimit.QT-QuotaPolicy.failed = true

উদাহরণ ত্রুটি প্রতিক্রিয়া

{  
   "fault":{  
      "detail":{  
         "errorcode":"policies.ratelimit.QuotaViolation"
      },
      "faultstring":"Rate limit quota violation. Quota limit  exceeded. Identifier : _default"
   }
}

উদাহরণ দোষ নিয়ম

<FaultRules>
    <FaultRule name="Quota Errors">
        <Step>
            <Name>JavaScript-1</Name>
            <Condition>(fault.name Matches "QuotaViolation") </Condition>
        </Step>
        <Condition>ratelimit.Quota-1.failed=true</Condition>
    </FaultRule>
</FaultRules>

স্কিমা

সম্পর্কিত বিষয়

কোটা নীতি পুনরায় সেট করুন

স্পাইকঅ্যারেস্ট নীতি

কোটা, স্পাইক অ্যারেস্ট এবং কনকারেন্ট রেট লিমিট পলিসিগুলির তুলনা

,

আপনি Apigee Edge-এর ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন
.info- তে যান।

কী

একটি এপিআই প্রক্সি নির্দিষ্ট সময়কালে (যেমন মিনিট, ঘন্টা, দিন, সপ্তাহ বা মাস) কতগুলো অনুরোধ বার্তা গ্রহণ করবে, তা নির্ধারণ করতে কোটা নীতি ব্যবহার করুন। আপনি এপিআই প্রক্সি অ্যাক্সেসকারী সমস্ত অ্যাপের জন্য কোটা একই রাখতে পারেন, অথবা নিম্নলিখিত বিষয়গুলোর উপর ভিত্তি করে কোটা নির্ধারণ করতে পারেন:

  • যে পণ্যটিতে এপিআই প্রক্সি রয়েছে
  • এপিআই-এর জন্য অনুরোধকারী অ্যাপটি
  • অ্যাপ ডেভেলপার
  • আরও অনেক মানদণ্ড

সামগ্রিক ট্র্যাফিক স্পাইক থেকে সুরক্ষা পেতে কোটা ব্যবহার করবেন না। এর জন্য স্পাইক অ্যারেস্ট পলিসি ব্যবহার করুন। স্পাইক অ্যারেস্ট পলিসি দেখুন।

ভিডিও

এই ভিডিওগুলিতে কোটা নীতির মাধ্যমে কোটা ব্যবস্থাপনার সাথে পরিচয় করিয়ে দেওয়া হয়েছে:

ভূমিকা (নিউ এজ)

ভূমিকা (ক্লাসিক এজ)

গতিশীল কোটা

বিতরণ এবং সিঙ্ক্রোনাস

বার্তার ওজন

ক্যালেন্ডার

ঘূর্ণায়মান জানালা

ফ্লেক্সি

শর্তসাপেক্ষ কোটা

প্রবাহ পরিবর্তনশীল

ত্রুটি পরিচালনা

নমুনা

এই নীতি কোডের নমুনাগুলো নিম্নোক্ত উপায়ে কোটার মেয়াদ শুরু ও শেষ করার পদ্ধতি ব্যাখ্যা করে:

আরও গতিশীল কোটা

<Quota name="CheckQuota">
  <Interval ref="verifyapikey.verify-api-key.apiproduct.developer.quota.interval">1</Interval>
  <TimeUnit ref="verifyapikey.verify-api-key.apiproduct.developer.quota.timeunit">hour</TimeUnit>
  <Allow count="200" countRef="verifyapikey.verify-api-key.apiproduct.developer.quota.limit"/>
</Quota>

ডাইনামিক কোটা আপনাকে একটি একক কোটা পলিসি কনফিগার করার সুযোগ দেয়, যা পলিসিতে পাঠানো তথ্যের উপর ভিত্তি করে বিভিন্ন কোটা সেটিংস প্রয়োগ করে। এই প্রসঙ্গে কোটা সেটিংসের আরেকটি পরিভাষা হলো "সার্ভিস প্ল্যান"। ডাইনামিক কোটা অ্যাপের "সার্ভিস প্ল্যান" যাচাই করে এবং তারপর সেই সেটিংসগুলো প্রয়োগ করে।

দ্রষ্টব্য : যদি আপনি কোনো এলিমেন্টের জন্য ভ্যালু এবং রেফারেন্স উভয়ই উল্লেখ করেন, তাহলে রেফারেন্সটি অগ্রাধিকার পাবে। যদি রানটাইমে রেফারেন্সটি রিজলভ না হয়, তাহলে ভ্যালুটি ব্যবহৃত হবে।

উদাহরণস্বরূপ, যখন আপনি একটি এপিআই প্রোডাক্ট তৈরি করেন, তখন আপনি ঐচ্ছিকভাবে অনুমোদিত কোটা সীমা, সময় একক এবং ব্যবধান নির্ধারণ করতে পারেন। তবে, এপিআই প্রোডাক্টে এই মানগুলি নির্ধারণ করা হলে তা এপিআই প্রক্সিতে সেগুলির ব্যবহার বাধ্যতামূলক করে না। আপনাকে অবশ্যই এপিআই প্রক্সিতে একটি কোটা পলিসি যোগ করতে হবে যা এই মানগুলি পড়ে। আরও জানতে ‘এপিআই প্রোডাক্ট তৈরি করুন’ দেখুন।

উপরের উদাহরণে, কোটা পলিসি ধারণকারী এপিআই প্রক্সিটি একটি অনুরোধে পাঠানো এপিআই কী যাচাই করার জন্য verify-api-key নামের একটি VerifyAPIKey পলিসি ব্যবহার করে। এরপর কোটা পলিসিটি এপিআই প্রোডাক্টে সেট করা কোটার মানগুলো পড়ার জন্য VerifyAPIKey পলিসি থেকে ফ্লো ভ্যারিয়েবলগুলো অ্যাক্সেস করে। VerifyAPIKey ফ্লো ভ্যারিয়েবল সম্পর্কে আরও জানতে, Verify API Key policy দেখুন।

আরেকটি উপায় হলো, স্বতন্ত্র ডেভেলপার বা অ্যাপে কাস্টম অ্যাট্রিবিউট সেট করা এবং তারপর কোটা পলিসিতে সেই মানগুলো ব্যবহার করা। উদাহরণস্বরূপ, আপনি প্রতি ডেভেলপারের জন্য আলাদা কোটা মান নির্ধারণ করতে চান। এক্ষেত্রে, আপনি ডেভেলপারের উপর লিমিট, টাইম ইউনিট এবং ইন্টারভ্যাল সম্বলিত কাস্টম অ্যাট্রিবিউট সেট করবেন। এরপর, নিচে দেখানো পদ্ধতি অনুযায়ী আপনি কোটা পলিসিতে এই মানগুলো উল্লেখ করবেন:

<Quota name="DeveloperQuota">
  <Identifier ref="verifyapikey.verify-api-key.client_id"/>
  <Interval ref="verifyapikey.verify-api-key.developer.timeInterval"/>
  <TimeUnit ref="verifyapikey.verify-api-key.developer.timeUnit"/>
  <Allow countRef="verifyapikey.verify-api-key.developer.limit"/>
</Quota>

This example also uses the VerifyAPIKey flow variables to reference the custom attributes set on the developer.

You can use any variable to set the parameters of the Quota policy. Those variables can come from:

  • প্রবাহ পরিবর্তনশীল
  • Properties on the API product, app, or developer
  • A key value map (KVM)
  • A header, query parameter, form parameter, etc

For each API proxy, you can add a Quota policy that either references the same variable as all the other Quota policies in all the other proxies, or the Quota policy can reference variables unique for that policy and proxy.

শুরুর সময়

<Quota name="QuotaPolicy" type="calendar">
  <StartTime>2017-02-18 10:30:00</StartTime>
  <Interval>5</Interval>
  <TimeUnit>hour</TimeUnit>
  <Allow count="99"/>
</Quota>

For a Quota with type set to calendar , you must define an explicit <StartTime> value. The time value is the GMT time, not local time. If you do not provide a <StartTime> value for a policy of type calendar , Edge issues an error.

The Quota counter for each app is refreshed based on the <StartTime> , <Interval> , and <TimeUnit> values. For this example, the Quota begins counting at 10:30 am GMT on February 18, 2017, and refreshes every 5 hours. Therefore, the next refresh is at 3:30 pm GMT on February 18, 2017.

Access Counter

<Quota name="QuotaPolicy">
  <Interval>5</Interval>
  <TimeUnit>hour</TimeUnit>
  <Allow count="99"/>
</Quota>

An API proxy has access to the flow variables set by the Quota policy. You can access these flow variables in the API proxy to perform conditional processing, monitor the policy as it gets close to the quota limit, return the current quota counter to an app, or for other reasons.

Because access the flow variables for the policy is based on the policies name attribute, for the policy above named QuotaPolicy you access its flow variables in the form:

  • ratelimit.QuotaPolicy.allowed.count : Allowed count.
  • ratelimit.QuotaPolicy.used.count : Current counter value.
  • ratelimit.QuotaPolicy.expiry.time : UTC time when the counter resets.

There are many other flow variables that you can access, as described below.

For example, you can use the following AssignMessage policy to return the values of Quota flow variables as response headers:

<AssignMessage async="false" continueOnError="false" enabled="true" name="ReturnQuotaVars">
    <AssignTo createNew="false" type="response"/>
    <Set>
        <Headers>
            <Header name="QuotaLimit">{ratelimit.QuotaPolicy.allowed.count}</Header>
            <Header name="QuotaUsed">{ratelimit.QuotaPolicy.used.count}</Header>
            <Header name="QuotaResetUTC">{ratelimit.QuotaPolicy.expiry.time}</Header>
        </Headers>
    </Set>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
</AssignMessage>

First Request

<Quota name="MyQuota">
  <Interval>1</Interval>
  <TimeUnit>hour</TimeUnit>
  <Allow count="10000"/>
</Quota>

Use this sample code to enforce a quota of 10,000 calls per one hour. The policy resets the quota counter at the top of each hour. If the counter reaches the 10,000-call quota before the end of the hour, calls beyond 10,000 are rejected.

For example, if the counter starts at 2017-07-08 07:00:00 , then it resets to 0 at 2017-07-08 08:00:00 (1 hour from the start time). If the first message is received at 2017-07-08 07:35:28 and the message count reaches 10,000 before 2017-07-08 08:00:00 , calls beyond that count are rejected until the count resets at the top of the hour.

The counter reset time is based on the combination of <Interval> and <TimeUnit> . For example, if you set <Interval> to 12 for a <TimeUnit> of hour, then the counter resets every twelve hours. You can set <TimeUnit> to minute, hour, day, week, or month.

You can reference this policy in multiple places in your API proxy. For example, you could place it on the Proxy PreFlow so it is executed on on every request. Or, you could place it on multiple flows in the API proxy. If you use this policy in multiple places in the proxy, it maintains a single counter that is updated by all instances of the policy.

Alternatively, you can define multiple Quota policies in your API proxy. Each Quota policy maintains its own counter, based on the name attribute of the policy.

Set identifier

<Quota name="QuotaPolicy" type="calendar">
  <Identifier ref="request.header.clientId"/>
  <StartTime>2017-02-18 10:00:00</StartTime>
  <Interval>5</Interval>
  <TimeUnit>hour</TimeUnit>
  <Allow count="99"/>
</Quota>

By default, a Quota policy defines a single counter for the API proxy, regardless of the origin of a request. Alternatively, you can use the <Identifier> attribute with a Quota policy to maintain separate counters based on the value of the <Identifier> attribute.

For example, use the <Identifier> tag to define separate counters for every client ID. On a request to your proxy, the client app then passes a header containing the clientID , as shown in the example above.

You can specify any flow variable to the <Identifier> attribute. For example, you could specify that a query param named id contains the unique identifier:

<Identifier ref="request.queryparam.id"/>

If you use the VerifyAPIKey policy to validate the API key, or the OAuthV2 policies with OAuth tokens, you can use information in the API key or token to define individual counters for the same Quota policy. For example, the following <Identifier> tag uses the client_id flow variable of a VerifyAPIKey policy named verify-api-key :

<Identifier ref="verifyapikey.verify-api-key.client_id"></Identifier>

Each unique client_id value now defines its own counter in the Quota policy.

শ্রেণী

<Quota name="QuotaPolicy">
  <Interval>1</Interval>
  <TimeUnit>day</TimeUnit>
  <Allow>
    <Class ref="request.header.developer_segment">
      <Allow class="platinum" count="10000"/>
      <Allow class="silver" count="1000" />
    </Class>
  </Allow>
</Quota>

You can set Quota limits dynamically by using a class-based Quota count. In this example, the quota limit is determined by the value of the developer_segment header passed with each request. That variable can have a value of platinum or silver . If the header has an invalid value, the policy returns a quota violation error.


About the Quota policy

A Quota is an allotment of request messages that an API proxy can handle over a time period, such as minute, hour, day, week, or month. The policy maintains counters that tally the number of requests received by the API proxy. This capability enables API providers to enforce limits on the number of API calls made by apps over an interval of time. Using Quota policies you can, for example, limit apps to 1 request per minute, or to 10,000 requests per month.

For example, if a Quota is defined as 10,000 messages per month, rate-limiting begins after the 10,000th message. It doesn't matter whether 10,000 messages were counted on the first day or the last day of that period; no additional requests area allowed until the Quota counter automatically resets at the end of the specified time interval, or until the Quota is explicitly reset using Reset Quota policy .

A variation on Quota called SpikeArrest prevents traffic spikes (or bursts) that can be caused by a sudden increase in usage, buggy clients, or malicious attacks. For more information on SpikeArrest, see Spike Arrest policy .

Quotas apply to individual API proxies and are not distributed among API proxies. For example, if you have three API proxies in an API product, a single quota is not shared across all three even if all three use the same quota policy configuration.

Quota policy types

The Quota policy supports several different types of policies: default, calendar , flexi , and rollingwindow . Each type defines when the quota counter starts and when it resets, as shown in the following table:

Time Unit Default (or null) reset calendar reset flexi reset
মিনিট Start of next minute One minute after <StartTime> One minute after first request
ঘন্টা Top of next hour One hour after <StartTime> One hour after first request
দিন Midnight GMT of the current day 24 hours after <StartTime> 24 hours after first request
সপ্তাহ Midnight GMT Sunday at the end of the week One week after <StartTime> One week after first request
মাস Midnight GMT of the last day of the month One month (28 days) after <StartTime> One month (28 days) after first request

For type="calendar" , you must specify the value of <StartTime> .

The table does not list the value for the rollingwindow type. Rolling window quotas work by setting the size of a quota "window", such as a one hour or one day window. When a new request comes in, the policy determines if the quota has been exceeded in the past "window" of time.

For example, you define a two hour window that allows 1000 requests. A new request comes in at 4:45 PM.The policy calculates the quota count for the past two hour window, meaning the number of requests since 2:45 PM. If the quota limit has not been exceeded in that two-hour window, then the request is allowed.

One minute later, at 4:46 PM, another request comes in. Now the policy calculates the quota count since 2:46 PM to determine if the limit has been exceeded.

For the rollingwindow type, the counter never resets, but is recalculated on each request.

Understanding quota counters

By default, a Quota policy maintains a single counter, regardless of how many times you reference it in an API proxy. The name of the quota counter is based on the name attribute of the policy.

For example, you create a Quota policy named MyQuotaPolicy with a limit of 5 requests and place it on multiple flows (Flow A, B, and C) in the API proxy. Even though it is used in multiple flows, it maintains a single counter that is updated by all instances of the policy:

  • Flow A is executed -> MyQuotaPolicy is executed and its counter = 1
  • Flow B is executed -> MyQuotaPolicy is executed and its counter = 2
  • Flow A is executed -> MyQuotaPolicy is executed and its counter = 3
  • Flow C is executed -> MyQuotaPolicy is executed and its counter = 4
  • Flow A is executed -> MyQuotaPolicy is executed and its counter = 5

The next request to any of the three flows is rejected because the quota counter has reached its limit.

Using the same Quota policy in more than one place in an API proxy flow, which can unintentionally cause Quota to run out faster than you expected, is an anti-pattern described in The Book of Apigee Edge Antipatterns .

Alternatively, you can define multiple Quota policies in your API proxy and use a different policy in each flow. Each Quota policy maintains its own counter, based on the name attribute of the policy.

Or, use the <Class> or <Identifier> elements in the Quota policy to define multiple, unique counters in a single policy. By using these elements, a single policy can maintain different counters based on the app making the request, the app developer making the request, a client ID or other client identifier, and more. See the examples above for more information on using the <Class> or <Identifier> elements.

Time notation

All Quota times are set to the Coordinated Universal Time (UTC) time zone.

Quota time notation follows the international standard date notation defined in International Standard ISO 8601 .

Dates are defined as year, month, and day, in the following format: YYYY-MM-DD . For example, 2015-02-04 represents February 4, 2015.

Time of day is defined as hours, minutes, and seconds in the following format: hours:minutes:seconds . For example, 23:59:59 represents the time one second before midnight.

Note that two notations, 00:00:00 and 24:00:00 , are available to distinguish the two midnights that can be associated with one date. Therefore 2015-02-04 24:00:00 is the same date and time as 2015-02-05 00:00:00 . The latter is usually the preferred notation.

Getting quota settings from the API product configuration

You can set quota limits in API product configurations. Those limits don't automatically enforce quota. Instead, you can reference product quota settings in a quota policy. Here are some advantages of setting a quota on the product for quota policies to reference:

  • Quota policies can use a uniform setting across all API proxies in the API product.
  • You can make runtime changes to the quota setting on an API product, and quota policies that reference the value automatically have updated quota values.

For more information on using quota settings from an API product, see the "Dynamic Quota" example above. .

For info on configuring API products with quota limits, see Create API products .

উপাদান রেফারেন্স

Following are elements and attributes you can configure on this policy. Note that some element combinations are mutually exclusive or not required. See the samples for specific usage. The verifyapikey.VerifyAPIKey.apiproduct.* variables below are available by default when a Verify API Key policy called "VerifyAPIKey" is used to check the app's API key in the request. The variable values come from the quota settings on the API product that the key is associated with, as described in Getting quota settings from the API product configuration .

<Quota async="false" continueOnError="false" enabled="true" name="Quota-3" type="calendar">
   <DisplayName>Quota 3</DisplayName>
   <Allow count="2000" countRef="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.limit"/>
   <Allow>
      <Class ref="request.queryparam.time_variable">
        <Allow class="peak_time" count="5000"/>
        <Allow class="off_peak_time" count="1000"/>
      </Class>
   </Allow>
   <Interval ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.interval">1</Interval>
   <TimeUnit ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.timeunit">month</TimeUnit>
   <StartTime>2017-7-16 12:00:00</StartTime>
   <Distributed>false</Distributed>
   <Synchronous>false</Synchronous>
   <AsynchronousConfiguration>
      <SyncIntervalInSeconds>20</SyncIntervalInSeconds>
      <SyncMessageCount>5</SyncMessageCount>
   </AsynchronousConfiguration>
   <Identifier/>
   <MessageWeight/>
</Quota>

<Quota> attributes

<Quota async="false" continueOnError="false" enabled="true" name="Quota-3" type="calendar">

নিম্নলিখিত বৈশিষ্ট্যগুলো এই পলিসির জন্য নির্দিষ্ট।

বৈশিষ্ট্য বর্ণনা ডিফল্ট উপস্থিতি
প্রকার

Use to determine when and how the quota counter checks quota usage. See Quota policy types for more information.

If you omit a type value, the counter begins at the beginning of the minute/hour/day/week/month.

বৈধ মানগুলির মধ্যে রয়েছে:

  • calendar : Configure a quota based on an explicit start time. The Quota counter for each app is refreshed based on the <StartTime> , <Interval> , and <TimeUnit> values that you set.
  • rollingwindow : Configure a quota that uses a "rolling window" to determine quota usage. With rollingwindow , you determine the size of the window with the <Interval> and <TimeUnit> elements; for example, 1 day. When a request comes in, Edge looks at the exact time of the request (say 5:01pm), counts the number of requests that came in between then and 5:01pm the previous day (1 day), and determines whether or not quota has been exceeded during that window.
  • flexi : Configure a quota that causes the counter to begin when the first request message is received from an app, and resets based on the <Interval>, and <TimeUnit> values.
ক্যালেন্ডার ঐচ্ছিক

নিম্নলিখিত সারণী সমস্ত নীতির মূল উপাদানগুলির জন্য সাধারণ বৈশিষ্ট্যগুলি বর্ণনা করে:

বৈশিষ্ট্য বর্ণনা ডিফল্ট উপস্থিতি
name

নীতির অভ্যন্তরীণ নাম। name বৈশিষ্ট্যের মানটিতে অক্ষর, সংখ্যা, স্পেস, হাইফেন, আন্ডারস্কোর এবং পিরিয়ড থাকতে পারে। এই মান 255 অক্ষরের বেশি হতে পারে না।

ঐচ্ছিকভাবে, ম্যানেজমেন্ট UI প্রক্সি এডিটরে নীতিটিকে একটি ভিন্ন, প্রাকৃতিক-ভাষা নামের সাথে লেবেল করতে <DisplayName> উপাদানটি ব্যবহার করুন।

N/A প্রয়োজন
continueOnError

একটি নীতি ব্যর্থ হলে একটি ত্রুটি ফেরত দিতে false সেট করুন৷ এটি বেশিরভাগ নীতির জন্য প্রত্যাশিত আচরণ।

একটি নীতি ব্যর্থ হওয়ার পরেও ফ্লো এক্সিকিউশন চালিয়ে যেতে true সেট করুন৷

মিথ্যা ঐচ্ছিক
enabled

নীতি প্রয়োগ করতে true সেট করুন৷

নীতি বন্ধ করতে false সেট করুন। নীতিটি প্রবাহের সাথে সংযুক্ত থাকলেও তা কার্যকর করা হবে না।

সত্য ঐচ্ছিক
async

এই বৈশিষ্ট্যটি অবমূল্যায়ন করা হয়েছে৷

মিথ্যা অবচয়

<DisplayName> উপাদান

ম্যানেজমেন্ট UI প্রক্সি এডিটরে নীতিটিকে একটি ভিন্ন, প্রাকৃতিক-ভাষা নামের সাথে লেবেল করতে name বৈশিষ্ট্য ছাড়াও ব্যবহার করুন।

<DisplayName>Policy Display Name</DisplayName>
ডিফল্ট

N/A

আপনি এই উপাদানটি বাদ দিলে, নীতির name বৈশিষ্ট্যের মান ব্যবহার করা হবে।

উপস্থিতি ঐচ্ছিক
টাইপ স্ট্রিং

<Allow> element

Specifies the count limit for the quota. If the counter for the policy reaches this limit value, subsequent calls are rejected until the counter resets.

Shown below are three ways to set the <Allow> element:

<Allow count="2000"/>
<Allow countRef="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.limit"/>
<Allow count="2000" countRef="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.limit"/>

If you specify both count and countRef , then countRef gets the priority. If countRef does not resolve at runtime, then the value of count is used.

ডিফল্ট: প্রযোজ্য নয়
উপস্থিতি: ঐচ্ছিক
প্রকার: পূর্ণসংখ্যা

বৈশিষ্ট্য

বৈশিষ্ট্য বর্ণনা ডিফল্ট উপস্থিতি
গণনা

Use to specify a message count for the quota.

For example, a count attribute value of 100, Interval of 1, and a TimeUnit of month specify a quota of 100 messages per month.

২০০০ ঐচ্ছিক
countRef

Use to specify a flow variable containing the message count for a quota. countRef takes precedence over the count attribute.

কোনোটিই না ঐচ্ছিক

<Allow>/<Class> element

The <Class> element lets you conditionalize the value of the <Allow> element based on the value of a flow variable. For each different <Allow> child tag of <Class> , the policy maintains a different counter.

To use the <Class> element, specify a flow variable using the ref attribute to the <Class> tag. Edge then uses the value of the flow variable to select one of the <Allow> child tags to determine the allowed count of the policy. Edge matches the value of the flow variable to the class attribute of the <Allow> tag, as shown below:

<Allow>
  <Class ref="request.queryparam.time_variable">
    <Allow class="peak_time" count="5000"/>
    <Allow class="off_peak_time" count="1000"/>
  </Class>
</Allow>

In this example, the current quota counter is determined by the value of the time_variable query param passed with each request. That variable can have a value of peak_time or off_peak_time . If the query param contains an invalid value, the policy returns a quota violation error.

ডিফল্ট: প্রযোজ্য নয়
উপস্থিতি: ঐচ্ছিক
প্রকার: প্রযোজ্য নয়

বৈশিষ্ট্য

বৈশিষ্ট্য বর্ণনা ডিফল্ট উপস্থিতি
রেফারেন্স

Use to specify a flow variable containing the quota class for a quota.

কোনোটিই না প্রয়োজনীয়

<Allow>/<Class>/<Allow> element

The <Allow> element specifies the limit for a quota counter defined by the <Class> element. For each different <Allow> child tag of <Class> , the policy maintains a different counter.

উদাহরণস্বরূপ:

<Allow>
  <Class ref="request.queryparam.time_variable">
    <Allow class="peak_time" count="5000"/>
    <Allow class="off_peak_time" count="1000"/>
  </Class>
</Allow>

In this example, the Quota policy maintains two quota counters named of peak_time and off_peak_time .

ডিফল্ট: প্রযোজ্য নয়
উপস্থিতি: ঐচ্ছিক
প্রকার: প্রযোজ্য নয়

বৈশিষ্ট্য

বৈশিষ্ট্য বর্ণনা ডিফল্ট উপস্থিতি
শ্রেণী

Defines the name of the quota counter.

কোনোটিই না প্রয়োজনীয়
গণনা Specifies the quota limit for the counter. কোনোটিই না প্রয়োজনীয়

<Interval> element

Use to specify an integer (for example, 1, 2, 5, 60, and so on) that will be paired with the TimeUnit you specify (minute, hour, day, week, or month) to determine a time period during which Edge calculates quota use.

For example, an Interval of 24 with a TimeUnit of hour means that the quota will be calculated over the course of 24 hours.

<Interval ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.interval">1</Interval>
ডিফল্ট: কোনোটিই না
উপস্থিতি: প্রয়োজনীয়
প্রকার: পূর্ণসংখ্যা

বৈশিষ্ট্য

বৈশিষ্ট্য বর্ণনা ডিফল্ট উপস্থিতি
রেফারেন্স

Use to specify a flow variable containing the interval for a quota. ref takes precedence over an explicit interval value. If both reference and value are specified, then reference gets the priority. If ref does not resolve at runtime, then the value is used.

কোনোটিই না ঐচ্ছিক

<TimeUnit> element

Use to specify the unit of time applicable to the quota.

For example, an Interval of 24 with a TimeUnit of hour means that the quota will be calculated over the course of 24 hours.

<TimeUnit ref="verifyapikey.VerifyAPIKey.apiproduct.developer.quota.timeunit">month</TimeUnit>
ডিফল্ট: কোনোটিই না
উপস্থিতি: প্রয়োজনীয়
প্রকার:

String. Select from minute , hour , day , week , or month .

বৈশিষ্ট্য

বৈশিষ্ট্য বর্ণনা ডিফল্ট উপস্থিতি
রেফারেন্স Use to specify a flow variable containing the time unit for a quota. ref takes precedence over an explicit interval value. If the ref does not resolve at runtime, then the value is used. কোনোটিই না ঐচ্ছিক

<StartTime> element

When type is set to calendar, specifies the date and time when the quota counter will begin counting, regardless of whether any requests have been received from any apps.

উদাহরণস্বরূপ:

<StartTime>2017-7-16 12:00:00</StartTime>
ডিফল্ট: কোনোটিই না
উপস্থিতি: Required when type is set to calendar .
প্রকার:

String in ISO 8601 date and time format.

<Distributed> element

An installation of Edge can use one or more Message Processors to process requests. Set this element to true to specify that the policy should maintain a central counter and continuously synchronize it across all Message Processors. The message processors can be across availability zones and/or regions.

If you use the default value of false , then you might exceed your quota because the count for each Message Processor is not shared:

<Distributed>true</Distributed>

To guarantee that the counters are synchronized, and updated on every request, set <Distributed> and <Synchronous> to true:

<Distributed>true</Distributed>
<Synchronous>true</Synchronous>
ডিফল্ট: মিথ্যা
উপস্থিতি: ঐচ্ছিক
প্রকার: বুলিয়ান

<Synchronous> element

Set to true to update a distributed quota counter synchronously. This means that the update to the counter are made at the same time the quota is checked on a request to the API. Set to true if it is essential that you not allow any API calls over the quota.

Set to false to update the quota counter asynchronously. This means that it is possible that some API calls exceeding the quota will go through, depending on when the quota counter in the central repository is asynchronously updated. However, you will not face the potential performance impacts associated with synchronous updates.

The default asynchronous update interval is 10 seconds. Use the AsynchronousConfiguration element to configure this asynchronous behavior.

<Synchronous>false</Synchronous>
ডিফল্ট: মিথ্যা
উপস্থিতি: ঐচ্ছিক
প্রকার: বুলিয়ান

<AsynchronousConfiguration> element

Configures the synchronization interval amongst distributed quota counters when the policy configuration element <Synchronous> is either not present or present and set to false .

You can synchronize either after a time period or a message count, using either the SyncIntervalInSeconds or SyncMessageCount child elements. They are mutually exclusive. For example,

<AsynchronousConfiguration>
   <SyncIntervalInSeconds>20</SyncIntervalInSeconds>
</AsynchronousConfiguration>

অথবা

<AsynchronousConfiguration>
   <SyncMessageCount>5</SyncMessageCount>
</AsynchronousConfiguration>
ডিফল্ট: SyncIntervalInSeconds = 10 seconds
উপস্থিতি: Optional; ignored when <Synchronous> is set to true .
প্রকার:

যৌগ

<AsynchronousConfiguration>/<SyncIntervalInSeconds> element

Use this to override the default behavior in which asynchronous updates are performed after an interval of 10 seconds.

<AsynchronousConfiguration>
   <SyncIntervalInSeconds>20</SyncIntervalInSeconds>
</AsynchronousConfiguration>

The sync interval must be >= 10 seconds as described in the Limits topic.

ডিফল্ট: ১০
উপস্থিতি: ঐচ্ছিক
প্রকার:

পূর্ণসংখ্যা

<AsynchronousConfiguration>/<SyncMessageCount> element

Specifies the number of requests across all Apigee message processors between quota updates.

<AsynchronousConfiguration>
   <SyncMessageCount>5</SyncMessageCount>
</AsynchronousConfiguration>

This example specifies that the quota count is updated every 5 requests across each Apigee Edge message processor.

ডিফল্ট: প্রযোজ্য নয়
উপস্থিতি: ঐচ্ছিক
প্রকার:

পূর্ণসংখ্যা

<Identifier> element

Use the <Identifier> element to configure the policy to create unique counters based on a flow variable.

You can create unique counters for characteristics defined by a flow variable. For example, you might use the developer email address to tie a quota to a specific developer. You can use a variety of variables to identify a quota, whether you're using custom variables or predefined variables, such as those available with the Verify API Key policy . See also the Variables reference .

If you don't use this element, the policy uses a single counter that is applied against the quota.

This element is also discussed in the following Apigee Community post: Quota identifier across different policies .

<Identifier ref="verifyapikey.verify-api-key.client_id"/>
ডিফল্ট: প্রযোজ্য নয়
উপস্থিতি: ঐচ্ছিক
প্রকার:

স্ট্রিং

বৈশিষ্ট্য

বৈশিষ্ট্য বর্ণনা ডিফল্ট উপস্থিতি
রেফারেন্স

Specifies a flow variable that identifies the counter to use for the request. The identifier can be an HTTP header, query parameter, form parameter, or message content that is unique to each app, app user, app developer, API product, or other characteristic.

The <Identifier> most commonly used to uniquely identify apps is the client_id . The client_id is another name for the API key, or consumer key, that is generated for an app when it is registered in an organization on Apigee Edge. You can use this identifier if you have enabled API key or OAuth authorization policies for your API.

In some circumstances, Quota settings must be retrieved where no client_id is available, such as when no security policy is in place. In those situations, you can use the Access Entity policy to retrieve the appropriate API product settings, then extract values using ExtractVariables, and then used the extracted context variable in the Quota policy. For more information, see Access Entity policy .

প্রযোজ্য নয় ঐচ্ছিক

<MessageWeight> element

Use to specify the weight assigned to each message. Use message weight to increase impact of request messages that, for example, consume more computational resources than others.

For example, you want to count POST messages as being twice as "heavy" or expensive, as GET messages. Therefore, you set the MessageWeight to 2 for a POST and 1 for a GET. You can even set the MessageWeight to 0 so the request does not affect the counter. In this example, if the quota is 10 messages per minute and the MessageWeight for POST requests is 2 , then the quota will permits 5 POST requests in any 10 minute interval. Any additional request, POST or GET, before the counter resets are rejected.

A value representing MessageWeight must be specified by a flow variable, and can be extracted from HTTP headers, query parameters, an XML or JSON request payload, or any other flow variable. For example, you set it in a header named weight :

<MessageWeight ref="message_weight"/>
ডিফল্ট: প্রযোজ্য নয়
উপস্থিতি: ঐচ্ছিক
প্রকার:

পূর্ণসংখ্যা

প্রবাহ পরিবর্তনশীল

The following predefined Flow variables are automatically populated when a Quota policy executes. For more information about Flow variables, see Variables reference .

ভেরিয়েবল প্রকার অনুমতি বর্ণনা
ratelimit.{policy_name}.allowed.count দীর্ঘ Read-Only Returns the allowed quota count
ratelimit.{policy_name}.used.count দীর্ঘ Read-Only Returns the current quota used within a quota interval
ratelimit.{policy_name}.available.count দীর্ঘ Read-Only Returns the available quota count in the quota interval
ratelimit.{policy_name}.exceed.count দীর্ঘ Read-Only Returns 1 after the quota is exceeded.
ratelimit.{policy_name}.total.exceed.count দীর্ঘ Read-Only Returns 1 after the quota is exceeded.
ratelimit.{policy_name}.expiry.time দীর্ঘ Read-Only

Returns the UTC time in milliseconds which determines when the quota expires and new quota interval starts.

When the Quota policy type is rollingwindow , this value is not valid because the quota interval never expires.

ratelimit.{policy_name}.identifier স্ট্রিং Read-Only Returns the (client) identifier reference attached to the policy
ratelimit.{policy_name}.class স্ট্রিং Read-Only Returns the class associated with the client identifier
ratelimit.{policy_name}.class.allowed.count দীর্ঘ Read-Only Returns the allowed quota count defined in the class
ratelimit.{policy_name}.class.used.count দীর্ঘ Read-Only Returns the used quota within a class
ratelimit.{policy_name}.class.available.count দীর্ঘ Read-Only Returns the available quota count in the class
ratelimit.{policy_name}.class.exceed.count দীর্ঘ Read-Only Returns the count of requests that exceeds the limit in the class in the current quota interval
ratelimit.{policy_name}.class.total.exceed.count দীর্ঘ Read-Only Returns the total count of requests that exceeds the limit in the class across all quota intervals, so it is the sum of class.exceed.count for all quota intervals.
ratelimit.{policy_name}.failed বুলিয়ান Read-Only

Indicates whether or not the policy failed (true or false).

ত্রুটির রেফারেন্স

এই বিভাগটি ফল্ট কোড এবং ত্রুটি বার্তাগুলি বর্ণনা করে যেগুলি ফেরত দেওয়া হয় এবং ত্রুটি ভেরিয়েবলগুলি যেগুলি এজ দ্বারা সেট করা হয় যখন এই নীতিটি একটি ত্রুটি ট্রিগার করে৷ এই তথ্যটি জানা গুরুত্বপূর্ণ যে আপনি ত্রুটিগুলি পরিচালনা করার জন্য ত্রুটির নিয়ম তৈরি করছেন কিনা। আরও জানতে, নীতিগত ত্রুটি এবং হ্যান্ডলিং ফল্ট সম্পর্কে আপনার যা জানা দরকার তা দেখুন৷

রানটাইম ত্রুটি

নীতি কার্যকর করার সময় এই ত্রুটিগুলি ঘটতে পারে৷

ফল্ট কোড HTTP স্থিতি কারণ ঠিক করুন
policies.ratelimit.FailedToResolveQuotaIntervalReference 500 কোটা নীতির মধ্যে <Interval> উপাদানটি সংজ্ঞায়িত না হলে ঘটে। এই উপাদানটি বাধ্যতামূলক এবং কোটার জন্য প্রযোজ্য সময়ের ব্যবধান নির্দিষ্ট করতে ব্যবহৃত হয়। সময়ের ব্যবধান মিনিট, ঘন্টা, দিন, সপ্তাহ বা মাস হতে পারে যেমন <TimeUnit> উপাদানের সাথে সংজ্ঞায়িত করা হয়েছে।
policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference 500 কোটা নীতির মধ্যে <TimeUnit> উপাদানটি সংজ্ঞায়িত না হলে ঘটে। এই উপাদানটি বাধ্যতামূলক এবং কোটার ক্ষেত্রে প্রযোজ্য সময়ের একক নির্দিষ্ট করতে ব্যবহৃত হয়। সময়ের ব্যবধান মিনিট, ঘন্টা, দিন, সপ্তাহ বা মাসে হতে পারে।
policies.ratelimit.InvalidMessageWeight 500 একটি ফ্লো ভেরিয়েবলের মাধ্যমে নির্দিষ্ট করা <MessageWeight> উপাদানটির মানটি অবৈধ হলে (একটি অ-পূর্ণসংখ্যা মান) ঘটে।
policies.ratelimit.QuotaViolation 500 কোটার সীমা ছাড়িয়ে গেছে। N/A

স্থাপনার ত্রুটি

ত্রুটির নাম কারণ ঠিক করুন
InvalidQuotaInterval যদি <Interval> উপাদানে উল্লেখ করা কোটা ব্যবধানটি একটি পূর্ণসংখ্যা না হয়, তাহলে API প্রক্সির স্থাপনা ব্যর্থ হয়। উদাহরণস্বরূপ, যদি <Interval> উপাদানে উল্লেখিত কোটা ব্যবধান 0.1 হয়, তাহলে API প্রক্সির স্থাপনা ব্যর্থ হয়।
InvalidQuotaTimeUnit যদি <TimeUnit> উপাদানে নির্দিষ্ট সময় ইউনিট অসমর্থিত হয়, তাহলে API প্রক্সির স্থাপনা ব্যর্থ হয়। সমর্থিত সময়ের একক হল minute , hour , day , week এবং month
InvalidQuotaType যদি <Quota> উপাদানে type অ্যাট্রিবিউট দ্বারা নির্দিষ্ট করা কোটার ধরনটি অবৈধ হয়, তাহলে API প্রক্সির স্থাপনা ব্যর্থ হয়। সমর্থিত কোটার প্রকারগুলি হল default , calendar , flexi এবং rollingwindow
InvalidStartTime যদি <StartTime> উপাদানে নির্দিষ্ট সময়ের বিন্যাসটি অবৈধ হয়, তাহলে API প্রক্সির স্থাপনা ব্যর্থ হয়। বৈধ বিন্যাস হল yyyy-MM-dd HH:mm:ss , যা ISO 8601 তারিখ এবং সময় বিন্যাস৷ উদাহরণস্বরূপ, যদি <StartTime> উপাদানে নির্দিষ্ট সময় 7-16-2017 12:00:00 হয় তাহলে API প্রক্সির স্থাপনা ব্যর্থ হয়।
StartTimeNotSupported যদি <StartTime> উপাদানটি নির্দিষ্ট করা হয় যার কোটার ধরন calendar প্রকার নয়, তাহলে API প্রক্সির স্থাপনা ব্যর্থ হয়। <StartTime> উপাদানটি শুধুমাত্র calendar কোটার প্রকারের জন্য সমর্থিত। উদাহরণস্বরূপ, যদি type অ্যাট্রিবিউটটি <Quota> এলিমেন্টে flexi বা rolling window সেট করা থাকে, তাহলে API প্রক্সির স্থাপনা ব্যর্থ হয়।
InvalidTimeUnitForDistributedQuota যদি <Distributed> উপাদানটি true সেট করা হয় এবং <TimeUnit> উপাদানটি second সেট করা হয় তবে API প্রক্সির স্থাপনা ব্যর্থ হয়। টাইমইউনিট second একটি বিতরণ করা কোটার জন্য অবৈধ৷
InvalidSynchronizeIntervalForAsyncConfiguration যদি একটি কোটা নীতিতে <SyncIntervalInSeconds> উপাদানের <AsynchronousConfiguration> উপাদানের জন্য নির্দিষ্ট করা মান শূন্যের কম হয়, তাহলে API প্রক্সির স্থাপনা ব্যর্থ হয়।
InvalidAsynchronizeConfigurationForSynchronousQuota যদি <AsynchronousConfiguration> > উপাদানটির মান একটি কোটা নীতিতে true হিসাবে সেট করা হয়, যেটিতে <AsynchronousConfiguration> > উপাদান ব্যবহার করে সংজ্ঞায়িত অ্যাসিঙ্ক্রোনাস কনফিগারেশনও রয়েছে, তাহলে API প্রক্সির স্থাপনা ব্যর্থ হয়।

ফল্ট ভেরিয়েবল

যখন এই নীতি একটি ত্রুটি ট্রিগার করে তখন এই ভেরিয়েবলগুলি সেট করা হয়৷ আরও তথ্যের জন্য, নীতি ত্রুটি সম্পর্কে আপনার যা জানা দরকার তা দেখুন।

ভেরিয়েবল যেখানে উদাহরণ
fault.name=" fault_name " fault_name হল ফল্টের নাম, যা উপরে রানটাইম ত্রুটির সারণীতে তালিকাভুক্ত করা হয়েছে। ফল্ট নামটি ফল্ট কোডের শেষ অংশ। fault.name Matches "QuotaViolation"
ratelimit. policy_name .failed policy_name হল সেই নীতির ব্যবহারকারী-নির্দিষ্ট নাম যা ত্রুটিটি ফেলেছে। ratelimit.QT-QuotaPolicy.failed = true

উদাহরণ ত্রুটি প্রতিক্রিয়া

{  
   "fault":{  
      "detail":{  
         "errorcode":"policies.ratelimit.QuotaViolation"
      },
      "faultstring":"Rate limit quota violation. Quota limit  exceeded. Identifier : _default"
   }
}

উদাহরণ দোষ নিয়ম

<FaultRules>
    <FaultRule name="Quota Errors">
        <Step>
            <Name>JavaScript-1</Name>
            <Condition>(fault.name Matches "QuotaViolation") </Condition>
        </Step>
        <Condition>ratelimit.Quota-1.failed=true</Condition>
    </FaultRule>
</FaultRules>

স্কিমা

সম্পর্কিত বিষয়

ResetQuota policy

স্পাইকঅ্যারেস্ট নীতি

Comparing Quota, Spike Arrest, and Concurrent Rate Limit Policies