Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
DOTYCZY: Wszystkie warstwy usługi API Management
Możliwość ograniczania żądań przychodzących jest kluczową rolą usługi Azure API Management. Usługa API Management umożliwia dostawcom interfejsów API ochronę swoich interfejsów API przed nadużyciami i tworzenie wartości dla różnych warstw produktów interfejsu API przez kontrolowanie szybkości żądań lub łącznych żądań/przesyłanych danych. W tym artykule opisano sposób tworzenia i stosowania limitu przydziału i ograniczania szybkości.
Limity szybkości i przydziały
Limity szybkości i przydziały są używane do różnych celów.
Limity szybkości
Limity szybkości są zwykle używane do ochrony przed krótkimi i intensywnymi wzrostami objętości. Na przykład, jeśli wiesz, że usługa zaplecza ma wąskie gardło w bazie danych, gdy woluminy wywołań są wysokie, możesz ustawić rate-limit-by-key
politykę, aby zabronić wysokich woluminów wywołań.
Ostrożność
Ze względu na rozproszony charakter architektury ograniczania przepustowości ograniczanie szybkości nigdy nie jest całkowicie dokładne. Różnica między skonfigurowaną liczbą dozwolonych żądań a rzeczywistą liczbą różni się w zależności od liczby żądań i szybkości, opóźnienia zaplecza i innych czynników.
Kontyngenty
Przydziały są zwykle używane do kontrolowania stawek wywołań w dłuższym okresie czasu. Na przykład mogą ustawić łączną liczbę wywołań, które dany subskrybent może wykonać w ciągu danego miesiąca. Jeśli zarabiasz na interfejsie API, możesz również ustawić limity przydziału w różnych subskrypcjach opartych na poziomach. Na przykład subskrypcja w warstwie Podstawowa może mieć możliwość wykonania nie więcej niż 10 000 wywołań miesięcznie, ale warstwa Premium może wykonywać 100 000 000 wywołań każdego miesiąca.
W usłudze API Management limity szybkości są zwykle propagowane szybciej w węzłach w celu ochrony przed skokami. Z kolei informacje o limitach przydziału użycia są używane w dłuższej perspektywie, więc jej implementacja jest inna.
Uwaga
Po ponownym uruchomieniu podstawowych zasobów obliczeniowych na platformie usługi usługa API Management może nadal obsługiwać żądania przez krótki okres po osiągnięciu limitu przydziału.
Regulacja oparta na produktach
Dostawcy interfejsu API mogą używać funkcji ograniczania szybkości, które są ograniczone do określonej subskrypcji, aby zastosować limity dla deweloperów, którzy zarejestrowali się w celu korzystania z interfejsu API. Jednak tego typu ograniczanie nie pomaga, na przykład w przypadku ograniczania poszczególnych użytkowników końcowych API. Możliwe jest, że jeden użytkownik aplikacji dewelopera zużyje cały przydzielony limit i uniemożliwi korzystanie z aplikacji pozostałym klientom dewelopera. Ponadto kilku klientów, którzy generują dużą liczbę żądań, może ograniczyć dostęp do okazjonalnych użytkowników.
Niestandardowe ograniczanie oparte na kluczach
Uwaga
Zasady rate-limit-by-key
i quota-by-key
nie są dostępne w warstwie Zużycie usługi Azure API Management.
Zasady rate-limit-by-key i quota-by-key zapewniają bardziej elastyczne rozwiązanie do kontrolowania ruchu. Te zasady umożliwiają definiowanie wyrażeń w celu zidentyfikowania kluczy używanych do śledzenia użycia ruchu. Ta technika jest pokazana w poniższych przykładach.
Ograniczanie adresów IP
Następujące zasady ograniczają jeden adres IP klienta tylko do 10 wywołań co minutę i wymuszają łącznie 1000 000 wywołań i 10 000 kilobajtów przepustowości miesięcznie:
<rate-limit-by-key calls="10"
renewal-period="60"
counter-key="@(context.Request.IpAddress)" />
<quota-by-key calls="1000000"
bandwidth="10000"
renewal-period="2629800"
counter-key="@(context.Request.IpAddress)" />
Jeśli wszyscy klienci w Internecie używali unikatowego adresu IP, może to być skuteczny sposób ograniczania użycia przez użytkownika. Istnieje jednak prawdopodobieństwo, że wielu użytkowników współużytkuje jeden publiczny adres IP, ponieważ uzyskuje dostęp do Internetu za pośrednictwem urządzenia NAT. Mimo to w przypadku interfejsów API, które zezwalają na dostęp nieuwierzytelniony, użycie IpAddress
może być najlepszą opcją.
Ograniczanie tożsamości użytkownika
Jeśli użytkownik końcowy jest uwierzytelniony, możesz wygenerować klucz ograniczania na podstawie informacji, które jednoznacznie identyfikują użytkownika:
<rate-limit-by-key calls="10"
renewal-period="60"
counter-key="@(context.Request.Headers.GetValueOrDefault("Authorization","").AsJwt()?.Subject)" />
W tym przykładzie pokazano, jak wyodrębnić nagłówek autoryzacji, przekonwertować go na obiekt JWT
i użyć podmiotu tokenu do identyfikacji użytkownika. Następnie używa tej wartości jako klucza ograniczania szybkości. Jeśli tożsamość użytkownika jest przechowywana w elemecie JWT
jako jedno z innych oświadczeń, można zamiast tego użyć tej wartości.
Połączone zasady
Mimo że zasady ograniczania przepustowości oparte na użytkownikach zapewniają większą kontrolę niż zasady ograniczania na podstawie subskrypcji, nadal istnieje wartość łącząca obie możliwości. W przypadku skomercjalizowanych interfejsów API, ograniczenie szybkości wywołań według klucza subskrypcji produktu (Ogranicz szybkość wywołań według subskrypcji i Ustaw limit przydziału użycia według subskrypcji) to doskonały sposób na wdrożenie opłat opartych na poziomach użytkowania. Bardziej szczegółowa kontrola możliwości ograniczania przepustowości dla użytkownika jest uzupełnieniem i zapobiega sytuacji, w której zachowanie jednego użytkownika pogarsza doświadczenie innego użytkownika.
Sterowanie przepływnością przez klienta
Gdy klucz ograniczania jest definiowany za pomocą wyrażenia zasad, dostawca interfejsu API wybiera sposób ograniczania przepustowości. Deweloper może jednak chcieć kontrolować sposób ograniczania tempa obsługi własnych klientów. Dostawca interfejsu API może włączyć ten typ kontroli, wprowadzając nagłówek niestandardowy, aby umożliwić aplikacji klienckiej dewelopera komunikowanie klucza z interfejsem API:
<rate-limit-by-key calls="100"
renewal-period="60"
counter-key="@(request.Headers.GetValueOrDefault("Rate-Key",""))"/>
Ta technika umożliwia aplikacji klienckiej dewelopera określenie sposobu tworzenia klucza ograniczania szybkości. Deweloperzy klienta mogą tworzyć własne poziomy stawek, przydzielając zestawy kluczy użytkownikom i rotując wykorzystanie kluczy.
Zagadnienia dotyczące wielu regionów lub bram
Zasady ograniczania szybkości, takie jak rate-limit
, rate-limit-by-key
, azure-openai-token-limit
i llm-token-limit
, używają liczników na poziomie bramy usługi API Management. W związku z tym w przypadku wdrożeń usługi API Management w wielu regionach każda brama regionalna ma oddzielny licznik, a limity szybkości są wymuszane oddzielnie dla każdego regionu. Podobnie w wystąpieniach usługi API Management z obszarami roboczymi limity są wymuszane oddzielnie dla każdej bramy obszaru roboczego.
Zasady przydziału limitów, takie jak quota
i quota-by-key
, są globalne, co oznacza, że pojedynczy licznik jest używany na poziomie instancji zarządzania API.
Podsumowanie
Usługa API Management zapewnia ograniczanie szybkości i limitów w celu ochrony i zwiększenia wartości dla usługi interfejsu API. Zasady ograniczania przepustowości, które mają niestandardowe reguły określania zakresu, zapewniają bardziej szczegółową kontrolę nad tymi zasadami, aby umożliwić klientom tworzenie jeszcze lepszych aplikacji. W przykładach w tym artykule pokazano użycie tych zasad przez utworzenie kluczy ograniczania szybkości przy użyciu adresów IP klienta, tożsamości użytkownika i wartości generowanych przez klienta. Można jednak użyć wielu innych części komunikatu, takich jak agent użytkownika, fragmenty ścieżki adresu URL i rozmiar komunikatu.