Ratenlimits
Bei der Google Ads API werden Anfragen für die Ratenbegrenzung nach Abfragen pro Sekunde (QPS) pro Client-Kundennummer (CID) und Entwicklertoken gruppiert. Die Messung erfolgt also unabhängig von CIDs und Entwicklertokens. In der Google Ads API wird ein Token Bucket-Algorithmus verwendet, um Anfragen zu messen und ein angemessenes QPS-Limit zu bestimmen. Das genaue Limit variiert also je nach der allgemeinen Serverlast zu einem bestimmten Zeitpunkt.
Durch Ratenbeschränkungen soll verhindert werden, dass ein Nutzer den Dienst für andere Nutzer stört, indem er (absichtlich oder unabsichtlich) die Google Ads API-Server mit einer großen Anzahl von Anfragen überlastet.
Anfragen, die gegen Ratenbeschränkungen verstoßen, werden mit dem Fehler RESOURCE_TEMPORARILY_EXHAUSTED
abgelehnt.
Sie können die Kontrolle über Ihre App übernehmen und Ratenbeschränkungen abmildern, indem Sie sowohl die Anzahl der Anfragen aktiv reduzieren als auch die QPS clientseitig drosseln.
Es gibt mehrere Möglichkeiten, die Wahrscheinlichkeit einer Überschreitung des Ratenlimits zu verringern. Wenn Sie sich mit den Konzepten von Enterprise Integration Patterns (EIP) wie Messaging, erneute Zustellung und Drosselung vertraut machen, können Sie eine robustere Client-App erstellen.
Die folgenden empfohlenen Vorgehensweisen sind nach Komplexität sortiert. Einfachere Strategien stehen oben, robustere, aber anspruchsvollere Architekturen folgen danach:
Gleichzeitige Aufgaben begrenzen
Eine Ursache für das Überschreiten von Ratenbeschränkungen ist, dass die Client-App eine übermäßige Anzahl paralleler Aufgaben ausführt. Wir beschränken zwar nicht die Anzahl der parallelen Anfragen, die eine Client-App haben kann, aber das Limit für Anfragen pro Sekunde auf Entwicklertokenebene kann dadurch leicht überschritten werden.
Es wird empfohlen, eine angemessene Obergrenze für die Gesamtzahl der gleichzeitigen Aufgaben festzulegen, die Anfragen stellen (über alle Prozesse und Maschinen hinweg), und diese nach oben anzupassen, um den Durchsatz zu optimieren, ohne das Ratenlimit zu überschreiten.
Außerdem können Sie die QPS clientseitig drosseln (siehe Drosselung und Ratenbegrenzung).
Batchanfragen
Fassen Sie mehrere Vorgänge in einer einzelnen Anfrage zusammen. Das ist vor allem bei MutateFoo
-Anrufen relevant. Wenn Sie beispielsweise den Status für mehrere Instanzen von AdGroupAd
aktualisieren, können Sie MutateAdGroupAds
einmal aufrufen und mehrere operations
übergeben, anstatt MutateAdGroupAds
einmal für jede AdGroupAd
aufzurufen. Weitere Beispiele finden Sie in unserem Leitfaden für Batchvorgänge.
Durch das Bündeln von Anfragen wird die Gesamtzahl der Anfragen reduziert und das Ratenlimit für Anfragen pro Minute wird umgangen. Wenn Sie jedoch eine große Anzahl von Vorgängen für ein einzelnes Konto ausführen, kann das Ratenlimit für Vorgänge pro Minute ausgelöst werden.
Drosselung und Ratenbegrenzer
Neben der Begrenzung der Gesamtzahl von Threads in Ihrer Client-Anwendung können Sie auch Ratenbegrenzungen für den Client implementieren. So können Sie dafür sorgen, dass alle Threads in Ihren Prozessen und / oder Clustern clientseitig einem bestimmten QPS-Limit unterliegen.
Sie können sich den Guava Rate Limiter ansehen oder einen eigenen Token Bucket-basierten Algorithmus für eine Clusterumgebung implementieren. Sie könnten beispielsweise Tokens generieren und in einem gemeinsamen transaktionalen Speicher wie einer Datenbank speichern. Jeder Client müsste ein Token abrufen und verwenden, bevor er die Anfrage verarbeitet. Wenn die Tokens aufgebraucht sind, muss der Client warten, bis die nächste Gruppe von Tokens generiert wird.
Wiedergabeliste
Eine Message Queue ist die Lösung für die Verteilung der Betriebslast und zur Steuerung der Anfrage- und Verbraucherraten. Es gibt eine Reihe von Optionen für Message Queues – einige Open Source, einige proprietär – und viele von ihnen können mit verschiedenen Sprachen verwendet werden.
Bei der Verwendung von Message Queues können mehrere Producer Nachrichten in die Warteschlange einfügen und mehrere Consumer diese Nachrichten verarbeiten. Sie können die Anzahl gleichzeitiger Empfänger drosseln oder Ratenbegrenzungen/Drosselungen für Sender oder Empfänger erstellen.
Wenn ein Nachrichten-Consumer beispielsweise einen Ratenbegrenzungsfehler feststellt, kann er die Anfrage zur Wiederholung an die Warteschlange zurückgeben. Gleichzeitig kann dieser Verbraucher alle anderen Verbraucher benachrichtigen, die Verarbeitung für einige Sekunden zu pausieren, um sich von dem Fehler zu erholen.