فهم كيفية تقييد Azure Resource Manager للطلبات

توضح هذه المقالة كيفية قيام Azure Resource Manager بكبح الطلبات. يوضح لك كيفية تعقب عدد الطلبات المتبقية قبل الوصول إلى الحد، وكيفية الاستجابة عند الوصول إلى الحد الأقصى.

يحدث التقييد على مستويين. يقوم Azure Resource Manager بكبح طلبات الاشتراك والمستأجر. إذا كان الطلب أقل من حدود التقييد للاشتراك والمستأجر، يقوم Resource Manager بتوجيه الطلب إلى موفر المورد. يطبق موفر الموارد حدود التقييد التي تم تصميمها لعملياته.

تُظهر الصورة التالية كيفية تطبيق التقييد عندما ينتقل الطلب من المستخدم إلى Azure Resource Manager وموفر المورد. توضح الصورة أن الطلبات يتم تقييدها في البداية لكل معرف أساسي ولكل مثيل Azure Resource Manager في منطقة المستخدم الذي يرسل الطلب. يتم تقييد الطلبات في الساعة. عند إعادة توجيه الطلب إلى موفر الموارد، يتم تقييد الطلبات لكل منطقة من المورد بدلا من مثيل Azure Resource Manager في منطقة المستخدم. يتم أيضا تقييد طلبات موفر الموارد لكل معرف مستخدم أساسي وكل ساعة.

رسم تخطيطي يوضح كيفية تطبيق التقييد حيث ينتقل الطلب من المستخدم إلى Azure Resource Manager وموفر الموارد.

حدود الاشتراك والمستأجر

تخضع كل عملية على مستوى الاشتراك ومستوى المستأجر لقيود الاختناق. طلبات الاشتراك هي تلك التي تتضمن تمرير معرف الاشتراك الخاص بك، مثل استرداد مجموعات الموارد في اشتراكك. على سبيل المثال، إرسال طلب إلى https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups?api-version=2022-01-01 هو عملية على مستوى الاشتراك. لا تتضمن طلبات المستأجر معرف الاشتراك الخاص بك، مثل استرداد مواقع Azure الصالحة. على سبيل المثال، إرسال طلب إلى https://management.azure.com/tenants?api-version=2022-01-01 هو عملية على مستوى المستأجر.

يظهر الجدول التالي حدود الاختناق الافتراضية لكل ساعة.

النطاق العمليات الحد
الاشتراك عدد القراءات 12000
الاشتراك يحذف 15000
الاشتراك مؤلفون 1200
المستأجر عدد القراءات 12000
المستأجر مؤلفون 1200

يتم تحديد نطاق هذه الحدود لمبدأ الأمان (المستخدم أو التطبيق) الذي يقوم بالطلبات ومعرف الاشتراك أو معرف المستأجر. إذا كانت طلباتك تأتي من أكثر من أصل أمان واحد، فسيكون الحد الخاص بك عبر الاشتراك أو المستأجر أكبر من 12000 و1200 لكل ساعة.

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

يتم إرجاع الطلبات المتبقية في قيم عنوان الاستجابة.

الترحيل إلى الاختناق الإقليمي وخوارزمية مستودع الرمز المميز

بدءا من عام 2024، تقوم Microsoft بترحيل اشتراكات Azure إلى بنية تقييد جديدة. مع هذا التغيير، ستختبر حدود تقييد جديدة. يتم تطبيق حدود التقييد الجديدة لكل منطقة بدلا من كل مثيل من Azure Resource Manager. تستخدم البنية الجديدة خوارزمية مستودع الرمز المميز لإدارة تقييد واجهة برمجة التطبيقات.

يمثل مستودع الرمز المميز الحد الأقصى لعدد الطلبات التي يمكنك إرسالها لكل ثانية. عند الوصول إلى الحد الأقصى لعدد الطلبات، يحدد معدل إعادة التعبئة مدى سرعة توفر الرموز المميزة في المستودع.

تسهل هذه الحدود المحدثة عليك تحديث الحصة النسبية وإدارتها.

الحدود الجديدة هي:

النطاق العمليات حجم المستودع معدل إعادة التعبئة في الثانية
الاشتراك عدد القراءات 250 25
الاشتراك يحذف 200 10
الاشتراك مؤلفون 200 10
المستأجر عدد القراءات 250 25
المستأجر يحذف 200 10
المستأجر مؤلفون 200 10

