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 ID 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ń.
Prośby, 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 liczbę żądań na sekundę 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 zaawansowane, ale zaawansowane rozwiązania:
- Ograniczanie liczby równoczesnych zadań
- Przesyłanie zbiorczych zapytań
- Ograniczanie przepustowości i ograniczniki szybkości
- Kolejkowanie
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 żądań
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.
Chociaż grupowanie żądań zmniejsza łączną liczbę żądań i zmniejsza limit żądań na minutę, może też 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 ramach procesów lub klastrów będą podlegać określonemu limitowi QPS ze strony 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 musi pozyskać i wykorzystać token, zanim przetworzy żądanie. Jeśli tokeny zostaną wykorzystane, klient będzie musiał poczekać, aż wygeneruje się kolejna partia 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, inne 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 jednoczesnych 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 stawek, 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.