অ্যান্টি-প্যাটার্ন: ডিস্ট্রিবিউট করা হয়নি এমন কোটা কনফিগার করা

আপনি Apigee Edge ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন দেখুন।
তথ্য

Apigee Edge, কোটা নীতি ব্যবহার করে নির্দিষ্ট সময়ের জন্য API প্রক্সিতে অনুমোদিত অনুরোধের সংখ্যা কনফিগার করার সুবিধা দেয়।

অ্যান্টিপ্যাটার্ন

API প্রক্সি অনুরোধ এক বা একাধিক ডিস্ট্রিবিউট করা Edge কম্পোনেন্ট দ্বারা পরিবেশন করা যেতে পারে, যাকে মেসেজ প্রসেসর বলা হয়। API অনুরোধ পরিবেশন করার জন্য একাধিক মেসেজ প্রসেসর কনফিগার করা থাকলে, কোটা সম্ভবত অতিক্রম করা হবে কারণ প্রতিটি মেসেজ প্রসেসর তার নিজস্ব "গণনা" রাখে।

আসুন, একটি উদাহরণের সাহায্যে এটি ব্যাখ্যা করা যাক। API প্রক্সি সার্ভারের জন্য নিম্নলিখিত কোটা নীতি বিবেচনা করুন:

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

উপরের কনফিগারেশন অনুযায়ী, প্রতি ঘণ্টায় মোট ১০০টি অনুরোধ করা যাবে।

তবে, বাস্তবে, একাধিক মেসেজ প্রসেসর এপিআই অনুরোধ পরিবেশন করলে, নিম্নলিখিত ঘটনাগুলি ঘটে:

উপরের ছবিতে:

  • কোটা নীতি প্রতি ঘণ্টায় ১০০টি অনুরোধ অনুমোদন করার জন্য কনফিগার করা হয়েছে।
  • দুটি মেসেজ প্রসেসর API প্রক্সি সংক্রান্ত অনুরোধ পরিবেশন করছে।
  • প্রতিটি মেসেজ প্রসেসর, quota_count_mp1 এবং quota_count_mp2, কোটার সংখ্যা ট্র্যাক করার জন্য নিজস্ব কোটা কাউন্ট ভেরিয়েবল বজায় রাখে।
  • তাই, প্রতিটি মেসেজ প্রসেসর আলাদাভাবে ১০০টি API অনুরোধ গ্রহণ করবে। এর ফলে মোট ২০০টি অনুরোধ প্রসেস করা হয়, ১০০টি নয়।

প্রভাব

এই পরিস্থিতি কোটা কনফিগারেশনের উদ্দেশ্যকে ব্যর্থ করে এবং অনুরোধ পরিবেশন করা ব্যাকএন্ড সার্ভারের উপর ক্ষতিকর প্রভাব ফেলতে পারে।

ব্যাকএন্ড সার্ভার এগুলি করতে পারে:

  • প্রত্যাশিত ট্রাফিকের চেয়ে বেশি ট্রাফিক আসার কারণে চাপ পড়তে পারে
  • নতুন API অনুরোধের উত্তর না দেওয়া, যার ফলে 503 সমস্যা হয়

পেশাদার পদ্ধতি

কোটা নীতিতে <Distributed> এলিমেন্টকে true হিসেবে সেট করার কথা বিবেচনা করুন, যাতে সব মেসেজ প্রসেসর জুড়ে API অনুরোধ ট্র্যাক করার জন্য একটি সাধারণ কাউন্টার ব্যবহার করা হয়। নিচে দেওয়া কোড স্নিপেটে দেখানো হয়েছে যে কীভাবে <Distributed> এলিমেন্ট সেট করা যায়:

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