Ograniczenia liczby żądań

Interfejs Google Ads API grupuje żądania do ograniczania szybkości według liczby zapytań na sekundę (QPS) na identyfikator klienta (ID klienta) i token programisty, co oznacza, że pomiar jest stosowany niezależnie od identyfikatorów klienta i tokenów programisty. Interfejs Google Ads API korzysta z algorytmu Token Bucket do pomiaru zapytań i określania odpowiedniego limitu QPS, więc dokładny limit będzie się zmieniać 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, który (celowo lub przypadkowo) przeciąża serwery interfejsu Google Ads API dużą liczbą żądań.

Żądania, które naruszają limity szybkości, będą odrzucane z błędem: RESOURCE_TEMPORARILY_EXHAUSTED.

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

Istnieje kilka sposobów zmniejszenia prawdopodobieństwa przekroczenia limitu szybkości. Poznanie koncepcji wzorców integracji korporacyjnej (EIP), takich jak wiadomości, ponowne dostarczanie i ograniczanie przepustowości, może pomóc Ci w utworzeniu bardziej niezawodnej aplikacji klienckiej.

Podane niżej sprawdzone metody są uporządkowane według stopnia złożoności: na górze znajdują się prostsze strategie, a poniżej bardziej niezawodne, ale zaawansowane architektury:

Ograniczanie liczby równoczesnych zadań

Jedną z głównych przyczyn przekroczenia limitów szybkości jest to, że aplikacja kliencka tworzy nadmierną liczbę zadań równoległych. Nie ograniczamy liczby równoczesnych żądań, które może wysyłać aplikacja klienta, ale może to łatwo przekroczyć limit żądań na sekundę na poziomie tokenu 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), oraz zwiększanie tej liczby w celu optymalizacji przepustowości bez przekraczania limitu szybkości.

Możesz też rozważyć ograniczenie QPS po stronie klienta (zobacz Ograniczanie i ograniczniki szybkości).

Grupowanie próśb

Rozważ zgrupowanie kilku operacji w jednym żądaniu. Dotyczy to głównie połączeń MutateFoo. Jeśli na przykład aktualizujesz stan wielu instancji AdGroupAd, zamiast wywoływać funkcję MutateAdGroupAds raz dla każdej instancji AdGroupAd, możesz wywołać funkcję MutateAdGroupAds raz i przekazać wiele parametrów operations. Aby zobaczyć dodatkowe przykłady, zapoznaj się z wskazówkami dotyczącymi operacji zbiorczych.

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

Ograniczanie liczby żądań i ograniczniki szybkości

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

Możesz skorzystać z Guava Rate Limiter lub zaimplementować własny algorytm oparty na TokenBucket w środowisku z wieleźami. Możesz na przykład generować tokeny i przechowywać je w wspólnym magazynie transakcyjnym, takim jak baza danych. Każdy klient musiałby pobrać i wykorzystać token, zanim przetworzy prośbę. Jeśli tokeny zostaną wykorzystane, klient będzie musiał poczekać na wygenerowanie kolejnej partii tokenów.

Kolejkowanie

Kolejka wiadomości to rozwiązanie do rozkładu obciążenia operacji, które jednocześnie kontroluje żądania i tempo konsumpcji. Dostępnych jest wiele opcji kolejek wiadomości – niektóre są typu open source, a niektóre zastrzeżone – i wiele z nich może działać z różnymi językami.

Korzystając z kolejek wiadomości, możesz mieć wielu producentów przesyłających wiadomości do kolejki i wielu konsumentów przetwarzających te wiadomości. Ograniczenia mogą być stosowane po stronie konsumenta przez ograniczenie liczby równoczesnych konsumentów lub przez wdrożenie ograniczników szybkości dla producentów lub konsumentów.

Jeśli na przykład odbiorca wiadomości napotka błąd limitu szybkości, może zwrócić żądanie do kolejki, aby spróbować ponownie. Jednocześnie może on powiadomić wszystkich innych konsumentów, aby wstrzymali przetwarzanie na kilka sekund, aby naprawić błąd.