Veröffentlichungs -Subscribe -Muster

Im Softwarearchitektur, veröffentlichen - Subscribe ist ein Messaging -Muster wo Absender von MitteilungenProgrammieren Sie die Nachrichten, die direkt an bestimmte Empfänger gesendet werden, nicht an bestimmte Empfänger, die als Abonnenten genannt werden, sondern kategorisieren Sie veröffentlichte Nachrichten in Klassen ohne Kenntnis, welche Abonnenten, falls vorhanden, es möglicherweise geben kann. In ähnlicher Weise stellen Abonnenten Interesse an einem oder mehreren Klassen aus und empfangen nur Nachrichten, die von Interesse sind, ohne Kenntnisse darüber, welche Verlage, falls vorhanden, es gibt.

Veröffentlichung - Subscribe ist ein Geschwister der Meldungswarteschlange Paradigma und ist normalerweise ein Teil eines größeren Message orientierte Middleware System. Die meisten Messaging -Systeme unterstützen sowohl die Pub-/Sub- als auch die Message Warteschlangenmodelle in ihren API; z.B., Java Message Service (JMS).

Dieses Muster bietet ein größeres Netzwerk Skalierbarkeit und eine dynamischere Netzwerktopologiemit einer resultierenden verringerten Flexibilität, um den Verlag und die Struktur der veröffentlichten Daten zu ändern.

Nachrichtenfilterung

Im Model Publish-Subscribe erhalten Abonnenten in der Regel nur eine Teilmenge der veröffentlichten Gesamtnachrichten. Der Prozess der Auswahl von Nachrichten für den Empfang und die Verarbeitung wird aufgerufen Filterung. Es gibt zwei gemeinsame Filterformen: themenbasierte und inhaltsbasierte.

In einem Themenbasiert System, Nachrichten werden zu "Themen" oder als logische Kanäle veröffentlicht. Abonnenten in einem themenbasierten System erhalten alle Nachrichten, die sie abonnieren, die sie abonnieren. Der Verlag ist dafür verantwortlich, die Themen zu definieren, die Abonnenten abonnieren können.

In einem inhaltsbasiert System, Nachrichten werden nur an einen Abonnenten übermittelt, wenn die Attribute oder Inhalte dieser Nachrichten die vom Abonnenten definierten Einschränkungen übereinstimmen. Der Abonnent ist für die Klassifizierung der Nachrichten verantwortlich.

Einige Systeme unterstützen a Hybrid von den beiden; Publishers veröffentlichen Nachrichten an ein Thema, während Abonnenten inhaltsbasierte Abonnements zu einem oder mehreren Themen registrieren.

Topologien

In vielen Publish-Subscribe-Systemen veröffentlichen Verlage Nachrichten an einen Vermittler Message Broker oder Event Busund Abonnenten registrieren Abonnements mit diesem Broker und lassen den Broker die Filterung durchführen. Der Broker führt normalerweise a durch Geschäft und vorwärts Funktion zum Weiterleiten von Nachrichten von Publishern an Abonnenten. Darüber hinaus kann der Broker Nachrichten in a priorisieren Warteschlange Vor dem Routing.

Abonnenten können sich für bestimmte Nachrichten zum Zeitpunkt der Erstellung, zur Initialisierungszeit oder zur Laufzeit registrieren. In GUI -Systemen können Abonnenten so codiert werden, dass Benutzerbefehle (z. B. Klicken auf eine Schaltfläche) verarbeitet werden, was der Erstellungszeitregistrierung entspricht. Einige Frameworks und Softwareprodukte verwenden Xml Konfigurationsdateien zum Registrieren von Abonnenten. Diese Konfigurationsdateien werden zur Initialisierungszeit gelesen. Die anspruchsvollste Alternative ist, wenn Abonnenten zur Laufzeit hinzugefügt oder entfernt werden können. Dieser letztere Ansatz wird beispielsweise in verwendet Datenbankauslöser, Mailinglisten, und RSS.

Das Datenverteilungsdienst (DDS) Middleware verwendet keinen Broker in der Mitte. Stattdessen teilt jeder Publisher und Abonnent im Pub/Sub-System die Meta-Daten über einander durch IP Multicast. Der Verlag und der Abonnenten speichern diese Informationen lokal und leiten Nachrichten basierend auf der Entdeckung voneinander in der gemeinsam genutzten Erkenntnis. In der Tat erfordern Brokerless -Architekturen das Veröffentlichung/Abonnieren von System, um ein Overlay -Netzwerk zu erstellen, das es effizientes dezentrales Routing von Publishern bis zu Abonnenten ermöglicht. Es wurde durch gezeigt Jon Kleinberg Dieser effiziente dezentrale Routing erfordert Navigierbare Topologien für kleine Welt. Solche Topologien kleiner Welt werden normalerweise durch dezentrale oder föderierte Veröffentlichungs-/Abonnementsysteme implementiert.[1] Lokalitätsbewusst veröffentlichen/abonnieren Systeme[2] Konstruieren Sie Topologien für kleine Welt, die Abonnements durch Kurzstrecken- und kostengünstige Links weiterleiten und damit die Abonnement-Lieferzeiten reduzieren.

