Heim Backend-Entwicklung PHP-Tutorial Wie kann die hohe Verfügbarkeit der Nachrichtenwarteschlange sichergestellt werden?

Wie kann die hohe Verfügbarkeit der Nachrichtenwarteschlange sichergestellt werden?

Jan 28, 2020 pm 01:28 PM
消息队列

Nachrichtenwarteschlange ist eine wesentliche Fähigkeit in Szenarien mit hoher Parallelität. Da wir sie verwenden, gibt es viele Probleme in der Produktionsumgebung, wie zum Beispiel: Wie erreicht man eine hohe Verfügbarkeit der Nachrichtenwarteschlange?

Es gibt viele Arten von Middleware für Szenarien. Hier bereiten wir einige häufig verwendete Middleware für die Analyse und Verarbeitung vor.

1. Hohe Verfügbarkeit von RabbitMQ

RabbitMQ ist relativ repräsentativ, da es auf einer Master-Slave-Hochverfügbarkeit (nicht verteilt) basiert. Daher verwenden wir RabbitMQ Beispiel zur Erläuterung, wie die Hochverfügbarkeit des ersten MQ implementiert wird.

RabbitMQ verfügt über drei Modi: Standalone-Modus, normaler Cluster-Modus und Spiegel-Cluster-Modus.

Einzelspielermodus

Der Standalone-Modus ist Demo-Level und kann zum Spaß lokal gestartet werden.

Normaler Clustermodus (keine Hochverfügbarkeit)

Normaler Clustermodus bedeutet, dass mehrere RabbitMQ-Instanzen auf mehreren Maschinen gestartet werden, eine für jede Maschine. Die von Ihnen erstellte Warteschlange wird nur auf einer RabbitMQ-Instanz platziert, aber jede Instanz synchronisiert die Metadaten der Warteschlange (Metadaten können als einige Konfigurationsinformationen der Warteschlange betrachtet werden. Mithilfe von Metadaten können Sie die Instanz finden, in der sich die Warteschlange befindet). .

Wenn Sie beim Konsumieren tatsächlich mit einer anderen Instanz verbunden sind, ruft diese Instanz Daten von der Instanz ab, in der sich die Warteschlange befindet.

Wie kann die hohe Verfügbarkeit der Nachrichtenwarteschlange sichergestellt werden?

Diese Methode ist wirklich mühsam und nicht sehr gut. Sie erreicht nicht die sogenannte Verteilung und ist nur ein gewöhnlicher Cluster. Denn dies führt dazu, dass der Verbraucher entweder jedes Mal eine zufällige Verbindung zu einer Instanz herstellt und Daten abruft oder eine feste Verbindung zu der Instanz herstellt, in der sich die Warteschlange befindet, um Daten zu verbrauchen. Ersteres hat den Overhead des Datenabrufs und letzteres führt zu einem Single-Pull. Engpass bei der Instanzleistung.

Und wenn die Instanz, die die Warteschlange stellt, ausfällt, können andere Instanzen nicht von dieser Instanz abrufen. Wenn Sie die Nachrichtenpersistenz aktivieren und RabbitMQ Nachrichten speichern lassen, müssen die Nachrichten nicht unbedingt verloren gehen Warten Sie, bis sich diese Instanz erholt hat, bevor Sie mit dem Abrufen von Daten aus dieser Warteschlange fortfahren können.

Diese Angelegenheit ist also noch peinlicher. Es gibt keine sogenannte Hochverfügbarkeit. Diese Lösung besteht hauptsächlich darin, den Durchsatz zu verbessern, d Warteschlange. .

Spiegelclustermodus (Hochverfügbarkeit)

Dieser Modus ist der sogenannte Hochverfügbarkeitsmodus von RabbitMQ. Der Unterschied zum normalen Cluster-Modus besteht darin, dass die von Ihnen erstellte Warteschlange unabhängig von Metadaten oder Nachrichten in der Warteschlange auf mehreren Instanzen vorhanden ist. Das heißt, jeder RabbitMQ-Knoten verfügt über eine vollständige Kopie dieser Warteschlange. Spiegeln bedeutet, dass alle Daten der Warteschlange enthalten sind. Jedes Mal, wenn Sie eine Nachricht in die Warteschlange schreiben, wird die Nachricht automatisch mit den Warteschlangen mehrerer Instanzen synchronisiert.

Wie kann die hohe Verfügbarkeit der Nachrichtenwarteschlange sichergestellt werden?

Wie aktiviert man also diesen Spiegel-Cluster-Modus? Tatsächlich ist es sehr einfach, eine Richtlinie im Hintergrund hinzuzufügen. Bei dieser Richtlinie können Sie festlegen, dass Daten mit allen Knoten synchronisiert werden Wenn der Knoten die Warteschlange erneut erstellt, werden die Daten durch die Anwendung dieser Strategie automatisch mit anderen Knoten synchronisiert.

