Best Practices für das Abonnieren eines Pub/Sub-Themas

Beim Abonnieren empfängt ein Abonnentenclient Nachrichten von einem Pub/Sub-Thema. Hier sind einige Best Practices für das Abonnieren von Pub/Sub.

In diesem Dokument wird davon ausgegangen, dass Sie bereits mit dem Abonnieren eines Pub/Sub-Themas und dem Empfangen von Nachrichten in Ihrem Abonnentenclient vertraut sind.

Wenn Sie Pub/Sub noch nicht kennen, lesen Sie eine der Kurzanleitungen, um zu erfahren, wie Sie Pub/Sub mit der Console, der Google Cloud CLI oder den Clientbibliotheken verwenden.

Das richtige Abo auswählen

Pub/Sub bietet Standardabos wie Push- und Pull-Abos. Zusätzlich zu den Standardabos bietet Pub/Sub auch Exportabos, mit denen Sie Nachrichten direkt in einerGoogle Cloud -Ressource speichern können, ohne Dataflow als Zwischenstufe zu benötigen. BigQuery-Abos speichern Nachrichten beispielsweise in einer BigQuery-Tabelle.

Push-Abos werden für die folgenden Szenarien empfohlen:

  • Sie dürfen keinen Code in Ihre Abonnentenanwendung einfügen, der die Clientbibliothek als Abhängigkeit importiert.

  • Der Abonnentenclient kann keine ausgehenden Anfragen stellen.

  • Sie möchten dieselbe Instanz verwenden, um Nachrichten aus verschiedenen Themen und Abos zu verarbeiten, wobei der Abonnentenclient die Liste der Abos nicht kennt.

Für allgemeine Fälle empfehlen wir die Verwendung der High-Level-Clientbibliothek. Wenn Sie stattdessen den unären Pull verwenden, setzen Sie returnImmediately nicht auf true. Wenn Sie true festlegen, wirkt sich das negativ auf die Pull-Leistung aus. Das Feld returnImmediately wurde eingestellt.

Nachrichten vor dem Bestätigen verarbeiten

Standardmäßig verwirft Pub/Sub eine Nachricht aus einem Abo, nachdem die Nachricht bestätigt wurde. Wenn Sie eine Nachricht nicht verarbeiten, bevor Sie eine Bestätigung senden, und die Verarbeitung fehlschlägt, wird die Nachricht nicht noch einmal zugestellt. Eine Ausnahme liegt vor, wenn Sie die Aufbewahrung bestätigter Nachrichten oder die Themenaufbewahrung konfiguriert haben und einen Suchvorgang ausführen.

Wenn Sie Abonnenten mit hoher Latenz haben, müssen Sie möglicherweise benutzerdefinierte Werte für die Flusssteuerung und die Lease-Verwaltung festlegen.

Nachrichten-IDs beibehalten

Um die Fehlerbehebung zu vereinfachen, sollten Publisher und Abonnenten die Nachrichten-IDs veröffentlichter Nachrichten aufbewahren. Sie können entweder die ID jeder veröffentlichten Nachricht speichern oder das Logging von Nachrichten-IDs nach Bedarf aktivieren. Wenn Sie die Nachrichten-IDs beibehalten, können Sie Probleme mit doppelten Nachrichten, erneuten Zustellungen, Datenverlust und andere häufige Probleme leichter beheben. Weitere Informationen finden Sie unter Umgang mit Duplikaten.

Ablaufsteuerung für Abonnenten für vorübergehende Trafficspitzen konfigurieren

Mit der Flusssteuerung auf der Abonnentenseite können Sie verhindern, dass Abonnenten durch Traffic-Spitzen überlastet werden. So können Autoscaling-Mechanismen auf eine erhöhte Last reagieren oder die Verarbeitung der Last über einen längeren Zeitraum verteilen. Die erste Methode spart Latenz, die zweite Kosten.

