আপনি Apigee Edge ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন দেখুন। তথ্য
Apigee Edge, কোটা নীতি ব্যবহার করে নির্দিষ্ট সময়ের জন্য API প্রক্সির ক্ষেত্রে অনুমোদিত অনুরোধের সংখ্যা কনফিগার করার সুবিধা দেয়।
অ্যান্টিপ্যাটার্ন
কোনও কোটা নীতি আবার ব্যবহার করা হলে, কোটা কাউন্টারটি প্রতিটি ক্ষেত্রে কমে যাবে কোটা নীতিটি যেখানেই ব্যবহার করা হোক না কেন। অর্থাৎ, কোটা সংক্রান্ত নীতি আবার ব্যবহার করা হলে:
- API প্রক্সির একই ফ্লো বা আলাদা আলাদা ফ্লোয়ের মধ্যে
- API প্রক্সির বিভিন্ন টার্গেট এন্ডপয়েন্টে
তারপরে, কোটা কাউন্টারটি যতবার এটি এক্সিকিউট করা হয় ততবার কমে যায় এবং আমরা নির্দিষ্ট সময়ের ব্যবধির জন্য প্রত্যাশিত সময়ের অনেক আগেই কোটা লঙ্ঘন সংক্রান্ত এরর দেখতে পাব।
এটি কীভাবে কাজ করে তা ব্যাখ্যা করতে, নিম্নলিখিত উদাহরণটি ব্যবহার করা যাক।
API প্রক্সি
ধরা যাক, আমাদের "TestTargetServerQuota" নামে একটি API প্রক্সি আছে, যা রিসোর্স পাথের উপর ভিত্তি করে দুটি আলাদা টার্গেট সার্ভারে ট্রাফিক রাউট করে। এছাড়াও, আমরা প্রতিটি টার্গেট সার্ভারের জন্য API ট্রাফিক প্রতি মিনিটে ১০টি অনুরোধে সীমাবদ্ধ রাখতে চাই। এই টেবিলটি এই দৃশ্যকল্পকে তুলে ধরে:
| রিসোর্স পাথ | টার্গেট সার্ভার | কোটা |
|---|---|---|
/target-us |
target-US.somedomain.com |
প্রতি মিনিটে ১০টি অনুরোধ |
/target-eu |
target-EU.somedomain.com |
প্রতি মিনিটে ১০টি অনুরোধ |
কোটা সংক্রান্ত নীতি
যেহেতু দুটি টার্গেট সার্ভারের জন্য ট্রাফিক কোটা একই, তাই আমরা একটি কোটা নীতি নির্ধারণ করি যার নাম "কোটা-মিনিট-টার্গেট-সার্ভার" যা নিচে দেখানো হয়েছে:
<!-- /antipatterns/examples/1-8.xml --> <Quota name="Quota-Minute-Target-Server"> <Interval>1</Interval> <TimeUnit>minute</TimeUnit> <Distributed>true</Distributed> <Allow count="10"/> </Quota>
টার্গেট এন্ডপয়েন্ট
টার্গেট এন্ডপয়েন্টের প্রিফ্লোতে <0x0A>“Target-US” কোটা নীতি “Quota-Minute-Target-Server” ব্যবহার করা যাক:
<!-- /antipatterns/examples/1-9.xml --> <TargetEndpoint name="Target-US"> <PreFlow name="PreFlow"> <Request> <Step> <Name>Quota-Minute-Target-Server</Name> </Step> </Request> </PreFlow> <HTTPTargetConnection> <URL>http://target-us.somedomain.com</URL> </HTTPTargetConnection> </TargetEndpoint>
এছাড়াও, অন্য টার্গেট এন্ডপয়েন্ট “Target-EU”-এর প্রিফ্লোতে একই কোটা নীতি “Quota-Minute-Target-Server” আবার ব্যবহার করুন:
<!-- /antipatterns/examples/1-10.xml --> <TargetEndpoint name="Target-EU"> <PreFlow name="PreFlow"> <Request> <Step> <Name>Quota-Minute-Target-Server</Name> </Step> </Request> <Response/> </PreFlow> <HTTPTargetConnection> <URL>http://target-us.somedomain.com</URL> </HTTPTargetConnection> </TargetEndpoint>
ইনকামিং ট্রাফিক প্যাটার্ন
ধরা যাক, আমরা এই API প্রক্সির জন্য প্রথম ৩০ সেকেন্ডের মধ্যে মোট ১০টি API অনুরোধ পেয়েছি যেগুলি নিম্নলিখিত প্যাটার্নে এসেছে:
| রিসোর্স পাথ | /target-us |
/target-eu |
সব |
|---|---|---|---|
| # অনুরোধ | 4 | 6 | 10 |
কিছুক্ষণ পরে, আমরা /target-us রিসোর্স পাথ সহ ১১তম API অনুরোধ পাই,
ধরা যাক ৩২ সেকেন্ড পরে।
আমরা আশা করি যে অনুরোধটি সফলভাবে সম্পন্ন হবে, কারণ কোটা অনুযায়ী টার্গেট এন্ডপয়েন্ট target-us-এর জন্য
আমাদের কাছে এখনও ৬টি API অনুরোধ বাকি আছে।
তবে, বাস্তবে আমরা Quota violation error পাই।
কারণ: যেহেতু আমরা দুটি টার্গেট এন্ডপয়েন্টে একই কোটা নীতি ব্যবহার করছি, তাই দুটি টার্গেট এন্ডপয়েন্টে আসা API অনুরোধ ট্র্যাক করার জন্য একটি কোটা কাউন্টার ব্যবহার করা হয়। তাই আমরা ব্যক্তিগত টার্গেট এন্ডপয়েন্টের জন্য নয়, বরং সামগ্রিকভাবে প্রতি মিনিটে ১০টি অনুরোধের কোটা শেষ করে ফেলি।
প্রভাব
এই অ্যান্টিপ্যাটার্নটি প্রত্যাশার মৌলিক অমিল ঘটাতে পারে, যার ফলে এই ধারণা তৈরি হতে পারে যে কোটা সীমা নির্ধারিত সময়ের আগেই শেষ হয়ে গেছে।
পেশাদার পদ্ধতি
- একাধিক,
অনন্য কাউন্টার যাতে বজায় থাকে তা নিশ্চিত করতে
<Class>বা<Identifier>এলিমেন্ট ব্যবহার করুন। এটি একটি কোটা নীতি নির্ধারণ করে করা হয়। আসুন, আমরা আগের বিভাগে যে কোটা নীতি “কোটা-মিনিট-টার্গেট-সার্ভার” ব্যাখ্যা করেছি, তা নিচে দেখানোtarget_id-এর<Identifier>হিসেবে হেডার ব্যবহার করে নতুন করে সংজ্ঞায়িত করি:<!-- /antipatterns/examples/1-11.xml --> <Quota name="Quota-Minute-Target-Server"> <Interval>1</Interval> <TimeUnit>minute</TimeUnit> <Allow count="10"/> <Identifier ref="request.header.target_id"/> <Distributed>true</Distributed> </Quota>
- আমরা আগে যেভাবে এই কোটা নীতি টার্গেট এন্ডপয়েন্ট “Target-US” এবং “Target-EU”-তে ব্যবহার করতাম, সেভাবেই ব্যবহার করা চালিয়ে যাব।
- এখন, ধরে নিন যে হেডার
target_id-এর ভ্যালু “US” হলে, অনুরোধগুলি “Target-US” টার্গেট এন্ডপয়েন্টে রাউট করা হবে। - একইভাবে, হেডার
target_id-এর ভ্যালু “EU” হলে, অনুরোধগুলি “Target-EU” টার্গেট এন্ডপয়েন্টে রাউট করা হয়। - তাই, আমরা যদি টার্গেট এন্ডপয়েন্টে একই কোটা নীতি ব্যবহার করি, তাহলেও
<Identifier>ভ্যালুর উপর ভিত্তি করে আলাদা কোটা কাউন্টার মেইনটেন করা হয়। - তাই,
<Identifier>এলিমেন্ট ব্যবহার করে আমরা নিশ্চিত করতে পারি যে প্রতিটি টার্গেট এন্ডপয়েন্ট ১০টি অনুরোধের অনুমোদিত কোটা পাবে।
- প্রতিটি ফ্লো/টার্গেট এন্ডপয়েন্ট/API প্রক্সিতে আলাদা আলাদা কোটা নীতি ব্যবহার করে নিশ্চিত করুন যে আপনি
সর্বদা API অনুরোধের অনুমোদিত সংখ্যা পাবেন। উপরে উল্লিখিত
একই উদাহরণ ব্যবহার করে দেখা যাক যে কীভাবে আমরা প্রতিটি টার্গেট
এন্ডপয়েন্টের জন্য অনুমোদিত কোটা অর্থাৎ ১০টি অনুরোধ পূরণ করতে পারি।
- আলাদা কোটা নীতি নির্ধারণ করুন, একটি "Target-US" এবং
"Target-EU" টার্গেট এন্ডপয়েন্টের জন্য
টার্গেট এন্ডপয়েন্ট “Target-US”-এর জন্য কোটা সংক্রান্ত নীতি:
<!-- /antipatterns/examples/1-12.xml --> <Quota name="Quota-Minute-Target-Server-US"> <Interval>1</Interval> <TimeUnit>minute</TimeUnit> <Distributed>true</Distributed> <Allow count="10"/> </Quota>
টার্গেট এন্ডপয়েন্ট “Target-EU”-এর জন্য কোটা সংক্রান্ত নীতি:
<!-- /antipatterns/examples/1-13.xml --> <Quota name="Quota-Minute-Target-Server-EU"> <Interval>1</Interval> <TimeUnit>minute</TimeUnit> <Distributed>true</Distributed> <Allow count="10"/> </Quota>
- নিচে দেখানো টার্গেট এন্ডপয়েন্টের সংজ্ঞায় সংশ্লিষ্ট কোটা নীতি ব্যবহার করুন:
টার্গেট এন্ডপয়েন্ট “Target-US”:
<!-- /antipatterns/examples/1-14.xml --> <TargetEndpoint name="Target-US"> <PreFlow name="PreFlow"> <Request> <Step> <Name>Quota-Minute-Target-Server-US</Name> </Step> </Request> <Response/> </PreFlow> <HTTPTargetConnection> <URL>http://target-us.somedomain.com</URL> </HTTPTargetConnection> </TargetEndpoint>
টার্গেট এন্ডপয়েন্ট “Target-EU”:
<!-- /antipatterns/examples/1-15.xml --> <TargetEndpoint name="Target-EU"> <PreFlow name="PreFlow"> <Request> <Step> <Name>Quota-Minute-Target-Server-EU</Name> </Step> </Request> <Response/> </PreFlow> <HTTPTargetConnection> <URL>http://target-eu.somedomain.com</URL> </HTTPTargetConnection> </TargetEndpoint>
- যেহেতু আমরা টার্গেট এন্ডপয়েন্ট “Target-US” এবং “Target-EU”-তে আলাদা কোটা নীতি ব্যবহার করছি, তাই আলাদা কাউন্টার বজায় রাখা হবে। এর ফলে আমরা প্রতিটি টার্গেট এন্ডপয়েন্টের জন্য অনুমোদিত কোটা হিসেবে প্রতি মিনিটে ১০টি API অনুরোধ পাই।
- আলাদা কোটা নীতি নির্ধারণ করুন, একটি "Target-US" এবং
"Target-EU" টার্গেট এন্ডপয়েন্টের জন্য
- একাধিক, অনন্য কাউন্টার বজায় রাখা নিশ্চিত করতে
<Class>বা<Identifier>এলিমেন্ট ব্যবহার করুন।