Ograniczenia liczby żądań

Interfejs Google Ads API dzieli żądania na potrzeby ograniczenia liczby zapytań na sekundę (QPS) według identyfikatora klienta (CID) i tokena programisty, co oznacza, że pomiary są egzekwowane niezależnie w przypadku identyfikatorów klientów i tokenów programisty. Interfejs Google Ads API korzysta z algorytmu Token Bucket do pomiaru liczby żądań i określania odpowiedniego limitu zapytań na sekundę, więc dokładny limit będzie się różnić w zależności od ogólnego obciążenia serwera w danym momencie.

Celem nałożenia limitów szybkości jest zapobieganie zakłócaniu działania usługi przez jednego użytkownika (umyślnie lub nieumyślnie) poprzez 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 szybkości, aktywnie zmniejszając liczbę żądań i ograniczając liczbę zapytań na sekundę po stronie klienta.

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

Poniżej znajdziesz zalecane praktyki uporządkowane według złożoności. Na początku podajemy prostsze strategie, a potem bardziej zaawansowane architektury:

Ograniczanie równoczesnych zadań

Jedną z głównych przyczyn przekraczania limitów szybkości jest to, że aplikacja kliencka tworzy zbyt dużą liczbę zadań równoległych. Nie ograniczamy liczby równoległych żądań, które może wysyłać aplikacja kliencka, ale może ona łatwo przekroczyć limit żądań na sekundę na poziomie tokena dewelopera.

Zalecamy ustawienie rozsądnej górnej granicy łącznej liczby równoczesnych zadań, które będą wysyłać żądania (we wszystkich procesach i na wszystkich maszynach), i zwiększenie jej w celu optymalizacji przepustowości bez przekraczania limitu szybkości.

Możesz też rozważyć ograniczenie liczby zapytań na sekundę po stronie klienta (zobacz Ograniczanie liczby zapytań i ograniczniki szybkości).

Grupowanie żądań

Rozważ łączenie wielu operacji w jedno żądanie. Dotyczy to głównie połączeń MutateFoo. Jeśli na przykład aktualizujesz stan wielu instancji AdGroupAd, zamiast wywoływać MutateAdGroupAds raz dla każdej instancji AdGroupAd możesz wywołać MutateAdGroupAds raz i przekazać wiele wartości operations. Więcej przykładów 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 liczby żądań i limity szybkości

Oprócz ograniczenia łącznej liczby wątków w aplikacji klienckiej możesz też wdrożyć ograniczniki szybkości po stronie klienta. Dzięki temu wszystkie wątki w procesach lub klastrach będą podlegać określonemu limitowi zapytań na sekundę po stronie klienta.

Możesz skorzystać z Guava Rate Limiter 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ólnym magazynie transakcyjnym, takim jak baza danych. Każdy klient musi uzyskać i wykorzystać token, zanim przetworzy żądanie. Jeśli tokeny zostały wykorzystane, klient musi poczekać, aż zostanie wygenerowana kolejna partia tokenów.

Kolejkowanie

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

W przypadku kolejek wiadomości możesz mieć wielu producentów wysyłających wiadomości do kolejki i wielu konsumentów przetwarzających te wiadomości. Ograniczenia przepustowości można wdrożyć po stronie konsumenta, ograniczając liczbę równoczesnych konsumentów, lub wdrożyć ograniczniki szybkości lub przepustowości dla producentów lub konsumentów.

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