Rozwiązywanie problemów z błędami ograniczania przepustowości interfejsu API

Żądania usługi Azure Compute mogą być ograniczane w ramach subskrypcji i w danym regionie, aby ułatwić ogólną wydajność usługi. Zapewniamy, że wszystkie wywołania dostawcy zasobów obliczeniowych platformy Azure (CRP), który zarządza zasobami w przestrzeni nazw Microsoft.Compute, nie przekraczają maksymalnej dozwolonej liczby żądań interfejsu API. W tym dokumencie opisano ograniczanie przepustowości interfejsu API, szczegółowe informacje na temat rozwiązywania problemów z ograniczaniem przepustowości oraz najlepsze rozwiązania w celu uniknięcia ograniczania przepustowości.

Ograniczanie przepustowości przez usługę Azure Resource Manager a dostawców zasobów

Jako brama frontowa do platformy Azure usługa Azure Resource Manager przeprowadza uwierzytelnianie oraz walidację pierwszego rzędu oraz ogranicza wszystkie przychodzące żądania interfejsu API. Tutaj opisano limity szybkości wywołań i powiązane nagłówki HTTP odpowiedzi diagnostycznej usługi Azure Resource Manager.

Gdy klient interfejsu API platformy Azure otrzymuje błąd ograniczania przepustowości, stan HTTP to 429 Za dużo żądań. Aby dowiedzieć się, czy ograniczanie żądań jest wykonywane przez usługę Azure Resource Manager lub podstawowego dostawcę zasobów, takiego jak CRP, sprawdź pod kątem x-ms-ratelimit-remaining-subscription-reads żądań GET i x-ms-ratelimit-remaining-subscription-writes nagłówków odpowiedzi pod kątem żądań innych niż GET. Jeśli liczba pozostałych wywołań zbliża się do wartości 0, osiągnięto ogólny limit wywołań subskrypcji zdefiniowany przez usługę Azure Resource Manager. Działania wszystkich klientów subskrypcji są liczone razem. W przeciwnym razie ograniczanie przepustowości pochodzi od docelowego dostawcy zasobów (adresowanego przez /providers/<RP> segment adresu URL żądania).

Nagłówki odpowiedzi informacyjnej dotyczącej szybkości wywołań

Nagłówek Format wartości Przykład Opis
x-ms-ratelimit-remaining-resource <source RP>/<policy or bucket>;<count> Microsoft.Compute/HighCostGet; 159 Liczba pozostałych wywołań interfejsu API dla zasad ograniczania przepustowości obejmujących zasobnik lub grupę operacji, w tym element docelowy tego żądania
x-ms-request-charge <count> 1 Liczba wywołań zlicza opłatę za to żądanie HTTP do limitu odpowiednich zasad. Najczęściej jest to 1. Żądania wsadowe, takie jak skalowanie zestawu skalowania maszyn wirtualnych, mogą naliczać wiele opłat.

Należy pamiętać, że żądanie interfejsu API może podlegać wielu zasadom ograniczania przepustowości. Dla każdej zasady będzie znajdować się osobny x-ms-ratelimit-remaining-resource nagłówek.

Oto przykładowa odpowiedź na żądanie usunięcia zestawu skalowania maszyn wirtualnych.

x-ms-ratelimit-remaining-resource: Microsoft.Compute/DeleteVMScaleSet;107 
x-ms-ratelimit-remaining-resource: Microsoft.Compute/DeleteVMScaleSet;587 
x-ms-ratelimit-remaining-resource: Microsoft.Compute/VMScaleSetBatchedVMRequests;3704 
x-ms-ratelimit-remaining-resource: Microsoft.Compute/VmssQueuedVMOperations;4720 

Szczegóły błędu ograniczania przepustowości

Stan 429 HTTP jest często używany do odrzucania żądania, ponieważ osiągnięto limit liczby wywołań. Typowa odpowiedź o błędzie ograniczania przepustowości od dostawcy zasobów obliczeniowych będzie wyglądać jak w poniższym przykładzie (wyświetlane są tylko odpowiednie nagłówki):

HTTP/1.1 429 Too Many Requests
x-ms-ratelimit-remaining-resource: Microsoft.Compute/HighCostGet;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": "HighCostGet",
      "message": "{\"operationGroup\":\"HighCostGet\",\"startTime\":\"2018-06-29T19:54:21.0914017+00:00\",\"endTime\":\"2018-06-29T20:14:21.0914017+00:00\",\"allowedRequestCount\":300,\"measuredRequestCount\":1238}"
    }
  ]
}

Zasady z pozostałą liczbą wywołań 0 to ta, z której jest zwracany błąd ograniczania przepustowości. W tym przypadku jest HighCostGetto . Ogólny format treści odpowiedzi to ogólny format błędu interfejsu API usługi Azure Resource Manager (zgodny z usługą OData). Główny kod błędu , to ten, OperationNotAllowedktóry jest używany przez dostawcę zasobów obliczeniowych do zgłaszania błędów ograniczania przepustowości (wśród innych typów błędów klienta). Właściwość message błędów wewnętrznych zawiera serializowaną strukturę JSON ze szczegółami naruszenia ograniczania przepustowości.

Jak pokazano powyżej, każdy błąd ograniczania przepustowości zawiera Retry-After nagłówek, który zapewnia minimalną liczbę sekund, przez którą klient powinien poczekać przed ponowieniem próby wykonania żądania.

Analizator błędów wywołań interfejsu API i ograniczania przepustowości

Wersja zapoznawcza funkcji rozwiązywania problemów jest dostępna dla interfejsu API dostawcy zasobów obliczeniowych. Te polecenia cmdlet programu PowerShell zawierają statystyki dotyczące szybkości żądań interfejsu API na interwał czasu na operację i naruszeń ograniczania przepustowości na grupę operacji (zasady):

Statystyki wywołań interfejsu API mogą zapewnić doskonały wgląd w zachowanie klientów subskrypcji i umożliwić łatwą identyfikację wzorców wywołań, które powodują ograniczanie przepustowości.

Ograniczeniem analizatora na razie jest to, że nie liczy żądań dla typów zasobów dysków i migawek (w celu obsługi dysków zarządzanych). Ponieważ zbiera dane z danych telemetrycznych crp, nie może również pomóc w identyfikacji błędów ograniczania przepustowości z usługi ARM. Można je jednak łatwo zidentyfikować na podstawie charakterystycznych nagłówków odpowiedzi arm, jak wspomniano wcześniej.

Polecenia cmdlet programu PowerShell korzystają z interfejsu API usługi REST, który może być łatwo wywoływany bezpośrednio przez klientów (choć nie ma jeszcze formalnej obsługi). Aby wyświetlić format żądania HTTP, uruchom polecenia cmdlet za pomocą przełącznika -Debug lub wyszukuj ich wykonanie przy użyciu narzędzia Fiddler.

Najważniejsze wskazówki

  • Nie ponawiaj próby błędów interfejsu API usługi platformy Azure bezwarunkowo i/lub natychmiast. Typowe zdarzenie polega na tym, że kod klienta przechodzi w pętlę szybkich ponawiania prób w przypadku wystąpienia błędu, który nie może ponowić próby. Ponawianie prób ostatecznie wyczerpuje dozwolony limit wywołań dla grupy operacji docelowej i wpłynie na innych klientów subskrypcji.
  • W przypadku automatyzacji interfejsu API o dużej liczbie woluminów rozważ zaimplementowanie proaktywnego samowłaszczania po stronie klienta, gdy liczba dostępnych wywołań dla docelowej grupy operacji spadnie poniżej pewnego niskiego progu.
  • Podczas śledzenia operacji asynchronicznych przestrzegaj wskazówek nagłówka Retry-After.
  • Jeśli kod klienta wymaga informacji o określonej maszynie wirtualnej, wyślij zapytanie do tej maszyny wirtualnej bezpośrednio, zamiast wyświetlać listę wszystkich maszyn wirtualnych w grupie zasobów zawierającej lub całej subskrypcji, a następnie wybierz potrzebną maszynę wirtualną po stronie klienta.
  • Jeśli kod klienta wymaga maszyn wirtualnych, dysków i migawek z określonej lokalizacji platformy Azure, użyj formularza zapytania opartego na lokalizacji, zamiast wykonywać zapytania dotyczące wszystkich maszyn wirtualnych subskrypcji, a następnie filtrować według lokalizacji po stronie klienta: GET /subscriptions/<subId>/providers/Microsoft.Compute/locations/<location>/virtualMachines?api-version=2017-03-30 zapytania do regionalnych punktów końcowych dostawcy zasobów obliczeniowych.
  • Podczas tworzenia lub aktualizowania zasobów interfejsu API, w szczególności maszyn wirtualnych i zestawów skalowania maszyn wirtualnych, znacznie wydajniej jest śledzić zwracaną operację asynchroniczną do ukończenia niż sondowanie samego adresu URL zasobu provisioningState(na podstawie ).

Następne kroki

Aby uzyskać więcej informacji na temat wskazówek dotyczących ponawiania prób dla innych usług na platformie Azure, zobacz Wskazówki dotyczące ponawiania prób dla określonych usług.

Skontaktuj się z nami, aby uzyskać pomoc

Jeśli masz pytania lub potrzebujesz pomocy, utwórz wniosek o pomoc techniczną lub zadaj pytanie w społeczności wsparcia dla platformy Azure. Możesz również przesłać opinię o produkcie do społeczności opinii platformy Azure.