Empfohlene verwandte Artikel: „Eingehende Untersuchung von Lösungen und Lösungen für den Zugriff mit „hoher Parallelität und großem Datenverkehr““
1. Was ist Rabbitmq?
Eine Nachrichtenwarteschlangentechnologie, die das erweiterte Nachrichtenwarteschlangenprotokoll AMQP verwendet Sicherstellen, dass der Anbieter existiert und ein hohes Maß an Entkopplung zwischen Diensten erreicht wird
2 Warum Rabbitmq verwenden
in verteilt Das System verfügt über eine Reihe erweiterter Funktionen wie Asynchronität, Spitzenbeschneidung, Lastausgleich usw.
verfügt über einen Persistenzmechanismus und kann auch Nachrichten und Informationen in der Warteschlange verarbeiten gespeichert.
Entkopplung zwischen Verbrauchern und Produzenten erreichen.
In Szenarien mit hoher Parallelität kann die Verwendung von Nachrichtenwarteschlangen den synchronen Zugriff in einen seriellen Zugriff bis zu einem bestimmten Betrag des aktuellen Limits umwandeln, was für den Datenbankbetrieb von Vorteil ist.
Sie können die Nachrichtenwarteschlange verwenden, um den Effekt einer asynchronen Reihenfolge zu erzielen. Während der Warteschlange werden logische Bestellungen im Hintergrund platziert.
3. Szenarien mit Rabbitmq
Asynchrone Kommunikation zwischen Diensten
Sequentieller Verbrauch
Zeitgesteuerte Aufgabe
Spitzenschnitt anfordern
4. Wie kann sichergestellt werden, dass Nachrichten korrekt an RabbitMQ gesendet werden? Wie kann sichergestellt werden, dass der Nachrichtenempfänger die Nachricht konsumiert?
Absenderbestätigungsmodus
Stellen Sie den Kanal auf den Bestätigungsmodus (Absenderbestätigungsmodus) ein und veröffentlichen Sie dann alle Nachrichten auf Dem Kanal wird eine eindeutige ID zugewiesen.
Sobald die Nachricht an die Zielwarteschlange übermittelt oder auf die Festplatte geschrieben wird (persistente Nachricht), sendet der Kanal eine Bestätigung an den Produzenten (mit der eindeutigen Nachrichten-ID).
Wenn in RabbitMQ ein interner Fehler auftritt und die Nachricht verloren geht, wird eine Nack-Nachricht (nicht bestätigt) gesendet.
Der Absenderbestätigungsmodus ist asynchron und die Produzentenanwendung kann weiterhin Nachrichten senden, während sie auf die Bestätigung wartet. Wenn die Bestätigungsnachricht die Produzentenanwendung erreicht, wird die Rückrufmethode der Produzentenanwendung ausgelöst, um die Bestätigungsnachricht zu verarbeiten.
Bestätigungsmechanismus des Empfängers
Bestätigungsmechanismus der Empfängernachricht
Der Verbraucher erhält jede Nachricht. Alle Nachrichten müssen bestätigt werden (Nachrichtenempfang und Nachrichtenbestätigung sind zwei verschiedene Vorgänge). Erst wenn der Verbraucher die Nachricht bestätigt, kann RabbitMQ die Nachricht sicher aus der Warteschlange löschen.
Hier wird kein Timeout-Mechanismus verwendet. RabbitMQ bestätigt lediglich, ob die Nachricht erneut gesendet werden muss, indem die Verbindung des Verbrauchers unterbrochen wird. Mit anderen Worten: Solange die Verbindung nicht unterbrochen wird, gibt RabbitMQ dem Verbraucher genügend Zeit, die Nachricht zu verarbeiten. Stellen Sie die ultimative Datenkonsistenz sicher.
Im Folgenden sind einige Sonderfälle aufgeführt.
Wenn der Verbraucher die Nachricht erhält und die Verbindung trennt, bevor er die Verbindung herstellt oder Wenn Sie sich abmelden, geht RabbitMQ davon aus, dass die Nachricht nicht verteilt wurde, und verteilt sie erneut an den nächsten abonnierten Verbraucher. (Es können versteckte Gefahren des wiederholten Konsums von Nachrichten bestehen und Duplikate müssen entfernt werden)
Wenn der Verbraucher die Nachricht empfängt, sie aber nicht bestätigt und die Verbindung nicht getrennt wird, wird RabbitMQ betrachtet den Verbraucher als beschäftigt. Es werden keine weiteren Nachrichten an diesen Verbraucher verteilt.
5. Wie vermeide ich die wiederholte Zustellung oder den wiederholten Konsum von Nachrichten?
Während der Nachrichtenproduktion generiert MQ intern eine innere Nachrichten-ID für jede vom Produzenten gesendete Nachricht als Grundlage für die Deduplizierung (Nachrichtenzustellung schlägt fehl und wird erneut übertragen), um Duplikate zu vermeiden Nachricht kommt in die Warteschlange;
Beim Verarbeiten von Nachrichten ist es erforderlich, dass im Nachrichtentext eine bizId vorhanden ist (weltweit eindeutig für dasselbe Unternehmen, z. B. Zahlungs-ID, Bestell-ID, Post-ID usw.) als Grundlage für die Deduplizierung, um zu vermeiden, dass dieselbe Nachricht wiederholt konsumiert wird.
6. Auf welcher Grundlage wird die Nachricht übermittelt?
Aufgrund des großen Aufwands beim Erstellen und Zerstören von TCP-Verbindungen und der Begrenzung der Anzahl der Parallelitätsvorgänge durch die Systemressourcen kommt es zu Leistungsengpässen. RabbitMQ verwendet Kanäle zur Datenübertragung. Ein Kanal ist eine virtuelle Verbindung, die innerhalb einer realen TCP-Verbindung hergestellt wird, und es gibt keine Begrenzung für die Anzahl der Kanäle auf jeder TCP-Verbindung.
7. Wie verbreitet man die Botschaft?
Wenn die Warteschlange mindestens ein Verbraucherabonnement hat, wird die Nachricht im Round-Robin-Verfahren an den Verbraucher gesendet. Jede Nachricht wird nur an einen abonnierten Verbraucher verteilt (vorausgesetzt, der Verbraucher kann die Nachricht verarbeiten und normal bestätigen). Durch Routing können mehrere Verbrauchsfunktionen realisiert werden
8. Wie werden Nachrichten weitergeleitet?
Nachrichtenanbieter->Routing->Eine zu mehreren Warteschlangen Wenn eine Nachricht an der Börse veröffentlicht wird, verfügt die Nachricht über einen Routing-Schlüssel, der beim Erstellen der Nachricht festgelegt wird. Warteschlangen können über Warteschlangen-Routing-Schlüssel an Switches gebunden werden.
Nachdem die Nachricht beim Austauscher angekommen ist, gleicht RabbitMQ den Routing-Schlüssel der Nachricht mit dem Routing-Schlüssel der Warteschlange ab (verschiedene Routing-Regeln für verschiedene Austauscher).
Üblicherweise werden Austauscher verwendet Es ist in drei Typen unterteilt:
Fanout: Wenn die Börse eine Nachricht empfängt, wird sie an alle gebundenen Warteschlangen gesendet
direkt: Wenn die Routing-Schlüssel genau übereinstimmen, wird die Nachricht an die entsprechende Warteschlange übermittelt.
Thema: Dadurch können Nachrichten aus verschiedenen Quellen dieselbe Warteschlange erreichen. Bei Verwendung des Topic-Exchangers können Sie Platzhalter verwenden
9. Wie kann sichergestellt werden, dass Nachrichten nicht verloren gehen?
Nachrichtenpersistenz, die Voraussetzung ist natürlich, dass die Warteschlange persistent sein muss. Die Art und Weise, wie RabbitMQ sicherstellt, dass persistente Nachrichten nach Serverneustarts wiederhergestellt werden können, besteht darin, sie in eine persistente Protokolldatei zu schreiben Beim Veröffentlichen einer dauerhaften Nachricht an einen dauerhaften Austausch sendet Rabbit keine Antwort, bis die Nachricht an die Protokolldatei übermittelt wird.
Sobald ein Verbraucher eine persistente Nachricht aus der persistenten Warteschlange verbraucht, markiert RabbitMQ die Nachricht im Persistenzprotokoll als auf Garbage Collection wartend. Wenn RabbitMQ neu gestartet wird, bevor eine persistente Nachricht verbraucht wird, erstellt Rabbit automatisch den Austausch und die Warteschlangen (und Bindungen) neu und veröffentlicht die Nachricht in der Persistenzprotokolldatei erneut in der entsprechenden Warteschlange.
10. Welche Vorteile bietet die Verwendung von RabbitMQ?
Hoher Grad der Entkopplung zwischen Diensten
2. Hohe asynchrone Kommunikationsleistung
3. Verkehrsspitzenreduzierung
11. Rabbitmq-Cluster
Spiegelclustermodus
Die von Ihnen erstellte Warteschlange, unabhängig von Metadaten oder Nachrichten in der Warteschlange, wird Es existiert auf mehreren Instanzen und jedes Mal, wenn Sie eine Nachricht in die Warteschlange schreiben, wird die Nachricht automatisch zur Nachrichtensynchronisierung an die Warteschlangen mehrerer Instanzen gesendet.
Das Gute daran ist, dass es keine Rolle spielt, wenn eine Ihrer Maschinen ausfällt, andere Maschinen können verwendet werden. Die Nachteile bestehen erstens darin, dass der Leistungsaufwand zu hoch ist. Die Nachrichten werden auf allen Computern synchronisiert, was zu einer starken Belastung und Beanspruchung der Netzwerkbandbreite führt. Zweitens, wenn Sie so spielen, gibt es keine Skalierbarkeit. 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, Ihre Warteschlange linear zu erweitern
Nachteile von 12.mq
Reduzierte Systemverfügbarkeit
Je mehr externe Abhängigkeiten in das System eingeführt werden Je einfacher es ist, aufzulegen, desto einfacher ist es, die drei Systeme BCD und ABCD aufzurufen. Was passiert, wenn MQ auflegt? Wenn MQ auflegt und das gesamte System zusammenbricht, sind Sie verloren.
Die Systemkomplexität nimmt zu
Wenn Sie MQ abrupt hinzufügen, wie können Sie dann sicherstellen, dass Nachrichten nicht wiederholt konsumiert werden? Wie gehe ich mit Nachrichtenverlust um? Wie kann die Reihenfolge der Nachrichtenübermittlung sichergestellt werden? Großer Kopf, großer Kopf, viele Probleme, endlose Schmerzen
13. Konsistenzproblem
Nachdem System A die Verarbeitung abgeschlossen hat, kehrt es direkt zurück Zum Erfolg, Leute. Sie dachten alle, dass Ihre Anfrage erfolgreich war. Das Problem ist jedoch, was zu tun ist, wenn eines der drei BCD-Systeme und die beiden BD-Systeme die Bibliothek erfolgreich schreiben, das C-System jedoch nicht ? Ihre Daten sind inkonsistent.
Die Nachrichtenwarteschlange ist also tatsächlich eine sehr komplexe Architektur. Die Einführung hat viele Vorteile, aber Sie müssen auch verschiedene zusätzliche technische Lösungen und Architekturen entwickeln, um die damit verbundenen Nachteile zu vermeiden Später werden Sie feststellen, dass die Komplexität des Systems um eine Größenordnung zugenommen hat, vielleicht zehnmal komplizierter. Aber in kritischen Momenten müssen Sie es trotzdem verwenden
14. Verteilte Transaktionen
Segmentierte Übermittlung. Es wird einen Schiedsrichter geben, der dann Nachrichten an alle Knoten sendet. Der Erfolg tritt erst ein, nachdem alle Knoten bestätigt wurden. Andernfalls müssen Sie auf den erneuten Versand warten.
15. Wie man sich auf eine plötzliche große Verkehrssituation wie eine Live-Übertragung vorbereitet.
NGINX plus Maschine
CDN-Cache-Statische Seite
Redis Warteschlange, lassen Sie die Benutzer langsam hereinkommen.
Cache hinzufügen. Zwischenspeichern von Benutzerdaten, z. B. Benutzerinformationen.
Die Datenbank verwendet Master-Slave
Elastische Ausdehnung
Strombegrenzender Leistungsschalter
Empfohlene verwandte Tutorials: „PHP-Tutorial“
Das obige ist der detaillierte Inhalt von15 PHP-Interviewfragen zum Thema hohe Parallelität (Zusammenfassung). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!