Bei Datenpipelines kommt es manchmal zu Spitzen bei veröffentlichten Daten. Traffic-Spitzen können Abonnenten überfordern, wenn du nicht darauf vorbereitet bist. Eine einfache Lösung, um Trafficspitzen zu vermeiden, besteht darin, die Pub/Sub-Abonnentenressourcen 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 der Abonnentenseite kann der Abonnent die Rate regulieren, mit der Nachrichten aufgenommen werden. Die Flusssteuerung kann also Trafficspitzen bewältigen, ohne dass die Kosten steigen oder bis der Abonnent skaliert wird.
Die Ablaufsteuerung ist ein verfügbares Feature in der Pub/Sub-Clientbibliothek auf hoher Ebene. Sie können auch Ihre eigene Ablaufsteuerungsprogrammierung implementieren, wenn Sie eine Clientbibliothek auf niedriger Ebene verwenden.
Die Notwendigkeit der Ablaufsteuerung zeigt, dass Nachrichten mit einer höheren Geschwindigkeit veröffentlicht werden, als sie verarbeitet werden können. Wenn dies ein Dauerzustand ist und kein vorübergehender Anstieg des Nachrichtenvolumens, sollten Sie die Anzahl der Abonnentenclient-Instanzen erhöhen.
Konfiguration der Ablaufsteuerung
Mit der Flusssteuerung können Sie die maximale Anzahl der Bytes konfigurieren, die für ausstehende Anfragen zugewiesen sind, und die maximale Anzahl zulässiger ausstehender Nachrichten. Legen Sie diese Limits entsprechend der Durchsatzkapazität Ihrer Clientmaschinen fest.
Die Standardwerte für die Ablaufsteuerungsvariablen 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
Wenn Sie die Geschwindigkeit steuern möchten, mit der der Abonnentenclient Nachrichten empfängt, verwenden Sie die Ablaufsteuerungsfunktionen des Abonnenten. Diese Ablaufsteuerungsfunktionen 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 Referenzdokumentation zur Pub/Sub C++ API.
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 zu 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 den Migrationsleitfaden für v2. Eine Liste der Codebeispiele für Version 1 finden Sie unter Eingestellte Codebeispiele.
Bevor Sie dieses Beispiel testen, folgen Sie der Einrichtungsanleitung für Go in der Schnellstart-Anleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zu 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 zu 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 zu 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 zu 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 zu 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 Einrichtungsanleitung für Ruby im Schnellstart: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zu Pub/Sub Ruby API.
Nächste Schritte
Weitere Auslieferungsoptionen, die Sie für ein Abo konfigurieren können:
Nachrichtenfehler mit der Richtlinie für Abo-Wiederholungsversuche behandeln
Nicht zugestellte Nachrichten an ein Thema für unzustellbare Nachrichten weiterleiten
Zuvor bestätigte Nachrichten wiedergeben oder Nachrichten löschen
Mehr Nachrichten mit der Funktion zur Steuerung der Parallelität verarbeiten