Ograniczenia liczby żądań

Interfejs Google Ads API grupuje żądania na potrzeby ograniczania liczby żądań według zapytań na sekundę (QPS) na identyfikator klienta (CID) i token dewelopera. Oznacza to, że pomiar jest wymuszany niezależnie w przypadku identyfikatorów CID i tokenów dewelopera. 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 innym użytkownikom 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ć limity liczby żądań, aktywnie zmniejszając liczbę żądań 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 prostszych 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ę zadań równoległych. 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 dewelopera.

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ń.

Ponadto możesz rozważyć ograniczenie QPS po stronie klienta (zapoznaj się z sekcją 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ż zaimplementować 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 zapoznać się z ogranicznikiem liczby żądań Guava lub zaimplementować 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 kolejki 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 zaimplementować po stronie konsumenta, ograniczając liczbę równoczesnych konsumentów, lub zaimplementować 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.