In diesem Fall besteht der Vorteil darin, dass, wenn einer Ihrer Computer ausfällt, auch andere Computer (Knoten) die vollständigen Daten dieser Warteschlange enthalten und andere Verbraucher zu anderen Knoten wechseln können Daten verbrauchen.

Die Nachteile sind erstens, dass der Leistungsaufwand zu hoch ist. Die Nachrichten müssen auf allen Maschinen synchronisiert werden, was zu hohem Druck und Verbrauch von Netzwerkbandbreite führt!

Zweitens werden diese Spiele nicht verteilt und sind nicht skalierbar. Wenn eine Warteschlange stark ausgelastet ist und Sie eine Maschine hinzufügen, enthält die neue Maschine auch alle Daten der Warteschlange, und es gibt keine Möglichkeit dazu Erweitern Sie Ihre Warteschlange linear.

2. Hohe Verfügbarkeit von Kafka

Eines der grundlegendsten Architekturverständnisse von Kafka: Es besteht aus mehreren Brokern, jeder Broker ist ein Knoten Thema: Dieses Thema kann in mehrere Partitionen unterteilt werden, jede Partition kann auf verschiedenen Brokern vorhanden sein und jede Partition speichert einen Teil der Daten.

Dies ist eine natürlich verteilte Nachrichtenwarteschlange, was bedeutet, dass die Daten eines Themas auf mehrere Computer verteilt sind und jeder Computer einen Teil der Daten speichert.

Tatsächlich sind RabbmitMQ und dergleichen keine verteilten Nachrichtenwarteschlangen. Sie bieten lediglich einige Clustering- und HA-Mechanismen (Hochverfügbarkeit, Hochverfügbarkeit), denn egal, wie Sie spielen Daten einer Warteschlange in RabbitMQ werden auf einem Knoten platziert. Unter dem Spiegelcluster werden auch die vollständigen Daten der Warteschlange auf jedem Knoten platziert.

Vor Kafka 0.8 gab es keinen HA-Mechanismus. Wenn ein Broker ausfiel, war die Partition auf diesem Broker nutzlos und konnte weder geschrieben noch gelesen werden. Es gab überhaupt keine Hochverfügbarkeit.

Wir gehen beispielsweise davon aus, dass wir ein Thema erstellen und angeben, dass die Anzahl der Partitionen 3 beträgt, jeweils auf drei Maschinen. Wenn jedoch die zweite Maschine ausfällt, gehen 1/3 der Daten zu diesem Thema verloren, sodass diese nicht hochverfügbar sein können.

Wie kann die hohe Verfügbarkeit der Nachrichtenwarteschlange sichergestellt werden?

Kafka 0.8 und höher bietet einen HA-Mechanismus, bei dem es sich um einen Replikatmechanismus handelt. Die Daten jeder Partition werden mit anderen Maschinen synchronisiert, um eigene Mehrfachreplikate zu bilden. Alle Nachbildungen werden einen Anführer wählen, dann werden sich Produktion und Konsum um diesen Anführer kümmern, und andere Nachbildungen werden Anhänger sein. Beim Schreiben ist der Anführer dafür verantwortlich, die Daten mit allen Followern zu synchronisieren. Beim Lesen lesen Sie einfach die Daten direkt am Anführer. Kann Anführer nur lesen und schreiben?

Es ist ganz einfach. Wenn Sie jeden Follower nach Belieben lesen und schreiben können, müssen Sie sich um das Problem der Datenkonsistenz kümmern. Die Systemkomplexität ist zu hoch und es können leicht Probleme auftreten. Kafka verteilt alle Replikate einer Partition gleichmäßig auf verschiedene Maschinen, um die Fehlertoleranz zu verbessern.

Wie kann die hohe Verfügbarkeit der Nachrichtenwarteschlange sichergestellt werden?

Auf diese Weise gibt es eine sogenannte Hochverfügbarkeit, denn wenn ein bestimmter Broker ausfällt, wird er ausfallen Gut. Die Partitionen auf diesem Broker haben Kopien auf anderen Computern. Wenn der gestürzte Broker einen Anführer einer bestimmten Partition hat, wird aus den Anhängern ein neuer Anführer wiedergewählt, und jeder kann den neuen Anführer weiterhin lesen und schreiben. Dies wird als Hochverfügbarkeit bezeichnet.

Beim Schreiben von Daten schreibt der Produzent an den Anführer, und dann schreibt der Anführer die Daten auf die lokale Festplatte, und dann ergreifen andere Follower die Initiative, um Daten vom Anführer abzurufen. Sobald alle Follower die Daten synchronisiert haben, senden sie Bestätigungen an den Anführer. Nachdem der Anführer die Bestätigungen von allen Followern erhalten hat, sendet er eine erfolgreich geschriebene Nachricht an den Produzenten zurück. (Natürlich ist dies nur einer der Modi, und dieses Verhalten kann entsprechend angepasst werden)

