Bei Datenpipelines kommt es manchmal zu Spitzen beim veröffentlichten Traffic. Traffic-Spitzen können Abonnenten überfordern, wenn du nicht darauf vorbereitet bist. Eine einfache Lösung, um Trafficanstiege zu vermeiden, besteht darin, die Ressourcen für Pub/Sub-Abonnenten dynamisch zu erhöhen, um mehr Nachrichten zu verarbeiten. Diese Lösung kann jedoch zu höheren Kosten führen oder nicht sofort funktionieren. Möglicherweise benötigen Sie viele VMs.
Mit der Ablaufsteuerung auf Abonnentenseite kann der Abonnent die Rate regulieren, mit der Nachrichten aufgenommen werden. Die Ablaufsteuerung bewältigt also Trafficspitzen, ohne die Kosten zu erhöhen oder bis der Abonnent hochskaliert wird.
Die Ablaufsteuerung ist ein verfügbares Feature in der Pub/Sub-Clientbibliothek auf hoher Ebene. Wenn Sie eine Clientbibliothek auf niedriger Ebene verwenden, können Sie auch Ihre eigene Programmierung zur Ablaufsteuerung implementieren.
Wichtig: Wenn Sie plötzliche Spitzen beim Traffic für veröffentlichte Nachrichten feststellen, verwenden Sie die Ablaufsteuerung in Ihrem Pull-Abonnentenclient, um vorübergehende Spitzen zu bewältigen.
Die Notwendigkeit der Ablaufsteuerung deutet darauf hin, dass Nachrichten schneller veröffentlicht als verarbeitet werden. Wenn dieses Szenario ein dauerhafter Zustand und kein vorübergehender Anstieg des Nachrichtenvolumens ist, sollten Sie die Anzahl der Abonnentenclientinstanzen erhöhen.
Konfiguration der Ablaufsteuerung
Mit der Ablaufsteuerung können Sie die maximale Anzahl von Byte konfigurieren, die für ausstehende Anfragen zugewiesen werden, sowie die maximal zulässige Anzahl ausstehender Nachrichten. Legen Sie diese Limits entsprechend der Durchsatzkapazität Ihrer Clientmaschinen fest.
Die Standardwerte für die Variablen zur Ablaufsteuerung und die Namen der Variablen können sich je nach Clientbibliothek unterscheiden. In der Java-Clientbibliothek werden beispielsweise die folgenden Variablen zur Konfiguration der Ablaufsteuerung verwendet:
setMaxOutstandingElementCount(): Definiert die maximale Anzahl von Nachrichten, für die Pub/Sub keine Bestätigungen oder negativen Bestätigungen erhalten hat.
setMaxOutstandingRequestBytes(): Definiert die maximale Größe von Nachrichten, für die Pub/Sub keine Bestätigungen oder negativen Bestätigungen erhalten hat.
Wenn das Limit für setMaxOutstandingElementCount() oder setMaxOutstandingRequestBytes() überschritten wird, ruft der Abonnentenclient keine weiteren Nachrichten ab. Dieses Verhalten wird fortgesetzt, bis die bereits abgerufenen Nachrichten bestätigt oder negativ bestätigt werden.
So können wir den Durchsatz an die Kosten anpassen, die mit der Ausführung von mehr Abonnenten verbunden sind.
Codebeispiele für die Ablaufsteuerung
Mit den Funktionen zur Ablaufsteuerung des Abonnenten können Sie die Rate steuern, mit der der Abonnentenclient Nachrichten empfängt. Diese Funktionen zur Ablaufsteuerung werden in den folgenden Beispielen veranschaulicht:
C++
Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für C++ in der Kurzanleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Pub/Sub C++ API-Referenzdokumentation.
C#
Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für C# in der Schnellstart-Anleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub C# API.
Go
Im folgenden Beispiel wird die Hauptversion der Go Pub/Sub-Clientbibliothek (v2) verwendet. Wenn Sie noch die v1-Bibliothek verwenden, finden Sie hier die Migrationsanleitung zu v2. Eine Liste der Codebeispiele für Version 1 finden Sie unter Eingestellte Codebeispiele.
Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Go-Einrichtungsanleitung in der Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub Go API.
Java
Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für Java in der Kurzanleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub Java API.
Node.js
Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für PHP in der Schnellstart-Anleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub Node.js API.
Node.js
Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für PHP in der Schnellstart-Anleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub Node.js API.
Python
Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für Python in der Schnellstart-Anleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub Python API.
Ruby
Im folgenden Beispiel wird die Ruby Pub/Sub-Clientbibliothek v3 verwendet. Wenn Sie noch die v2-Bibliothek verwenden, finden Sie hier die Migrationsanleitung für v3. Eine Liste der Ruby v2-Codebeispiele finden Sie unter eingestellte Codebeispiele.
Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Anleitung zur Einrichtung von Ruby in der Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Pub/Sub Ruby API.
Rust
Bevor Sie dieses Beispiel ausprobieren, folgen Sie der Einrichtungsanleitung für Rust in der Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Informationen finden Sie in der Pub/Sub Rust API-Referenzdokumentation.
Nächste Schritte
Weitere Lieferoptionen, die Sie für ein Abo konfigurieren können:
Fehler bei Nachrichten mit der Richtlinie für Abo-Wiederholungen beheben
Nicht zugestellte Nachrichten an ein Thema für unzustellbare Nachrichten weiterleiten
Bereits bestätigte Nachrichten wiedergeben oder Nachrichten löschen
Mehr Nachrichten mit der Funktion zur Steuerung der Parallelität verarbeiten