Geschichte

Eines der frühesten öffentlich beschriebenen Pub/Sub -Systeme war das "Nachrichten" -Subsystem des ISIS -Toolkits, der 1987 beschrieben wurde Verband für Rechenmaschinen (ACM) Symposium on Operating Systems Principles Conference (SOSP '87) in einem Papier "Ausnutzung" Virtuelle Synchronität in Verteilte Systeme. 123–138 ".[3]

Vorteile

Lose Kopplung

Verlage sind locker verbunden Abonnenten und muss ihre Existenz nicht einmal wissen. Da das Thema im Mittelpunkt steht, dürfen Verleger und Abonnenten die Systemtopologie nicht kennen. Jedes kann weiterhin unabhängig von der anderen arbeiten. In der traditionellen eng gekoppelten Client -Server -ParadigmaDer Client kann keine Nachrichten an den Server veröffentlichen, während der Serverprozess weder ausgeführt wird, noch kann der Server Nachrichten empfangen, es sei denn, der Client wird ausgeführt. Viele Pub/Sub -Systeme entkoppeln nicht nur die Standorte der Verlage und Abonnenten, sondern entkoppeln sie auch zeitlich. Eine gemeinsame Strategie von Middleware -Analysten Mit solchen Pub/Sub -Systemen soll ein Verlag einbezogen werden, damit der Abonnent den Rückstand durcharbeiten kann (eine Form von Bandbreite Drosselung).

Skalierbarkeit

Pub/Sub bietet die Möglichkeit, besser zu werden Skalierbarkeit als herkömmlicher Client-Server durch parallele Betrieb, Meldung zwischengeschnittenen, baumbasierten oder netzwerkbasierten Routing usw. In bestimmten Arten von eng gekoppelten, hochvolumigen Unternehmensumgebungen, wie Systeme skalieren, um Zentren mit Tausenden von Tausenden zu werden Server, die die Pub/Sub -Infrastruktur teilen, verlieren aktuelle Anbietersysteme diesen Vorteil häufig. Die Skalierbarkeit von Pub/Sub -Produkten unter hohem Ladung in diesen Kontexten ist eine Forschungsherausforderung.

Außerhalb der Enterprise-Umgebung hat das Pub/Sub-Paradigma hingegen seine Skalierbarkeit auf Volumina weit über die eines einzelnen Rechenzentrums hinaus bewiesen und über Web-Syndication-Protokolle wie z. RSS und Atom. Diese Syndicationsprotokolle akzeptieren eine höhere Latenz und mangelnde Liefergarantien im Austausch für die Fähigkeit eines Low-End-Webservers, Nachrichten auf (potenziell) Millionen separater Abonnentenknoten zu syndizieren.

Nachteile

Die schwerwiegendsten Probleme mit Pub/Sub-Systemen sind ein Nebeneffekt ihres Hauptvorteils: die Entkopplung des Verlags vom Abonnenten.

Meldungsprobleme

Ein Pub/Sub -System muss sorgfältig ausgelegt sein, um stärkere Systemeigenschaften bereitzustellen, die eine bestimmte Anwendung benötigt, z. B. die versicherte Lieferung.

  • Der Broker in einem Pub/Sub -System kann so konzipiert werden, dass er Nachrichten für eine bestimmte Zeit übermittelt hat, aber dann keine Lieferung einstellen, unabhängig davon, ob er eine Bestätigung des erfolgreichen Erhalts der Nachricht durch alle Abonnenten erhalten hat oder nicht. Ein auf diese Weise entworfenes Pub/Sub -System kann die Bereitstellung von Nachrichten an Anwendungen nicht garantieren, die möglicherweise eine solche versicherte Lieferung erfordern. Eine engere Kopplung der Entwürfe eines solchen Verlags und eines Abonnentenpaars muss außerhalb der Pub/Sub -Architektur durchgesetzt werden, um eine solche versicherte Lieferung zu erreichen (z. B. indem der Abonnent die Veröffentlichung von Quittungsnachrichten veröffentlichen).
  • Ein Verlag in einem Pub/Sub -System kann davon ausgehen, dass ein Abonnent zuhört, obwohl dies nicht der Fall ist. Eine Fabrik kann ein Pub/Sub -System verwenden, in dem Geräte Probleme oder Fehler an einen Abonnenten veröffentlichen können, der diese Probleme anzeigt und protokolliert. Wenn der Logger fehlschlägt (Abstürze), erhält Geräteproblemverlager nicht unbedingt den Protokollfehler und Fehlermeldungen werden von keinem Gerät im Pub/Sub -System angezeigt oder aufgezeichnet. Dies ist auch eine Designherausforderung für alternative Messaging -Architekturen wie ein Client/Server -System. In einem Client/Server -System erhält das System, wenn ein Fehlerprotokoll fehlschlägt, einen Hinweis auf den Fehlerprotokollfehler (Server). Das Client/Server -System muss sich jedoch mit diesem Fehler befassen, indem über redundante Protokollierungsserver online oder dynamisch laichen Fallback -Protokollierungsserver verfügen. Dies fügt den Client- und Server -Designs sowie der Client/Server -Architektur als Ganzes Komplexität hinzu. In einem Pub/Sub -System können jedoch redundante Protokollierungsabonnenten, die exakte Duplikate des vorhandenen Protokolls sind, zum System hinzugefügt werden, um die Protokollierungszuverlässigkeit ohne Auswirkungen auf andere Geräte auf dem System zu erhöhen. In einem Pub/Sub -System kann die Funktion der versicherten Fehlermeldung inkrementell hinzugefügt werden, was nach der Implementierung der grundlegenden Funktionalität der Ausrüstungsproblemmeldungsmeldung protokolliert wird.

Das Pub/Sub -Muster skaliert für kleine Netzwerke mit einer kleinen Anzahl von Verleger- und Abonnentenknoten und einem niedrigen Nachrichtenvolumen gut. Mit zunehmender Anzahl von Knoten und Nachrichten steigt die Wahrscheinlichkeit von Instabilitäten jedoch und begrenzt die maximale Skalierbarkeit eines Pub/Sub -Netzwerks. Beispiele für Durchsatz -Instabilitäten in großer Ebene umfassen:

  • Lastflächen - Perioden, wenn der Abonnent einen gesättigten Netzwerkdurchsatz anfordert, gefolgt von Perioden mit niedrigem Nachrichtenvolumen (nicht genutzte Netzwerkbandbreite)
  • Verlangsamungen - wie immer mehr Anwendungen das System verwenden (auch wenn es auf separaten Pub/Sub -Kanälen kommuniziert), wird der Nachrichtenvolumenfluss zu einem einzelnen Abonnenten verlangsamt

Für Pub/Sub -Systeme, die Broker (Server) verwenden, ist das Argument für einen Broker, Nachrichten an einen Abonnenten zu senden im Bandund kann Sicherheitsproblemen unterliegen. Makler könnten sich täuschen lassen, Benachrichtigungen an den falschen Kunden zu senden und die Verweigerung von Serviceanfragen gegen den Kunden zu verstärken. Makler selbst könnten überladen werden, wenn sie Ressourcen für die Verfolgung erstellter Abonnements bereitstellen.

Selbst bei Systemen, die sich nicht auf Makler verlassen, kann ein Abonnent möglicherweise Daten empfangen, für die er nicht autorisiert ist. Ein nicht autorisierter Verlag kann möglicherweise falsche oder schädliche Nachrichten in das Pub/Sub -System einführen. Dies gilt insbesondere für Systeme, die Übertragung oder Multicast ihre Nachrichten. Verschlüsselung (z.B. Transportschichtsicherheit (SSL/TLS)) kann einen unbefugten Zugriff verhindern, kann jedoch nicht verhindern, dass schädliche Nachrichten von autorisierten Verlage eingeführt werden. Andere Architekturen als Pub/Sub, wie z. B. Client/Server -Systeme, sind ebenfalls für autorisierte Nachrichtensender anfällig, die sich böswillig verhalten.

Siehe auch

Verweise

  1. ^ a b Chen, Chen; Teck, Yoav; Girdzijauskas, Sarunas (2018). "Beaconvey: Co-Design of Overlay und Routing für themenbasierte Veröffentlichung/Abonnieren in kleinen Weltnetzwerken". Proceedings der 12. ACM International Conference on Distributed and Event -basierte Systeme - Debs '18.Hamilton, Neuseeland: ACM Press: 64–75. doi:10.1145/3210284.3210287. ISBN 9781450357821. S2CID 43929719.
  2. ^ Rahimian, Fatemeh;Le Nguyen Huu, Dünnh;Girdzijauskas, Sarunas (2012), Göschka, Karl Michael;Haridi, Seif (Hrsg.), "Lokalitätsbewusstsein in einem Peer-to-Peer-Veröffentlichung/Abonnement-Netzwerk", Verteilte Anwendungen und interoperable Systeme, Springer Berlin Heidelberg, Vol.7272, S. 45–58, doi:10.1007/978-3-642-30823-9_4, ISBN 9783642308222
  3. ^ Birman, K.;Joseph, T. (1987)."Virtuelle Synchronität in verteilten Systemen ausnutzen". Verfahren des elften ACM -Symposiums für Betriebssysteme - SOSP '87. S. 123–138. doi:10.1145/41457.37515. ISBN 089791242X. S2CID 7739589.