Beim Konsumieren wird nur vom Anführer gelesen, aber nur, wenn eine Nachricht von allen Followern erfolgreich synchronisiert wurde Gibt ack zurück, diese Nachricht wird von Verbrauchern gelesen.

Weitere PHP-Kenntnisse finden Sie im PHP-Tutorial!

Das obige ist der detaillierte Inhalt vonWie kann die hohe Verfügbarkeit der Nachrichtenwarteschlange sichergestellt werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Java Websocket-Entwicklungspraxis: So implementieren Sie die Nachrichtenwarteschlangenfunktion Java Websocket-Entwicklungspraxis: So implementieren Sie die Nachrichtenwarteschlangenfunktion Dec 02, 2023 pm 01:57 PM

Java Websocket-Entwicklungspraxis: So implementieren Sie die Nachrichtenwarteschlangenfunktion Einführung: Mit der rasanten Entwicklung des Internets wird Echtzeitkommunikation immer wichtiger. In vielen Webanwendungen sind Echtzeitaktualisierungen und Benachrichtigungsfunktionen durch Echtzeitnachrichten erforderlich. JavaWebsocket ist eine Technologie, die Echtzeitkommunikation in Webanwendungen ermöglicht. In diesem Artikel wird erläutert, wie Sie JavaWebsocket zum Implementieren der Nachrichtenwarteschlangenfunktion verwenden, und es werden spezifische Codebeispiele bereitgestellt. Grundkonzepte der Nachrichtenwarteschlange

So verwenden Sie die Nachrichtenwarteschlange für die asynchrone Aufgabenverarbeitung in FastAPI So verwenden Sie die Nachrichtenwarteschlange für die asynchrone Aufgabenverarbeitung in FastAPI Jul 30, 2023 pm 09:21 PM

So verwenden Sie die Nachrichtenwarteschlange für die asynchrone Aufgabenverarbeitung in FastAPI. Einführung: In Webanwendungen kommt es häufig vor, dass zeitaufwändige Aufgaben verarbeitet werden müssen, z. B. das Senden von E-Mails, das Erstellen von Berichten usw. Wenn diese Aufgaben in einen synchronen Anfrage-Antwort-Prozess gestellt werden, müssen Benutzer lange warten, was die Benutzererfahrung und die Antwortgeschwindigkeit des Servers verringert. Um dieses Problem zu lösen, können wir die Nachrichtenwarteschlange für die asynchrone Aufgabenverarbeitung verwenden. In diesem Artikel wird erläutert, wie Nachrichtenwarteschlangen zur Verarbeitung asynchroner Aufgaben im FastAPI-Framework verwendet werden.

Golang-Entwicklung: Erstellen Sie mit NATS eine zuverlässige Nachrichtenwarteschlange Golang-Entwicklung: Erstellen Sie mit NATS eine zuverlässige Nachrichtenwarteschlange Sep 21, 2023 am 11:21 AM

Golang-Entwicklung: Für die Verwendung von NATS zum Aufbau einer zuverlässigen Nachrichtenwarteschlange sind spezifische Codebeispiele erforderlich. Einführung: In modernen verteilten Systemen ist die Nachrichtenwarteschlange eine wichtige Komponente, die zur Abwicklung asynchroner Kommunikation, zur Entkopplung von Systemkomponenten und zur Erzielung einer zuverlässigen Nachrichtenübermittlung verwendet wird. In diesem Artikel wird erläutert, wie mit der Programmiersprache Golang und NATS (der vollständige Name lautet „High Performance Reliable Messaging System“) eine effiziente und zuverlässige Nachrichtenwarteschlange erstellt wird, und es werden spezifische Codebeispiele bereitgestellt. Was ist NATS? NATS ist ein leichtes Open-Source-Messagingsystem.

Umgang mit verteilten Transaktionen und Nachrichtenwarteschlangen in der C#-Entwicklung Umgang mit verteilten Transaktionen und Nachrichtenwarteschlangen in der C#-Entwicklung Oct 09, 2023 am 11:36 AM

Umgang mit verteilten Transaktionen und Nachrichtenwarteschlangen in der C#-Entwicklung Einführung: In heutigen verteilten Systemen sind Transaktionen und Nachrichtenwarteschlangen sehr wichtige Komponenten. Verteilte Transaktionen und Nachrichtenwarteschlangen spielen eine entscheidende Rolle bei der Handhabung der Datenkonsistenz und der Systementkopplung. In diesem Artikel wird der Umgang mit verteilten Transaktionen und Nachrichtenwarteschlangen in der C#-Entwicklung vorgestellt und spezifische Codebeispiele gegeben. 1. Verteilte Transaktionen Verteilte Transaktionen beziehen sich auf Transaktionen, die mehrere Datenbanken oder Dienste umfassen. In verteilten Systemen ist die Sicherstellung der Datenkonsistenz zu einer großen Herausforderung geworden. Hier sind zwei Arten von

