Interfejs Google Ads API egzekwuje ograniczenia liczby zapytań na sekundę (QPS) niezależnie w przypadku identyfikatorów klientów i projektów Google Cloud. Interfejs Google Ads API używa algorytmu zasobnika tokena do pomiaru liczby żądań i określania odpowiedniego limitu zapytania/s, dlatego 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 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, zostaną odrzucone z błędem:
RESOURCE_TEMPORARILY_EXHAUSTED.
Możesz przejąć kontrolę nad aplikacją i ograniczyć limity, aktywnie zmniejszając liczbę żądań i ograniczając QPS po stronie klienta.
Istnieje kilka sposobów na zmniejszenie prawdopodobieństwa przekroczenia limitu. 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:
Ogranicz liczbę równoczesnych zadań
Jedną z głównych przyczyn przekraczania limitów 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 liczby żądań na sekundę na poziomie projektu Google Cloud.
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ększenie go w celu optymalizacji przepustowości bez przekraczania limitu.
Możesz też ograniczyć QPS po stronie klienta (więcej informacji znajdziesz w sekcji Ograniczanie i limity).
Grupowanie żądań
Rozważ grupowanie wielu operacji w jednym żądaniu. Najlepiej sprawdza się to w przypadku wywołań Mutate w różnych usługach. Jeśli na przykład
aktualizujesz stan wielu instancji AdGroupAd, możesz
wywołać MutateAdGroupAds tylko raz i przekazać
wiele operations zamiast wywoływać
MutateAdGroupAds raz dla każdej
AdGroupAd. Dodatkowe
przykłady znajdziesz w naszych
wskazówkach dotyczących operacji zbiorczych.
Grupowanie żądań zmniejsza łączną liczbę żądań i ogranicza limity liczby żądań na minutę, ale może spowodować przekroczenie limitu liczby operacji na minutę, jeśli wykonasz dużą liczbę operacji na jednym koncie.
Ograniczanie i limity
Oprócz ograniczenia łącznej liczby wątków w aplikacji możesz też wdrożyć limity 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ć ogranicznika Guava lub wdrożyć własny algorytm oparty na zasobniku tokena 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 się skończą, klient będzie musiał poczekać na wygenerowanie następnej partii tokenów.
Kolejkowanie
Kolejka wiadomości to rozwiązanie do dystrybucji obciążenia operacjami, które umożliwia też kontrolowanie 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 wysyłających wiadomości do kolejki i wielu konsumentów przetwarzających te wiadomości. Ograniczenia można wdrożyć po stronie konsumenta, ograniczając liczbę równoczesnych konsumentów, lub wdrożyć limity lub ograniczenia dla producentów lub konsumentów.
Jeśli na przykład konsument wiadomości napotka błąd limitu, 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.