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

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

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

ضدالگو

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

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

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

پیکربندی فوق باید در مجموع ۱۰۰ درخواست در ساعت را امکان‌پذیر کند.

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

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

  • سیاست سهمیه‌بندی طوری پیکربندی شده است که اجازه ۱۰۰ درخواست در ساعت را بدهد.
  • درخواست‌های ارسالی به API Proxy توسط دو پردازنده پیام (Message Processor) ارائه می‌شوند.
  • هر پردازشگر پیام، متغیر شمارش سهمیه مخصوص به خود، quota_count_mp1 و quota_count_mp2 را برای ردیابی تعداد درخواست‌هایی که پردازش می‌کند، نگهداری می‌کند.
  • بنابراین هر یک از پردازنده‌های پیام، ۱۰۰ درخواست API را به طور جداگانه پردازش می‌کنند. نتیجه نهایی این است که به جای ۱۰۰ درخواست، در مجموع ۲۰۰ درخواست پردازش می‌شوند.

تأثیر

این وضعیت هدف پیکربندی سهمیه‌بندی را نقض می‌کند و می‌تواند اثرات مخربی بر سرورهای backend که به درخواست‌ها پاسخ می‌دهند، داشته باشد.

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

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

بهترین روش

در نظر بگیرید که عنصر <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>