Antipattern: پیکربندی سهمیه غیر توزیع شده

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

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

ضد الگو

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

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

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

پیکربندی فوق باید در مجموع 100 درخواست در ساعت را مجاز کند.

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

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

  • خط مشی سهمیه به گونه ای پیکربندی شده است که 100 درخواست در ساعت مجاز باشد.
  • درخواست‌ها به پروکسی API توسط دو پردازشگر پیام ارائه می‌شوند.
  • هر پردازشگر پیام، متغیر تعداد سهمیه خود، quota_count_mp1 و quota_count_mp2 را برای ردیابی تعداد درخواست‌هایی که در حال پردازش هستند، حفظ می‌کند.
  • بنابراین هر یک از پردازشگر پیام 100 درخواست API را به طور جداگانه اجازه می دهد. اثر خالص این است که در مجموع 200 درخواست به جای 100 درخواست پردازش می شود.

تاثیر

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

سرورهای پشتیبان می توانند:

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

بهترین تمرین

در نظر بگیرید، عنصر <Distributed> را در خط مشی Quota روی true تنظیم کنید تا اطمینان حاصل شود که یک شمارنده مشترک برای ردیابی درخواست های API در همه پردازشگرهای پیام استفاده می شود. عنصر <Distributed> را می توان همانطور که در قطعه کد زیر نشان داده شده است تنظیم کرد:

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