الگوی بد: پیکربندی سهمیه غیرتوزیع‌شده

درحال مشاهده اسناد Apigee Edge هستید.
به اسناد Apigee X بروید.
اطلاعات

‫Apigee Edge امکان پیکربندی تعداد درخواست‌های مجاز به «پراکسی میانای برنامه‌سازی کاربردی» را برای یک دوره زمانی مشخص بااستفاده از خط‌مشی سهمیه فراهم می‌کند.

الگوی بد

درخواست پراکسی API می‌تواند توسط یک یا چند مؤلفه توزیع‌شده Edge که پردازشگر پیام نامیده می‌شوند، ارائه شود. اگر چندین «پردازنده پیام» برای ارائه درخواست‌های API پیکربندی شده باشد، احتمالاً از سهمیه فراتر خواهید رفت زیرا هر «پردازنده پیام» «تعداد» درخواست‌هایی را که پردازش می‌کند به‌طور جداگانه نگه می‌دارد.

بیایید این را با کمک یک مثال توضیح دهیم. خط‌مشی سهمیه زیر را برای یک پراکسی میانای برنامه‌سازی کاربردی درنظر بگیرید:

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

پیکربندی بالا باید در مجموع ۱۰۰ درخواست در ساعت را مجاز کند.

بااین‌حال، در عمل، وقتی چندین پردازشگر پیام درخواست‌های API را ارائه می‌دهند، اتفاق زیر می‌افتد:

در تصویر بالا:

  • خط‌مشی سهمیه برای اجازه دادن به ۱۰۰ درخواست در ساعت پیکربندی شده است.
  • درخواست‌های «پراکسی API» توسط دو «پردازشگر پیام» ارائه می‌شود.
  • هر «پردازشگر پیام» متغیر شمارش سهمیه خود، quota_count_mp1 و quota_count_mp2، را برای پیگیری تعداد درخواست‌هایی که پردازش می‌کند حفظ می‌کند.
  • بنابراین هریک از «پردازشگرهای پیام» به‌طور جداگانه ۱۰۰ درخواست API را مجاز می‌کند. نتیجه خالص این است که به‌جای ۱۰۰ درخواست، مجموعاً ۲۰۰ درخواست پردازش می‌شود.

تأثیر

این وضعیت هدف پیکربندی سهمیه را ازبین می‌برد و می‌تواند تأثیرات مخربی بر سرورهای پشتیبان که درخواست‌ها را ارائه می‌کنند داشته باشد.

سرورهای زیرینه می‌توانند:

  • به‌دلیل ترافیک ورودی بالاتر از حد انتظار تحت فشار قرار گیرد
  • به درخواست‌های جدیدتر API پاسخ نمی‌دهد و منجر به خطاهای ۵۰۳ می‌شود

روال مطلوب

در خط‌مشی سهمیه، عنصر <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>