تنطبق حدود الاشتراك لكل اشتراك، ولكل كيان خدمة، ولكل نوع عملية. هناك أيضا حدود اشتراك عمومية تعادل 15 مرة الحدود الأساسية للخدمة الفردية لكل نوع عملية. تنطبق الحدود العمومية عبر جميع كيانات الخدمة. سيتم تقييد الطلبات إذا تم تجاوز الحدود العمومية أو كيان الخدمة أو المستأجر المحدد.

قد تكون الحدود أصغر للعملاء المجانيين أو التجريبيين.

على سبيل المثال، افترض أن لديك مستودع بحجم 250 رمزا مميزا لطلبات القراءة ومعدل إعادة التعبئة 25 رمزا مميزا في الثانية. إذا أرسلت 250 طلب قراءة في ثانية، يكون المستودع فارغا ويتم تقييد طلباتك. في كل ثانية، يصبح 25 رمزا مميزا متاحا حتى يصل المستودع إلى الحد الأقصى لسعة 250 رمزا مميزا. يمكنك استخدام الرموز المميزة عند توفرها.

كيف أعمل معرفة ما إذا كان اشتراكي يستخدم تجربة التقييد الجديدة؟

بعد ترحيل اشتراكك إلى تجربة التقييد الجديدة، يعرض عنوان الاستجابة الطلبات المتبقية في الدقيقة بدلا من كل ساعة. أيضا، تظهر القيمة دقيقة Retry-After واحدة أو أقل، بدلا من خمس دقائق. لمزيد من المعلومات، راجع رمز الخطأ.

لماذا يتغير التقييد إلى لكل منطقة بدلا من كل مثيل؟

نظرا لأن المناطق المختلفة لها عدد مختلف من مثيلات Resource Manager، فإن التقييد لكل مثيل يؤدي إلى أداء تقييد غير متناسق. يجعل التقييد لكل منطقة التقييد متسقا وقابلا للتنبؤ.

كيف تؤثر تجربة التقييد الجديدة على حدودي؟

يمكنك إرسال المزيد من الطلبات. تزيد طلبات الكتابة بمقدار 30 مرة. تزيد طلبات الحذف بمقدار 2.4 مرة. تزيد طلبات القراءة بمقدار 7.5 مرات.

هل يمكنني منع ترحيل اشتراكي إلى تجربة التقييد الجديدة؟

لا، سيتم ترحيل جميع الاشتراكات في النهاية.

حدود موفر الموارد

يطبق موفرو الموارد حدود التقييد خاصة بهم. داخل كل اشتراك، يقوم موفر الموارد بالتقييد لكل منطقة من المورد في الطلب. نظرا لأن Resource Manager يقيد حسب مثيل Resource Manager، وهناك العديد من مثيلات Resource Manager في كل منطقة، فقد يتلقى موفر الموارد طلبات أكثر من الحدود الافتراضية في القسم السابق.

يناقش هذا القسم قيود بعض موفري الموارد المستخدمة على نطاق واسع.

تقييد التخزين

تنطبق الحدود التالية فقط عند إجراء عمليات الإدارة باستخدام Azure Resource Manager مع Azure Storage. تنطبق الحدود لكل منطقة من المورد في الطلب.

Resource الحد
عمليات إدارة حساب التخزين (قراءة) 800 لكل 5 دقائق
عمليات إدارة حساب التخزين (كتابة) 10 في الثانية/1200 في الساعة
عمليات إدارة حساب التخزين (قائمة) 100 لكل 5 دقائق

تقييد الشبكة

يطبق موفر موارد Microsoft.Network حدود الخانق التالية:

العملية الحد
كتابة / حذف (PUT) 1000 لكل 5 دقائق
قراءة (GET) 10000 لكل 5 دقائق

بالإضافة إلى هذه الحدود العامة، تنطبق الحدود التالية على عمليات DNS:

عملية منطقة DNS الحد (لكل منطقة)
إنشاء أو تحديث 40 في الدقيقة
حذف 40 في الدقيقة
الحصول على 1000 في الدقيقة
List 60 في الدقيقة
List By Resource Group 60 في الدقيقة
Update 40 في الدقيقة
عملية مجموعة سجلات DNS الحد (لكل منطقة)
إنشاء أو تحديث 200 في الدقيقة
حذف 200 في الدقيقة
الحصول على 2000 في الدقيقة
قائمة حسب منطقة DNS 60 في الدقيقة
قائمة حسب النوع 60 في الدقيقة
Update 200 في الدقيقة