So implementieren Sie eine Nachrichtenwarteschlange mithilfe von Linux-Skriptoperationen in Java So implementieren Sie eine Nachrichtenwarteschlange mithilfe von Linux-Skriptoperationen in Java Oct 05, 2023 am 08:09 AM

Für die Verwendung von Linux-Skriptoperationen zum Implementieren von Nachrichtenwarteschlangen in Java sind bestimmte Codebeispiele erforderlich. Nachrichtenwarteschlangen sind ein gängiger Kommunikationsmechanismus, der zum Übertragen von Daten zwischen verschiedenen Prozessen verwendet wird. In Java können wir Nachrichtenwarteschlangen mithilfe von Linux-Skriptoperationen implementieren, sodass wir problemlos Nachrichten an die Warteschlange senden oder von dieser empfangen können. In diesem Artikel erklären wir detailliert, wie Nachrichtenwarteschlangen mithilfe von Java- und Linux-Skripts implementiert werden, und stellen spezifische Codebeispiele bereit. Für den Einstieg in Java und Lin

Die wunderbare Verwendung von Redis in der Nachrichtenwarteschlange Die wunderbare Verwendung von Redis in der Nachrichtenwarteschlange Nov 07, 2023 pm 04:26 PM

Die wunderbare Verwendung von Redis in Nachrichtenwarteschlangen Nachrichtenwarteschlangen sind eine gängige entkoppelte Architektur, die zur Übermittlung asynchroner Nachrichten zwischen Anwendungen verwendet wird. Durch das Senden einer Nachricht an eine Warteschlange kann der Absender mit der Ausführung anderer Aufgaben fortfahren, ohne auf eine Antwort des Empfängers warten zu müssen. Und der Empfänger kann die Nachricht aus der Warteschlange abrufen und zum richtigen Zeitpunkt verarbeiten. Redis ist eine häufig verwendete Open-Source-In-Memory-Datenbank mit hoher Leistung und dauerhaften Speicherfunktionen. In Nachrichtenwarteschlangen ist Redis aufgrund seiner vielfältigen Datenstrukturen und seiner hervorragenden Leistung die ideale Wahl

Vertiefendes Verständnis des zugrunde liegenden Implementierungsmechanismus der Kafka-Nachrichtenwarteschlange Vertiefendes Verständnis des zugrunde liegenden Implementierungsmechanismus der Kafka-Nachrichtenwarteschlange Feb 01, 2024 am 08:15 AM

Überblick über die zugrunde liegenden Implementierungsprinzipien der Kafka-Nachrichtenwarteschlange Kafka ist ein verteiltes, skalierbares Nachrichtenwarteschlangensystem, das große Datenmengen verarbeiten kann und einen hohen Durchsatz und eine geringe Latenz aufweist. Kafka wurde ursprünglich von LinkedIn entwickelt und ist heute ein Top-Level-Projekt der Apache Software Foundation. Architektur Kafka ist ein verteiltes System, das aus mehreren Servern besteht. Jeder Server wird als Knoten bezeichnet und jeder Knoten ist ein unabhängiger Prozess. Knoten werden über ein Netzwerk verbunden, um einen Cluster zu bilden. K

So implementieren Sie eine einfache Nachrichtenwarteschlange mit Redis und Golang So implementieren Sie eine einfache Nachrichtenwarteschlange mit Redis und Golang Aug 01, 2023 am 08:09 AM

So implementieren Sie mit Redis und Golang eine einfache Nachrichtenwarteschlange Einführung Nachrichtenwarteschlangen werden häufig in verschiedenen Anwendungsszenarien verwendet, z. B. zur Entkopplung von Systemkomponenten, zur Spitzenglättung und Talfüllung, zur asynchronen Kommunikation usw. In diesem Artikel wird erläutert, wie Sie mit Redis und Golang eine einfache Nachrichtenwarteschlange implementieren, und den Lesern dabei helfen, die Grundprinzipien und Implementierungsmethoden von Nachrichtenwarteschlangen zu verstehen. Einführung in Redis Redis ist eine in C-Sprache geschriebene Open-Source-In-Memory-Datenbank, die Speicher- und Verarbeitungsfunktionen für Schlüssel-Wert-Paare für andere häufig verwendete Datenstrukturen bereitstellt. Redis ist bekannt für seine hohe Leistung,

See all articles