Wenn Sie die Flusssteuerung konfigurieren möchten, müssen Sie entsprechende Werte für maximum outstanding messages und total outstanding message bytes festlegen. Die Standardwerte für diese Variablen zur Flusssteuerung und die Namen der Variablen können sich je nach Clientbibliothek unterscheiden.

  • Maximale Anzahl ausstehender Nachrichten definiert die maximale Anzahl von Nachrichten, die an den Client gesendet werden und für die Pub/Sub keine Bestätigungen oder negativen Bestätigungen erhalten hat.

  • Gesamtzahl der ausstehenden Nachrichtenbytes definiert die maximale Gesamtgröße der an den Client zugestellten Nachrichten, für die Pub/Sub keine Bestätigungen oder negativen Bestätigungen erhalten hat.

Wenn das Limit für eine dieser Optionen ü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. Auf diese Weise können Sie den Durchsatz gegen die Kosten abwägen, die mit der Ausführung von mehr Abonnenten verbunden sind.

Doppelte Übermittlungen verarbeiten

Standardmäßig stellt Pub/Sub Nachrichten mindestens einmal an Abonnenten zu. Das bedeutet, dass Nachrichten mehrmals zugestellt werden können, auch wenn sie bestätigt wurden. In den folgenden Abschnitten wird beschrieben, wie Sie mit gängigen Szenarien für die erneute Zustellung umgehen.

Konsistente erneute Zustellung vieler Nachrichten

Wenn viele Nachrichten immer wieder neu zugestellt werden, sind Ihre Abonnenten überlastet oder sie bestätigen die Nachrichten nicht vor Ablauf der Frist.

Wenn Sie ein Pull-Abo verwenden, müssen Sie möglicherweise benutzerdefinierte Werte für die Flusssteuerung festlegen oder die Zeiträume für die Verlängerung der Lease-Dauer mithilfe der Lease-Verwaltung erhöhen.

Wenn Sie Push-Abos verwenden, müssen Sie möglicherweise die Einstellung für die Bestätigungsfrist erhöhen. Sie können auch die Best Practices für die Aufrechterhaltung eines fehlerfreien Abos befolgen.

Gelegentliche erneute Zustellung von Nachrichten

Wenn Nachrichten vor Ablauf der Bestätigungsfrist oder nach der Bestätigung der Nachrichten innerhalb weniger Sekunden noch einmal zugestellt werden, verhält sich Pub/Sub wie erwartet. Diese Spitzen bei der erneuten Zustellung sollten nicht häufig auftreten. Wenn es jedoch zu erneuten Zustellungen kommt, ist es wahrscheinlich, dass sie bei mehreren Nachrichten gleichzeitig auftreten. Ihr System muss so konzipiert sein, dass es diese gelegentlichen Duplikate toleriert.

Wiederholte Zustellung einiger Nachrichten

Wenn Sie feststellen, dass eine kleine Anzahl von Nachrichten mehrmals zugestellt wird, prüfen Sie zuerst, ob Sie sie bestätigen. Wenn nicht, finden Sie heraus, warum Ihr Abonnent die Nachrichten nicht richtig verarbeitet. Möglicherweise möchten Sie ein Thema für unzustellbare Nachrichten konfigurieren, um eine weitere erneute Zustellung zu verhindern. Wenn Sie die Nachricht bestätigen, funktioniert Pub/Sub möglicherweise weiterhin wie erwartet. Es ist zwar sehr selten, aber dennoch möglich, dass eine kleine Anzahl von Nachrichten mehrmals zugestellt wird, wenn es zu internen Netzwerk- oder Hardwarestörungen kommt. Der Dienst versucht in diesen Fällen, sich selbst zu reparieren. Es kann jedoch einige Minuten dauern, bis die Abhilfemaßnahmen aktiviert werden.

Ihr System muss erneute Zustellungen tolerieren. Sie können die Wahrscheinlichkeit verringern, indem Sie Nachrichten so schnell wie möglich verarbeiten und bestätigen.

Wenn Ihre Anwendung keine Duplikate tolerieren kann, können Sie die „Genau einmal“-Zustellung aktivieren. Dieses Feature ist nur für Pull-Abos verfügbar und führt zu einer höheren Latenz zwischen Veröffentlichung und Abo. Prüfen Sie, ob die höhere Latenz für Ihren Anwendungsfall akzeptabel ist, bevor Sie diese Funktion aktivieren.

