Узнайте, как 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 является операцией на уровне клиента.

В таблице ниже приведены ограничения в час по умолчанию.

Область Operations Ограничение
Подписка reads 12 000
Подписка deletes 15000
Подписка writes 1200
Клиент reads 12 000
Клиент writes 1200

Эти ограничения касаются субъекта безопасности (пользователь или приложение), выполняющего запросы, а также идентификатора подписки или идентификатора клиента. Если запросы поступают от нескольких субъектов безопасности, ваше ограничение для подписки или клиента превышает 12 000 и 1200 в час.

Эти ограничения применяются к каждому экземпляру Azure Resource Manager. В каждом регионе Azure существует несколько экземпляров, а Azure Resource Manager развертывается во всех регионах Azure. На практике действуют более высокие ограничения. Как правило, запросы от пользователя обрабатывают разные экземпляры Azure Resource Manager.

Остальные запросы возвращаются в значениях заголовка ответа.

Миграция на региональный алгоритм регулирования и контейнер маркеров

Начиная с 2024 года корпорация Майкрософт переносит подписки Azure в новую архитектуру регулирования. При этом изменении вы получите новые ограничения регулирования. Новые ограничения регулирования применяются для каждого региона, а не для каждого экземпляра Azure Resource Manager. Новая архитектура использует алгоритм контейнера маркеров для управления регулированием API.

Контейнер маркеров представляет максимальное количество запросов, которые можно отправлять для каждой секунды. При достижении максимального количества запросов скорость повторного заполнения определяет, как быстро маркеры становятся доступными в контейнере.

Эти обновленные ограничения упрощают обновление квоты и управление ими.

Новые ограничения:

Область Operations Размер контейнера Частота повторного заполнения в секунду
Подписка reads 250 25
Подписка deletes 200 10
Подписка writes 200 10
Клиент reads 250 25
Клиент deletes 200 10
Клиент writes 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. Ограничения применяются для каждого региона ресурса в запросе.

Ресурс Ограничение
Операций управления учетными записями хранения (чтение) 800 за 5 минут
Операций управления учетными записями хранения (запись) 10 в секунду / 1200 в час
Операции управления учетными записями хранения (список) 100 за 5 минут

Регулирование сети

Поставщик ресурсов Microsoft.Network применяет следующие ограничения:

Операция Ограничение
запись/удаление (PUT) 1000 за 5 минут
чтение (GET) 10 000 за 5 минут

Помимо этих общих ограничений, следующие ограничения применяются к операциям DNS:

Операция зоны DNS Ограничение (на зону)
Создание или обновление 40 в минуту
Удаление 40 в минуту
Получить 1000 в минуту
List 60 в минуту
вывод списка по группе ресурсов; 60 в минуту
Обновить 40 в минуту
Операция набора записей DNS Ограничение (на зону)
Создание или обновление 200 в минуту
Удаление 200 в минуту
Получить 2000 в минуту
Список по зоне DNS 60 в минуту
Список по типу 60 в минуту
Обновить 200 в минуту

Регулирование вычислений

Подробнее об ограничениях для вычислительных операций см. в разделе Устранение ошибок регулирования API — вычисления.

Для проверка экземпляров виртуальных машин в масштабируемом наборе виртуальных машин используйте операции Масштабируемые наборы виртуальных машин. Например, чтобы проверить питание экземпляров виртуальных машин, следуйте списку масштабируемого набора виртуальных машин с параметрами. Этот API снижает количество запросов.

Регулирование Azure Resource Graph

Azure Resource Graph ограничивает количество запросов к своим операциям. Описанные в этой статье шаги, позволяющие определить оставшееся количество запросов, и порядок действий по достижению ограничения также актуальны и для Resource Graph. Однако в Resource Graph действуют собственные ограничение и скорость восстановления. Подробнее см. в разделе Регулирование Resource Graph.

Другие поставщики ресурсов

Подробнее о регулировании у других поставщиков ресурсов см. в следующих материалах:

Код ошибки

По достижении ограничения отображается код состояния HTTP 429 — слишком много запросов. Ответ включает значение Retry-After, указывающее, сколько секунд должно подождать приложение (или находиться в спящем режиме), прежде чем отправить следующий запрос. Если вы отправляете запрос до истечения значения повторных попыток, запрос не обрабатывается и возвращается новое значение повтора.

Если вы используете Azure SDK, то в SDK может быть настроена автоматическая повторная попытка. Подробнее см. в разделе Повторная попытка в службах Azure.

Некоторые поставщики ресурсов выдают значение 429, чтобы сообщить о временной ошибке. Проблема может заключаться в перегрузке, к которой ваш запрос не имеет отношения. Либо это может быть временная ошибка, относящаяся к состоянию целевого или зависимого ресурса. Например, поставщик ресурсов возвращает 429 с кодом ошибки RetryableErrorDueToAnotherOperation, когда целевой ресурс занят другой операцией. Чтобы определить причину проблемы — будь то регулирование или временная ошибка, — изучите сведения об ошибке в ответе.

Количество оставшихся запросов

Количество оставшихся запросов можно определить, проверяя заголовки ответов. В заголовках ответов на запросы на чтение указано количество оставшихся запросов. Заголовки ответов на запросы на запись содержат количество оставшихся запросов на запись. В приведенной ниже таблице описаны заголовки ответов, в которых можно проверить эти значения.

Заголовок ответа Description
x-ms-ratelimit-remaining-subscription-deletes Оставшееся число запросов на удаление для подписки. Это значение возвращается при операциях удаления.
x-ms-ratelimit-remaining-subscription-reads Оставшееся число запросов на чтение для подписки. Это значение возвращается при операциях чтения.
x-ms-ratelimit-remaining-subscription-writes Оставшееся число запросов на запись для подписки. Это значение возвращается при операциях записи.
x-ms-ratelimit-remaining-tenant-reads Оставшееся количество запросов на чтение для клиента.
x-ms-ratelimit-remaining-tenant-writes Оставшееся количество запросов на запись для клиента.
x-ms-ratelimit-remaining-subscription-resource-requests Оставшееся количество запросов для типа ресурса для подписки.

Это значение заголовка возвращается только в том случае, если служба переопределяет ограничение по умолчанию. Resource Manager добавляет это значение вместо ограничения подписки на запросы на чтение или запись.
x-ms-ratelimit-remaining-subscription-resource-entities-read Оставшееся количество запросов коллекции типов ресурсов для подписки.

Это значение заголовка возвращается только в том случае, если служба переопределяет ограничение по умолчанию. Это значение содержит число оставшихся запросов коллекции (вывод ресурсов).
x-ms-ratelimit-remaining-tenant-resource-requests Оставшееся количество запросов для типа ресурса для клиента.

Этот заголовок добавляется только для запросов на уровне клиента, и только если служба переопределяет ограничение по умолчанию. Resource Manager добавляет это значение вместо ограничения клиента на запросы на чтение или запись.
x-ms-ratelimit-remaining-tenant-resource-entities-read Оставшееся количество запросов коллекции типов ресурсов для клиента.

Этот заголовок добавляется только для запросов на уровне клиента, и только если служба переопределяет ограничение по умолчанию.

Поставщик ресурсов также может возвращать заголовки ответов с информацией об оставшихся запросах. Подробнее о заголовках ответов, которые возвращает поставщик вычислительных ресурсов, см. в разделе Заголовки ответов с информацией о частоте вызовов.

Получение значений заголовков

Получение этих значений заголовков в коде или сценарии ничем не отличается от извлечения любого другого значения заголовка.

Например, приведенный ниже код 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 см. в разделе Проверьте ограничения Resource Manager для подписки.

Если же требуется узнать количество оставшихся запросов для отладки, можно указать параметр -Debug в командлете 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 извлечь значение заголовка можно с помощью параметра подробного вывода.

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'

Следующие шаги