حساب التقييد

ينفذ Microsoft Compute التقييد لتوفير تجربة مثالية لمستخدمي الجهاز الظاهري ومجموعة مقياس الجهاز الظاهري. توفر حدود تقييد الحوسبة معلومات شاملة حول نهج التقييد وحدود الجهاز الظاهري ومجموعات مقياس الجهاز الظاهري والأجهزة الظاهرية لمجموعة المقياس.

تقييد الرسم البياني لمورد Azure

يحد Azure Resource Graph عدد الطلبات لعملياته. تنطبق الخطوات الواردة في هذه المقالة لتحديد الطلبات المتبقية وكيفية الاستجابة عند الوصول إلى الحد الأقصى أيضًا على Resource Graph. ومع ذلك، يحدد Resource Graph الحد الخاص به ومعدل إعادة التعيين. لمزيد من المعلومات، راجع رؤوس التحكم في الرسم البياني للمورد .

موفرو موارد آخرون

للحصول على معلومات حول التقييد في موفري الموارد الآخرين، راجع:

رمز الخطأ

عندما تصل إلى الحد الأقصى، تتلقى رمز حالة HTTP 429 طلبات كثيرة جدًا . تتضمن الاستجابة قيمة إعادة المحاولة بعد ، والتي تحدد عدد الثواني التي يجب أن ينتظرها التطبيق (أو ينام) قبل إرسال الطلب التالي. إذا أرسلت طلبا قبل انقضاء قيمة إعادة المحاولة، فلن تتم معالجة طلبك ويتم إرجاع قيمة إعادة محاولة جديدة.

إذا كنت تستخدم Azure SDK، فقد تحتوي SDK على تكوين إعادة المحاولة التلقائي. لمزيد من المعلومات، راجع إعادة محاولة التوجيه لخدمات Azure .

بعض موفري الموارد بإرجاع 429 للإبلاغ عن مشكلة مؤقتة. قد تكون المشكلة عبارة عن حالة حمل زائد لا ينتج عن طلبك مباشرة. أو قد يمثل خطأً مؤقتًا بشأن حالة المورد المستهدف أو المورد التابع. على سبيل المثال، يقوم موفر موارد الشبكة بإرجاع 429 مع رمز الخطأ RetryableErrorDueToAnotherOperation عندما يتم تأمين المورد الهدف بواسطة عملية أخرى. لتحديد ما إذا كان الخطأ يأتي من اختناق أو شرط مؤقت، عرض تفاصيل الخطأ في الاستجابة.

الطلبات المتبقية

يمكنك تحديد عدد الطلبات المتبقية عن طريق فحص رؤوس الاستجابات. تُرجع طلبات القراءة قيمة في الرأس لعدد طلبات القراءة المتبقية. تتضمن طلبات الكتابة قيمة لعدد طلبات الكتابة المتبقية. يصف الجدول التالي رؤوس الاستجابة التي يمكنك فحصها بحثًا عن هذه القيم:

رأس الاستجابة ‏‏الوصف
x-ms-ratelimit-remaining-subscription-deletes نطاق الاشتراك يحذف المتبقي. يتم إرجاع هذه القيمة على عمليات الحذف.
يقرأ الاشتراك المتبقي x-ms-ratelimit نطاق الاشتراك يقرأ المتبقية. يتم إرجاع هذه القيمة في عمليات القراءة.
يكتب الاشتراك المتبقي x-ms-ratelimit يكتب نطاق الاشتراك المتبقي. يتم إرجاع هذه القيمة في عمليات الكتابة.
قراءة x-ms-ratelimit-المتبقية-المستأجر المستأجر النطاق يقرأ المتبقية
يكتب x-ms-ratelimit-المتبقية-المستأجر المستأجر النطاق يكتب المتبقية
طلبات موارد الاشتراك المتبقية x-ms-ratrimit طلبات نوع المورد المحددة نطاق الاشتراك المتبقية.

يتم إرجاع قيمة العنوان هذه فقط إذا تجاوزت الخدمة الحد الافتراضي. يضيف Resource Manager هذه القيمة بدلاً من قراءة الاشتراك أو كتابته.
x-ms-ratelimit-المتبقية-الاشتراك-موارد-كيانات-قراءة طلبات مجموعة نوع المورد المحددة نطاق الاشتراك المتبقية.