Best Practices für geordnetes Messaging beim Abonnieren

Wenn Sie die Nachrichtenreihenfolge verwenden, achten Sie auf Folgendes:

  • Wählen Sie entweder StreamingPull- oder Pull-Abos aus. Bei einem Push-Abo unterstützt Pub/Sub jeweils nur eine ausstehende Nachricht pro Reihenfolgeschlüssel. Das Senden paralleler Push-Anfragen in einem solchen Szenario wäre ähnlich wie das Senden mehrerer Nachrichtenbatches für denselben Reihenfolgeschlüssel, um Abonnenten gleichzeitig abzurufen. Daher werden Push-Abos nicht für Themen empfohlen, bei denen häufig mehrere Nachrichten mit demselben Reihenfolgeschlüssel veröffentlicht werden oder bei denen die Latenz extrem wichtig ist.

  • Aktivieren Sie die Nachrichtenreihenfolge im Abo. Wenn Sie auf der Publisher-Seite Nachrichten mit einem Reihenfolgeschlüssel und in derselben Region senden, können Sie die Abonnenten so konfigurieren, dass sie diese Nachrichten in der richtigen Reihenfolge erhalten. Aktivieren Sie auf der Abonnentenseite das Attribut für die Nachrichtenreihenfolge nur für die Abos, für die Sie geordnete Nachrichten erhalten möchten. Je nach Attributstatus kann jedes mit dem Thema verknüpfte Abo bestimmen, ob eine geordnete Zustellung erforderlich ist, ohne dass sich die Abos gegenseitig beeinflussen.

  • Nachrichten in der richtigen Reihenfolge bestätigen Bei der geordneten Zustellung werden Bestätigungen für spätere Nachrichten erst verarbeitet, wenn Bestätigungen für frühere Nachrichten pro Sortierschlüssel verarbeitet wurden. Wenn Sie beispielsweise die Nachrichten 1, 2 und 3 mit demselben Reihenfolgeschlüssel haben und alle empfangen, aber nur Nachricht 3 bestätigen, wird Nachricht 3 erst dann als bestätigt betrachtet, wenn auch die Nachrichten 1 und 2 bestätigt wurden. Wenn die Bestätigungen für die Nachrichten 1 und 2 nie empfangen werden, werden die Nachrichten 1, 2 und 3 noch einmal zugestellt.

Zusammenfassung der Best Practices

In der folgenden Tabelle sind die in diesem Dokument empfohlenen Best Practices zusammengefasst:

Thema Aufgabe
Abotyp auswählen Wählen Sie den richtigen Abotyp für Ihre geschäftlichen Anforderungen aus. Wenn dies von Ihrem Abo unterstützt wird, verwenden Sie auch die allgemeine Clientbibliothek.
Bestätigte Nachricht wiedergeben Verarbeiten Sie eine Nachricht, bevor Sie sie bestätigen. Oder konfigurieren Sie einen Suchvorgang, damit Sie keine bestätigten Nachrichten verlieren.
Ablaufsteuerung Konfigurieren Sie die Flusssteuerung in Ihren Abonnenteneinstellungen, damit Abonnenten nicht überlastet werden, bis das Autoscaling einsetzt oder Zeit vergeht.
Doppelte Zustellungen verarbeiten und Nachrichten-IDs beibehalten Behalten Sie das Logging der empfangenen messageId bei oder aktivieren Sie es, um die Fehlerbehebung bei Duplikaten, erneuten Zustellungen und fehlenden Nachrichten zu vereinfachen.
Nachrichten in eine Reihenfolge bringen Wenn Sie die Nachrichtenreihenfolge verwenden, wählen Sie „StreamingPull“ oder „Pull“ aus, aktivieren Sie die Nachrichtenreihenfolge im Abo und bestätigen Sie die Nachrichten in der richtigen Reihenfolge.

Nächste Schritte