Ratenlimits
Mit der Google Ads API werden Anfragen zur Ratenbegrenzung anhand von Abfragen pro Sekunde pro Client-Kundennummer und Entwicklertoken gruppiert. Das bedeutet, dass die Messung unabhängig sowohl für Kundennummern als auch für Entwicklertoken erzwungen wird. Die Google Ads API verwendet einen Token Bucket-Algorithmus, um Anfragen zu messen und ein geeignetes Limit für Abfragen pro Sekunde zu bestimmen. Das genaue Limit hängt also von der gesamten Serverlast zu einem bestimmten Zeitpunkt ab.
Damit 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 Ratenbegrenzung verstoßen, werden mit der folgenden Fehlermeldung abgelehnt: RESOURCE_TEMPORARILY_EXHAUSTED
.
Sie können die Kontrolle über Ihre Anwendung übernehmen und die Ratenbegrenzungen minimieren, indem Sie die Anzahl der Anfragen aktiv reduzieren und die Abfragen pro Sekunde vom Client drosseln.
Es gibt mehrere Möglichkeiten, die Wahrscheinlichkeit einer Überschreitung der Ratenbegrenzung zu verringern. Machen Sie sich mit den Enterprise Integration Patterns-Konzepten (EIP) wie Messaging, erneuter Zustellung und Drosselung vertraut, um eine robustere Client-App zu erstellen.
Die folgenden empfohlenen Praktiken sind nach Komplexität geordnet, wobei am Anfang einfachere Strategien und danach robustere, aber komplexere Architekturen stehen:
Gleichzeitige Aufgaben begrenzen
Eine Ursache für das Überschreiten von Ratenbegrenzungen ist, dass die Clientanwendung übermäßig viele parallele Aufgaben erzeugt. Die Anzahl der parallelen Anfragen, die eine Clientanwendung haben kann, ist zwar nicht begrenzt, aber der Grenzwert 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 senden (über alle Prozesse und Maschinen hinweg), und den Wert nach oben anzupassen, um den Durchsatz zu optimieren, ohne die Ratenbegrenzung zu überschreiten.
Außerdem können Sie die Abfragen pro Sekunde vom Client drosseln. Weitere Informationen finden Sie unter Drosselung und Ratenbegrenzungen.
Batchanfragen
Fassen Sie mehrere Vorgänge in einer einzigen Anfrage zusammen. Dies gilt vor allem für MutateFoo
-Aufrufe. 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 jedes AdGroupAd
aufzurufen. Weitere Beispiele finden Sie in unserer Anleitung zu Batchvorgängen.
Durch die Batchverarbeitung von Anfragen wird zwar die Gesamtzahl der Anfragen verringert und die Ratenbegrenzung für Anfragen pro Minute reduziert. Sie 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 Ratenbegrenzungen
Neben der Begrenzung der Gesamtzahl von Threads in Ihrer Client-Anwendung können Sie auch Ratenbegrenzungen für den Client implementieren. Dadurch wird sichergestellt, dass alle Threads in Ihren Prozessen und / oder Clustern einem bestimmten QPS-Limit auf Clientseite unterliegen.
Sie können dazu den Guava Rate Limiter verwenden oder Ihren eigenen Token-Bucket-basierten Algorithmus für eine Cluster-Umgebung implementieren. Sie könnten beispielsweise Tokens generieren und sie in einem freigegebenen Transaktionsspeicher wie einer Datenbank speichern. Jeder Client müsste dann ein Token erwerben und verbrauchen, bevor er die Anfrage verarbeitet. Wenn die Tokens aufgebraucht sind, muss der Client warten, bis der nächste Batch von Tokens generiert wurde.
Wiedergabeliste
Eine Nachrichtenwarteschlange ist die Lösung für die Verteilung der Vorgangslast. Sie steuert außerdem die Anfrage- und Nutzerraten. Es gibt eine Reihe von Optionen für Nachrichtenwarteschlangen – von denen einige Open-Source- und andere proprietär sind – und viele davon funktionieren mit verschiedenen Programmiersprachen.
Bei der Verwendung von Nachrichtenwarteschlangen 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 beispielsweise ein Nachrichtennutzer auf einen Ratenbegrenzungsfehler stößt, kann dieser Nutzer die Anfrage an die Warteschlange zurückgeben, um einen erneuten Versuch zu starten. Gleichzeitig kann der Nutzer auch alle anderen Nutzer benachrichtigen, die Verarbeitung einige Sekunden lang zu unterbrechen, um den Fehler zu beheben.