التشغيل السريع: تعيين حدود معدل الطلب

إشعار

يعد Azure Spring Apps هو الاسم الجديد لخدمة Azure Spring Cloud. رغم أن الخدمة تحمل اسماً جديداً، سترى الاسم القديم في بعض الأماكن لفترة من الوقت بينما نعمل على تحديث الأصول مثل لقطات الشاشة، ومقاطع الفيديو، والرسوم التخطيطية.

تنطبق هذه المقالة على:❌ Basic/Standard ✔️ Enterprise

يوضح لك هذا التشغيل السريع كيفية تعيين حدود معدل الطلب باستخدام Spring Cloud Gateway على خطة Azure Spring Apps Enterprise.

يتيح لك تحديد المعدل تجنب المشاكل التي تنشأ مع الارتفاعات في نسبة استخدام الشبكة. عند تعيين حدود معدل الطلب، يمكن لتطبيقك رفض الطلبات المفرطة. يساعدك هذا التكوين على تقليل أخطاء التقييد والتنبؤ بشكل أكثر دقة معدل النقل.

المتطلبات الأساسية

تعيين حدود معدل الطلب

تتضمن Spring Cloud Gateway عوامل تصفية التوجيه من إصدار المصدر المفتوح والعديد من عوامل تصفية التوجيه. أحد عوامل التصفية هذه هو عامل تصفية RateLimit: تقييد طلبات المستخدم. يحدد عامل التصفية RateLimit عدد الطلبات المسموح بها لكل مسار خلال نافذة زمنية.

عند تعريف مسار، يمكنك إضافة عامل التصفية RateLimit عن طريق تضمينه في قائمة عوامل التصفية للمسار. يقبل عامل التصفية أربعة خيارات:

  • عدد الطلبات المقبولة أثناء النافذة.
  • مدة النافذة. تكون هذه القيمة بالمللي ثانية بشكل افتراضي، ولكن يمكنك تحديد لاحقة s أو m أو h للإشارة إلى أن القيمة بالثوان أو الدقائق أو الساعات.
  • (اختياري) مفتاح قسم المستخدم. يمكنك أيضا تطبيق تحديد المعدل لكل مستخدم. أي، يمكن أن يكون لدى المستخدمين المختلفين معدل نقل خاص بهم مسموح به استنادا إلى معرف موجود في الطلب. الإشارة إلى ما إذا كان المفتاح في مطالبة JWT أو عنوان HTTP مع claim أو header بناء الجملة.
  • (اختياري) يمكنك تحديد المعدل حسب عناوين IP، ولكن ليس بالاشتراك مع تحديد المعدل لكل مستخدم.

قد يقتصر المثال التالي جميع المستخدمين على طلبين كل خمس ثوان إلى /products المسار:

{
    "predicates": [
      "Path=/products",
      "Method=GET"
    ],
    "filters": [
      "StripPrefix=0",
      "RateLimit=2,5s"
    ]
}

إذا كنت ترغب في عرض مسار لمجموعات مختلفة من المستخدمين، كل واحد تم تعريفه بواسطة عنوان HTTP الخاص به client_id ، استخدم تعريف المسار التالي:

{
    "predicates": [
      "Path=/products",
      "Method=GET"
    ],
    "filters": [
      "StripPrefix=0",
      "RateLimit=2,5s,{header:client_id}"
    ]
}

عند تجاوز الحد، ستفشل الاستجابات بالحالة 429 Too Many Requests .

استخدم الأمر التالي لتطبيق عامل التصفية RateLimit على /products المسار:

az spring gateway route-config update \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-service-instance-name> \
    --name catalog-routes \
    --app-name catalog-service \
    --routes-file azure-spring-apps-enterprise/resources/json/routes/catalog-service_rate-limit.json

استخدم الأوامر التالية لاسترداد عنوان URL للمسار /products في Spring Cloud Gateway:

export GATEWAY_URL=$(az spring gateway show \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-service-instance-name> | jq -r '.properties.url')

echo "https://${GATEWAY_URL}/products"

قم بإجراء العديد من الطلبات إلى عنوان URL خلال /products فترة خمس ثوان لمشاهدة فشل الطلبات بحالة 429 Too Many Requests.

تنظيف الموارد

إذا كنت تخطط لمواصلة العمل بالبدايات السريعة والبرامج التعليمية اللاحقة، فقد ترغب في ترك هذه الموارد في مكانها. يمكنك حذف مجموعة الموارد عند انتهاء حاجتك إليها، وهذا يؤدي إلى حذف الموارد الموجودة في مجموعة الموارد. لحذف مجموعة الموارد باستخدام Azure CLI، استخدم الأوامر التالية:

echo "Enter the Resource Group name:" &&
read resourceGroupName &&
az group delete --name $resourceGroupName &&
echo "Press [ENTER] to continue ..."

الخطوات التالية

تابع إلى أي من قوالب التشغيل السريع الاختيارية التالية: