Ratenlimits

Die Google Ads API gruppiert Anfragen zur Ratenbegrenzung nach Abfragen pro Sekunde pro Client-Kundennummer und Entwicklertoken. Das bedeutet, dass die Messung sowohl für Kundennummern als auch für Entwicklertokens unabhängig ist. Die Google Ads API nutzt einen Token Bucket-Algorithmus, um die Anzahl der Anfragen zu messen und ein geeignetes Limit für die Anzahl der Abfragen pro Sekunde zu bestimmen. Das genaue Limit hängt also von der gesamten Serverlast zu einem bestimmten Zeitpunkt ab.

Mit Ratenbegrenzungen soll verhindert werden, dass ein Nutzer den Dienst für andere Nutzer unterbricht, indem die Google Ads API-Server absichtlich oder unbeabsichtigt mit vielen Anfragen überlastet werden.

Anfragen, die gegen die Ratenbegrenzungen verstoßen, werden mit dem folgenden Fehler abgelehnt: RESOURCE_TEMPORARILY_EXHAUSTED.

Sie können die Kontrolle über Ihre Anwendung übernehmen und die Ratenbegrenzungen abmildern, indem Sie sowohl die Anzahl der Anfragen aktiv reduzieren als auch die Abfragen pro Sekunde auf Clientseite drosseln.

Es gibt verschiedene Möglichkeiten, das Risiko einer Überschreitung der Ratenbegrenzung zu verringern. Machen Sie sich mit den Enterprise Integration Patterns-Konzepten (EIP) wie Benachrichtigung, erneuter Zustellung und Drosselung vertraut, um eine robustere Client-App zu erstellen.

Die folgenden empfohlenen Vorgehensweisen sind nach Komplexität geordnet, wobei einfachere Strategien an der Spitze und robustere, aber ausgefeiltere Architekturen folgen:

Gleichzeitige Aufgaben begrenzen

Eine Ursache für das Überschreiten der Ratenbegrenzungen ist eine übermäßige Anzahl paralleler Aufgaben durch die Clientanwendung. Die Anzahl der parallelen Anfragen einer Clientanwendung ist zwar nicht begrenzt, aber das Limit für Anfragen pro Sekunde auf Entwicklertoken-Ebene kann leicht überschritten werden.

Es wird empfohlen, eine angemessene Obergrenze für die Gesamtzahl der gleichzeitigen Aufgaben festzulegen, die Anfragen (über alle Prozesse und Maschinen hinweg) stellen, und eine Anpassung nach oben, um den Durchsatz zu optimieren, ohne die Ratenbegrenzung zu überschreiten.

Außerdem können Sie die Abfragen pro Sekunde clientseitig drosseln (siehe Drosselung und Ratenbegrenzung).

Batchanfragen

Erwägen Sie, mehrere Vorgänge in einer einzigen Anfrage zusammenzufassen. Dies gilt am besten für MutateFoo-Aufrufe. Wenn Sie beispielsweise den Status für mehrere Instanzen von AdGroupAd aktualisieren, können Sie, anstatt für jedes AdGroupAd einmal MutateAdGroupAds aufzurufen, MutateAdGroupAds einmal aufrufen und mehrere operations übergeben. Weitere Beispiele finden Sie in unserer Anleitung für Batchvorgänge.

Durch die Batchverarbeitung von Anfragen wird zwar die Gesamtzahl der Anfragen reduziert und das Ratenlimit für Anfragen pro Minute verringert, es kann jedoch die Ratenbegrenzung für Vorgänge pro Minute auslösen, wenn Sie eine große Anzahl von Vorgängen für ein einzelnes Konto ausführen.

Drosselung und Ratenbegrenzung

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 für alle Threads in Ihren Prozessen und / oder Clustern ein bestimmtes Limit für die Anzahl der Abfragen pro Sekunde auf Clientseite gilt.

Dazu können Sie den Guava Rate Limiter verwenden oder einen eigenen Token Bucket-basierten Algorithmus für eine Clusterumgebung implementieren. Sie können beispielsweise Tokens generieren und in einem freigegebenen Transaktionsspeicher wie einer Datenbank speichern. Jeder Client muss ein Token erwerben und verbrauchen, bevor er die Anfrage verarbeitet. Wenn die Tokens aufgebraucht wären, muss der Client warten, bis der nächste Batch von Tokens generiert wurde.

Wiedergabeliste

Eine Nachrichtenwarteschlange ist die Lösung für die Verteilung von Vorgangslasten. Dabei werden gleichzeitig die Anfrage- und Nutzerraten gesteuert. Es gibt eine Reihe von Optionen für Nachrichtenwarteschlangen – einige Open-Source- und proprietäre – und viele davon können in verschiedenen Sprachen verwendet werden.

Wenn Sie Nachrichtenwarteschlangen verwenden, können mehrere Ersteller Nachrichten in die Warteschlange stellen und mehrere Empfänger können 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 zum Beispiel auf einen Ratenbegrenzungsfehler stößt, kann dieser die Anfrage an die Warteschlange zurückgeben, um einen erneuten Versuch zu starten. Gleichzeitig kann dieser Nutzer alle anderen Nutzer benachrichtigen, die Verarbeitung für einige Sekunden zu unterbrechen, um den Fehler zu beheben.