Устранение ошибок регулирования API
Запросы Azure Compute могут быть отредансироваться по подписке и по регионам, чтобы помочь в общей производительности службы. Мы гарантируем, что все вызовы поставщика ресурсов Azure Compute Resource (CRP), который управляет ресурсами в пространстве имен Microsoft.Compute, не превышают максимально допустимую скорость запроса API. В этом документе описываются регулирование API, сведения о том, как устранить проблемы с регулированием, а также практические методы, чтобы избежать регулирования.
Регулирование с помощью Azure Resource Manager vs Resource Providers
В качестве входной двери в Azure диспетчер ресурсов Azure делает проверку подлинности, проверку подлинности и регулирование всех входящих запросов API. Здесь описаны ограничения скорости вызовов Azure Resource Manager и соответствующие заглавные http-ответы диагностики.
Когда клиент API Azure получает ошибку регулирования, состояние HTTP составляет 429 слишком много запросов. Чтобы понять, проводится ли регулирование запросов менеджером ресурсов Azure или поставщиком ресурсов, например CRP, x-ms-ratelimit-remaining-subscription-reads проверьте запросы GET x-ms-ratelimit-remaining-subscription-writes и заглавные главы ответов на запросы, не ввоженные в GET. Если оставшееся количество вызовов приближается к 0, общее ограничение абонентского вызова, определенное Менеджером ресурсов Azure, достигнуто. Действия всех клиентов подписки подсчитываются вместе. В противном случае регулирование идет от целевого поставщика ресурсов ( /providers/<RP> адресованного сегментом URL-адреса запроса).
Заголовки информационного ответа по тарифу вызовов
| Заголовок | Формат значения | Пример | Описание |
|---|---|---|---|
| x-ms-ratelimit-remaining-resource | <source RP>/<policy or bucket>;<count> |
Microsoft.Compute/HighCostGet3Min;159 | Оставшееся количество вызовов API для политики регулирования, охватывающей ведро ресурсов или группу операций, включая цель этого запроса |
| x-ms-request-charge | <count> |
1 | Количество вызовов считается "заряженным" для этого запроса http к пределу применимой политики. Это, как правило, 1. Пакетные запросы, например для масштабирования набора масштабирования виртуальных машин, могут взимать несколько платы. |
Обратите внимание, что запрос API может быть подвергнут нескольким политикам регулирования. Для каждой политики будет отдельная x-ms-ratelimit-remaining-resource загона.
Вот пример ответа на удаление запроса набора виртуальноймашиной шкалы.
x-ms-ratelimit-remaining-resource: Microsoft.Compute/DeleteVMScaleSet3Min;107
x-ms-ratelimit-remaining-resource: Microsoft.Compute/DeleteVMScaleSet30Min;587
x-ms-ratelimit-remaining-resource: Microsoft.Compute/VMScaleSetBatchedVMRequests5Min;3704
x-ms-ratelimit-remaining-resource: Microsoft.Compute/VmssQueuedVMOperations;4720
Сведения об ошибках регулирования
Состояние HTTP 429 обычно используется для отклонить запрос, так как достигнуто ограничение скорости вызовов. Типичный ответ на ошибки регулирования от поставщика вычислительных ресурсов будет выглядеть как пример ниже (показаны только соответствующие загоны):
HTTP/1.1 429 Too Many Requests
x-ms-ratelimit-remaining-resource: Microsoft.Compute/HighCostGet3Min;46
x-ms-ratelimit-remaining-resource: Microsoft.Compute/HighCostGet30Min;0
Retry-After: 1200
Content-Type: application/json; charset=utf-8
{
"code": "OperationNotAllowed",
"message": "The server rejected the request because too many requests have been received for this subscription.",
"details": [
{
"code": "TooManyRequests",
"target": "HighCostGet30Min",
"message": "{\"operationGroup\":\"HighCostGet30Min\",\"startTime\":\"2018-06-29T19:54:21.0914017+00:00\",\"endTime\":\"2018-06-29T20:14:21.0914017+00:00\",\"allowedRequestCount\":800,\"measuredRequestCount\":1238}"
}
]
}
Политика с оставшимся количеством вызовов 0 — это политика, из-за которой возвращается ошибка регулирования. В этом случае это HighCostGet30Min. Общий формат тела отклика — это общий формат API API диспетчера ресурсов Azure (соответствующий OData). Основной код ошибки — это тот, OperationNotAllowedкоторый поставщик вычислительных ресурсов использует для сообщения об ошибках регулирования (среди других типов клиентских ошибок). Свойство message внутренней ошибки содержит сериализованную структуру JSON с сведениями о нарушении регулирования.
Как показано выше, Retry-After каждая ошибка регулирования включает в себя загон, который обеспечивает минимальное количество секунд, которое клиент должен подождать перед повторной пересылкой запроса.
Скорость вызова API и анализатор ошибок регулирования
Предварительная версия функции устранения неполадок доступна для API поставщика ресурсов Compute. Эти кодлеты PowerShell предоставляют статистику скорости запроса API за интервал времени для операции и нарушения регулирования для группы операций (политика):
Статистика вызовов API позволяет получить представление о поведении клиента(ы) подписки и у вас будет возможность легкой идентификации шаблонов вызовов, которые вызывают регулирование.
В настоящее время анализатор не учитывает запросы на типы ресурсов дисков и снимков (в поддержку управляемых дисков). Так как он собирает данные из телеметрии CRP, он также не может помочь в выявлении ошибок регулирования из ARM. Но их легко определить на основе отличительных ARM ответов, как говорилось ранее.
В cmdlets PowerShell используется API службы REST, который может быть легко вызван непосредственно клиентами (хотя формальной поддержки пока нет). Чтобы увидеть формат http-запроса, запустите cmdlets с переключателем -Debug или snoop на их выполнении с Fiddler.
Рекомендации
- Не повторно повторить ошибки API службы Azure безоговорочно и/или немедленно. Часто код клиента может попасть в цикл быстрого повторного получения при возникновении ошибки, которая не может повториться. В конечном итоге для группы целевой операции будут исчерпаны допустимые ограничения на вызовы и влияние на других клиентов подписки.
- В случаях автоматизации API с высоким уровнем громкости рассмотрите возможность реализации активного самостоятельного регулирования клиентской стороны, когда количество доступных вызовов для целевой группы операций опускается ниже некоторого низкого порогового значения.
- При отслеживании операций async уважайте подсказки Retry-After загона.
- Если клиентский код нуждается в сведениях о определенной виртуальной машине, запрос, который VM непосредственно вместо перечисления всех виртуальных компьютеров в группе содержащих ресурсов или всей подписки, а затем выбрать необходимый виртуальный компьютер на стороне клиента.
- Если клиентский код нуждается в видеомайнах, дисках и снимках из определенного расположения Azure, используйте форму запроса на основе расположения, а не запрашивайте все VMs подписки и затем фильтрация по расположению на стороне клиента:
GET /subscriptions/<subId>/providers/Microsoft.Compute/locations/<location>/virtualMachines?api-version=2017-03-30запрос в региональные конечные точки поставщика ресурсов Compute. - При создании или обновлении ресурсов API, в частности виртуальных компьютеров и наборов масштабирования виртуальных машин, гораздо эффективнее отслеживать возвращаемую операцию async до завершения, чем опрос по самому URL-адресу ресурса (
provisioningStateна основе ).
Дальнейшие действия
Дополнительные сведения о руководстве по повторному просмотру для других служб в Azure см. в руководстве retry для определенных служб.