يتم إرجاع قيمة العنوان هذه فقط إذا تجاوزت الخدمة الحد الافتراضي. توفر هذه القيمة عدد طلبات المجموعة المتبقية (قائمة الموارد).
طلبات موارد المستأجر المتبقية x-ms-ratrimit تبقى طلبات نوع المورد المحددة النطاق للمستأجر.

تتم إضافة هذا العنوان فقط للطلبات على مستوى المستأجر، وفقط إذا تجاوزت الخدمة الحد الافتراضي. يضيف Resource Manager هذه القيمة بدلاً من قراءة المستأجر أو كتابته.
قراءة x-ms-ratelimit-left-tenant-Resource-الكيانات تبقى طلبات مجموعة نوع المورد المحددة للمستأجر.

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

يمكن لموفر المورد أيضًا إرجاع رؤوس الاستجابات بمعلومات حول الطلبات المتبقية. للحصول على معلومات حول رؤوس الاستجابة التي تم إرجاعها بواسطة موفر مورد الحساب، راجع رؤوس استجابة معلومات معدل الاتصال .

استرجاع قيم الرأس

لا يختلف استرداد قيم الرأس هذه في التعليمات البرمجية أو البرنامج النصي عن استرداد أي قيمة رأس.

على سبيل المثال، في C # ، يمكنك استرداد قيمة الرأس من كائن HttpWebResponse باسم response بالرمز التالي:

response.Headers.GetValues("x-ms-ratelimit-remaining-subscription-reads").GetValue(0)

في PowerShell ، يمكنك استرداد قيمة الرأس من عملية Invoke-WebRequest.

$r = Invoke-WebRequest -Uri https://management.azure.com/subscriptions/{guid}/resourcegroups?api-version=2016-09-01 -Method GET -Headers $authHeaders
$r.Headers["x-ms-ratelimit-remaining-subscription-reads"]

للحصول على مثال PowerShell كامل، راجع التحقق من حدود إدارة الموارد للاشتراك .

إذا كنت تريد رؤية الطلبات المتبقية لتصحيح الأخطاء، يمكنك توفير المعلمة -Debug في الأمر cmdlet PowerShell .

Get-AzResourceGroup -Debug

والتي تُرجع العديد من القيم، بما في ذلك قيمة الاستجابة التالية:

DEBUG: ============================ HTTP RESPONSE ============================

Status Code:
OK

Headers:
Pragma                        : no-cache
x-ms-ratelimit-remaining-subscription-reads: 11999

للحصول على حدود الكتابة، استخدم عملية الكتابة:

New-AzResourceGroup -Name myresourcegroup -Location westus -Debug

الذي يرجع العديد من القيم، بما في ذلك القيم التالية:

DEBUG: ============================ HTTP RESPONSE ============================

Status Code:
Created

Headers:
Pragma                        : no-cache
x-ms-ratelimit-remaining-subscription-writes: 1199

في Azure CLI ، يمكنك استرداد قيمة الرأس باستخدام خيار الإسهاب.

az group list --verbose --debug

الذي يرجع العديد من القيم، بما في ذلك القيم التالية:

msrest.http_logger : Response status: 200
msrest.http_logger : Response headers:
msrest.http_logger :     'Cache-Control': 'no-cache'
msrest.http_logger :     'Pragma': 'no-cache'
msrest.http_logger :     'Content-Type': 'application/json; charset=utf-8'
msrest.http_logger :     'Content-Encoding': 'gzip'
msrest.http_logger :     'Expires': '-1'
msrest.http_logger :     'Vary': 'Accept-Encoding'
msrest.http_logger :     'x-ms-ratelimit-remaining-subscription-reads': '11998'

للحصول على حدود الكتابة، استخدم عملية الكتابة:

az group create -n myresourcegroup --location westus --verbose --debug

الذي يرجع العديد من القيم، بما في ذلك القيم التالية:

msrest.http_logger : Response status: 201
msrest.http_logger : Response headers:
msrest.http_logger :     'Cache-Control': 'no-cache'
msrest.http_logger :     'Pragma': 'no-cache'
msrest.http_logger :     'Content-Length': '163'
msrest.http_logger :     'Content-Type': 'application/json; charset=utf-8'
msrest.http_logger :     'Expires': '-1'
msrest.http_logger :     'x-ms-ratelimit-remaining-subscription-writes': '1199'

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