تحديد معدل المكالمة حسب المفتاح

ينطبق على: المطور | أساسي | الإصدار 2 الأساسي | قياسي | الإصدار 2 القياسي | بريميوم

يمنع نهج rate-limit-by-key طفرات استخدام واجهة برمجة التطبيقات على أساس المفتاح عن طريق الحدّ من معدل الاستدعاء لرقم محدد لكل فترة زمنية محددة. يمكن أن يتضمن المفتاح قيمة سلسلة إجبارية، ويتم توفيرها عادةً باستخدام التعبير عن النهج. يمكن إضافة شرط الزيادة الاختيارية لتحديد الطلبات التي ينبغي حسابها ضمن الحد. عند تجاوز معدل الاستدعاء، يتلقى المتصل التعليمة البرمجية 429 Too Many Requests لحالة الاستجابة.

لفهم الفرق بين حدود المعدلات والحصص، راجع حدود المعدلات والحصص النسبية.

تنبيه

نظرًا للطبيعة الموزعة للهندسة المعمارية ذات التقييد، فإن الحد من المعدل ليس دقيقًا تمامًا. يختلف الاختلاف بين العدد الذي تم تكوينه والعدد الفعلي للطلبات المسموح بها بناءً على حجم الطلب وسعره وزمن انتقال الخلفية وعوامل أخرى.

إشعار

تعيين عناصر النهج والعناصر التابعة بالترتيب الوارد في بيان النهج. لمساعدتك في تكوين هذا النهج، يتيح المدخل محررًا موجهًا يستند إلى النموذج. تعلم كيفية إعداد نُهج APIM أو تعديلها.

نهج السياسة

<rate-limit-by-key calls="number"
                   renewal-period="seconds"
                   increment-condition="condition"
                   increment-count="number"
                   counter-key="key value" 
                   retry-after-header-name="custom header name, replaces default 'Retry-After'" 
                   retry-after-variable-name="policy expression variable name"
                   remaining-calls-header-name="header name"  
                   remaining-calls-variable-name="policy expression variable name"
                   total-calls-header-name="header name"/> 

سمات

السمة ‏‏الوصف مطلوبة افتراضي
calls الحد الأقصى لإجمالي عدد الاستدعاءات المسموح بها لقيمة المفتاح أثناء الفاصل الزمني المحدد في renewal-period. يتم السماح بتعبيرات النهج. ‏‏نعم‬ غير متوفر
counter-key المفتاح الذي يجب استخدامه لنهج حدّ المعدل. لكل قيمة مفتاح، يتم استخدام عداد واحد لجميع النطاقات التي يتم تكوين النهج بها. يتم السماح بتعبيرات النهج. ‏‏نعم‬ غير متوفر
increment-condition التعبير المنطقي الذي يحدد ما إذا كان يجب حساب الطلب نحو المعدل (true). يتم السماح بتعبيرات النهج. لا ‏‫غير متاح
زيادة العد الرقم الذي يتم من خلاله زيادة العداد لكل طلب. يتم السماح بتعبيرات النهج. لا 1
renewal-period الطول محسوبًا بالثواني للنافذة المنزلقة التي خلالها ينبغي ألا يتجاوز عدد الطلبات المسموح بها القيمة المحددة في calls. الحد الأقصى للقيمة المسموح بها: 300 ثانية. يتم السماح بتعبيرات النهج. ‏‏نعم‬ غير متوفر
retry-after-header-name اسم عنوان استجابة مخصص قيمته هي الفاصل الزمني الموصى به لإعادة المحاولة بالثوان بعد تجاوز معدل الاستدعاء المحدد لقيمة المفتاح. تعبيرات النهج غير مسموح بها. لا Retry-After
retry-after-variable-name اسم متغير تعبير النهج الذي يخزن الفاصل الزمني لإعادة المحاولة الموصى به بالثوان بعد تجاوز معدل الاستدعاء المحدد لقيمة المفتاح. تعبيرات النهج غير مسموح بها. لا ‏‫غير متاح
remaining-calls-header-name اسم عنوان الاستجابة الذي تكون قيمته بعد كل تنفيذ نهج هو عدد الاستدعاءات المتبقية المسموح بها لقيمة المفتاح في الفاصل الزمني المحدد في renewal-period. تعبيرات النهج غير مسموح بها. لا ‏‫غير متاح
remaining-calls-variable-name اسم متغير تعبير النهج الذي بعد كل تنفيذ نهج يخزن عدد الاستدعاءات المتبقية المسموح بها لقيمة المفتاح في الفاصل الزمني المحدد في renewal-period. تعبيرات النهج غير مسموح بها. لا ‏‫غير متاح
total-calls-header-name اسم عنوان الاستجابة الذي تكون قيمته هي القيمة المحددة في calls. تعبيرات النهج غير مسموح بها. لا ‏‫غير متاح

الاستخدام

ملاحظات الاستخدام

  • تستخدم API Management عدادا واحدا لكل counter-key قيمة تحددها في النهج. يتم تحديث العداد في جميع النطاقات التي يتم فيها تكوين النهج بقيمة المفتاح هذه. إذا كنت ترغب في تكوين عدادات منفصلة في نطاقات مختلفة (على سبيل المثال، واجهة برمجة تطبيقات أو منتج معين)، فحدد قيم مفاتيح مختلفة في النطاقات المختلفة. على سبيل المثال، إلحاق سلسلة تعرف النطاق بقيمة تعبير.
  • يمكن تكوين عدد حدود المعدلات في بوابة مستضافة ذاتيا للمزامنة محليا (بين مثيلات البوابة عبر عقد نظام المجموعة)، على سبيل المثال، من خلال نشر مخطط Helm ل Kubernetes أو باستخدام قوالب توزيع مدخل Azure. ومع ذلك، لا تتم مزامنة عدد حدود المعدل مع موارد البوابة الأخرى التي تم تكوينها في مثيل APIM، بما في ذلك البوابة المدارة في السحابة. معرفة المزيد

مثال

في المثال التالي، يتم تحديد مفتاح الحد الأقصى لمعدل الاستدعاء وهو 10 مكالمات لكل 60 ثانية بواسطة عنوان IP المتصل. بعد كل تنفيذ نهج، يتم تخزين الاستدعاءات المتبقية المسموح بها لعنوان IP المتصل هذا في الفترة الزمنية في المتغير remainingCallsPerIP.

<policies>
    <inbound>
        <base />
        <rate-limit-by-key calls="10"
              renewal-period="60"
              increment-condition="@(context.Response.StatusCode == 200)"
              counter-key="@(context.Request.IpAddress)"
              remaining-calls-variable-name="remainingCallsPerIP"/>
    </inbound>
    <outbound>
        <base />
    </outbound>
</policies>

للحصول على مزيدٍ من المعلومات والأمثلة على هذا النهج، راجع تقييد الطلب المتقدم باستخدام APIM في Azure.

لمزيد من المعلومات حول العمل مع النُهج، راجع: