Ograniczenia liczby żądań

Interfejs Google Ads API grupuje żądania na potrzeby ograniczania liczby żądań według liczby zapytań na sekundę (QPS) na identyfikator klienta (CID) i token programisty. Oznacza to, że pomiar jest wymuszany niezależnie w przypadku identyfikatorów CID i tokenów programisty. Interfejs Google Ads API używa algorytmu Token Bucket do pomiaru żądań i określania odpowiedniego limitu QPS więc dokładny limit będzie się różnić w zależności od ogólnego obciążenia serwera w danym momencie.

Celem wprowadzenia ograniczeń liczby żądań jest uniemożliwienie jednemu użytkownikowi zakłócania działania usługi dla innych użytkowników przez (świadome lub nieświadome) przeciążanie serwerów interfejsu Google Ads API dużą liczbą żądań.

Żądania, które naruszają limity liczby żądań, zostaną odrzucone z błędem: RESOURCE_TEMPORARILY_EXHAUSTED.

Możesz przejąć kontrolę nad aplikacją i ograniczyć liczbę żądań, aktywnie zmniejszając ich liczbę i ograniczając QPS po stronie klienta.

Istnieje kilka sposobów na zmniejszenie prawdopodobieństwa przekroczenia limitu liczby żądań. Zapoznanie się z koncepcjami wzorców integracji przedsiębiorstw (EIP) takimi jak przesyłanie wiadomości, ponowne dostarczanie i ograniczanie, może pomóc w tworzeniu bardziej niezawodnej aplikacji klienckiej.

Poniżej znajdziesz zalecane metody uporządkowane według złożoności – od najprostszych strategii po bardziej zaawansowane architektury:

Ograniczanie liczby równoczesnych zadań

Jedną z głównych przyczyn przekraczania limitów liczby żądań jest to, że aplikacja kliencka tworzy zbyt dużą liczbę równoległych zadań. Nie ograniczamy liczby równoległych żądań, które może mieć aplikacja kliencka, ale może to spowodować przekroczenie limitu żądań na sekundę na poziomie tokena programisty.

Zalecamy ustawienie rozsądnego górnego limitu łącznej liczby równoczesnych zadań, które będą wysyłać żądania (we wszystkich procesach i na wszystkich maszynach), oraz zwiększanie go w celu optymalizacji przepustowości bez przekraczania limitu liczby żądań.

Możesz też ograniczyć QPS po stronie klienta (więcej informacji znajdziesz w sekcji Ograniczanie i limity liczby żądań).

Grupowanie żądań

Rozważ grupowanie wielu operacji w jednym żądaniu. Najlepiej sprawdza się to w przypadku wywołań MutateFoo. Jeśli na przykład aktualizujesz stan dla wielu instancji AdGroupAd – zamiast wywoływać MutateAdGroupAds raz dla każdej instancji AdGroupAd, możesz wywołać MutateAdGroupAds raz i przekazać wiele operations. Dodatkowe przykłady znajdziesz w naszych wskazówkach dotyczących operacji zbiorczych.

Grupowanie żądań zmniejsza łączną liczbę żądań i ogranicza limit żądań na minutę, ale może spowodować przekroczenie limitu operacji na minutę, jeśli wykonasz dużą liczbę operacji na jednym koncie.

Ograniczanie i limity liczby żądań

Oprócz ograniczenia łącznej liczby wątków w aplikacji klienckiej możesz też wdrożyć limity liczby żądań po stronie klienta. Dzięki temu wszystkie wątki w procesach i / lub klastrach będą podlegać określonemu limitowi QPS po stronie klienta.

Możesz użyć limitu liczby żądań Guava lub wdrożyć własny algorytm oparty na Token Bucket w środowisku klastrowym. Możesz na przykład generować tokeny i przechowywać je we współdzielonym magazynie transakcyjnym, takim jak baza danych, a każdy klient będzie musiał uzyskać i wykorzystać token, zanim przetworzy żądanie. Jeśli tokeny zostaną wyczerpane, klient będzie musiał poczekać na wygenerowanie następnej partii tokenów.

Kolejkowanie

Kolejka wiadomości to rozwiązanie do dystrybucji obciążenia operacjami, a także do kontrolowania liczby żądań i konsumentów. Dostępnych jest wiele opcji kolejek wiadomości – niektóre są open source, inne zastrzeżone – i wiele z nich może działać w różnych językach.

W przypadku korzystania z kolejek wiadomości możesz mieć wielu producentów, którzy wysyłają wiadomości do kolejki, oraz wielu konsumentów, którzy je przetwarzają. Ograniczenia można wdrożyć po stronie konsumenta, ograniczając liczbę równoczesnych konsumentów, lub wdrożyć limity liczby żądań bądź ograniczenia dla producentów lub konsumentów.

Jeśli na przykład konsument wiadomości napotka błąd limitu liczby żądań, może zwrócić żądanie do kolejki, aby ponowić próbę. Jednocześnie może też powiadomić wszystkich innych konsumentów, aby wstrzymali przetwarzanie na kilka sekund w celu naprawienia błędu.