Ratenlimits
Die Google Ads API fasst Anfragen für die Ratenbegrenzung nach Abfragen pro Sekunde (QPS) pro Kundennummer (Client Customer ID, CID) und Entwicklertoken zusammen. Das bedeutet, dass die Messung unabhängig von CIDs und Entwicklertokens erzwungen wird. Die Google Ads API verwendet einen Token Bucket-Algorithmus, um Anfragen zu messen und ein geeignetes QPS-Limit zu bestimmen. Das genaue Limit variiert daher je nach aktueller Gesamtserverlast.
Mithilfe von Ratelimits soll verhindert werden, dass ein Nutzer den Dienst für andere Nutzer stört, indem er (absichtlich oder unbeabsichtigt) die Google Ads API-Server mit einer großen Anzahl von Anfragen überlastet.
Anfragen, die gegen die Ratenlimits verstoßen, werden mit dem Fehler RESOURCE_TEMPORARILY_EXHAUSTED
abgelehnt.
Sie können die Kontrolle über Ihre App übernehmen und die Ratenbegrenzungen verringern, indem Sie sowohl die Anzahl der Anfragen aktiv reduzieren als auch die QPS auf der Clientseite drosseln.
Es gibt verschiedene Möglichkeiten, die Wahrscheinlichkeit zu verringern, dass die Ratenbeschränkung überschritten wird. Wenn Sie sich mit den Konzepten von Enterprise Integration Patterns (EIP) wie Messaging, erneuter Zustellung und Drosselung vertraut machen, können Sie eine robustere Client-App erstellen.
Die folgenden Best Practices sind nach Komplexität sortiert, wobei einfachere Strategien oben und robustere, aber ausgefeiltere Architekturen unten stehen:
Gleichzeitige Aufgaben begrenzen
Eine häufige Ursache für das Überschreiten der Ratenlimits ist, dass die Client-App eine übermäßige Anzahl paralleler Aufgaben generiert. Wir beschränken zwar nicht die Anzahl der parallelen Anfragen, die eine Client-App stellen kann, aber das Limit für Anfragen pro Sekunde auf Entwicklertokenebene kann 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 die Ratenbegrenzung zu überschreiten.
Außerdem können Sie die Abfragen pro Sekunde auf der Clientseite drosseln (siehe Drosselung und Ratenbegrenzungen).
Batchanfragen
Sie können mehrere Vorgänge in einer einzigen Anfrage zusammenfassen. Das gilt vor allem für MutateFoo
-Anrufe. 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 Batch-Vorgänge.
Das Bündeln von Anfragen reduziert zwar die Gesamtzahl der Anfragen und mindert die Beschränkung der Anzahl der Anfragen pro Minute, kann aber die Beschränkung der Anzahl der Vorgänge pro Minute auslösen, wenn Sie eine große Anzahl von Vorgängen für ein einzelnes Konto ausführen.
Drosselung und Ratenbegrenzungen
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 von der Clientseite aus durch ein bestimmtes QPS-Limit gesteuert werden.
Sie können sich den Guava Rate Limiter ansehen oder einen eigenen Token Bucket-basierten Algorithmus für eine clusterbasierte Umgebung implementieren. Sie können beispielsweise Tokens generieren und in einem freigegebenen Transaktionsspeicher wie einer Datenbank speichern. Jeder Client muss dann ein Token abrufen und verwenden, bevor er die Anfrage verarbeitet. Wenn die Tokens aufgebraucht sind, muss der Client warten, bis die nächste Token-Batch generiert wird.
Wiedergabeliste
Eine Nachrichtenwarteschlange ist die Lösung für die Lastverteilung bei der Datenverarbeitung und steuert gleichzeitig die Anfrage- und Nutzerraten. Es gibt eine Reihe von Optionen für Nachrichten-Queues – einige Open Source, einige proprietär – und viele davon können mit verschiedenen Sprachen verwendet werden.
Bei der Verwendung von Nachrichtenwarteschlangen können mehrere Ersteller Nachrichten in die Warteschlange schieben und mehrere Verbraucher diese Nachrichten verarbeiten. Sie können die Anzahl gleichzeitiger Empfänger drosseln oder Ratenbegrenzungen/Drosselungen für Sender oder Empfänger erstellen.
Wenn ein Nachrichtenempfänger beispielsweise einen Fehler beim Grenzwert für Preise feststellt, kann er die Anfrage zur Wiederaufnahme an die Warteschlange zurückgeben. Gleichzeitig kann dieser Verbraucher alle anderen Verbraucher benachrichtigen, die Verarbeitung für einige Sekunden zu pausieren, um den Fehler zu beheben.