Tag 17 von 100 Tagen des Fundamentaufbaus – Erste Schritte mit Message Queuing
grundlegendes Konzept
Was ist eine Nachrichtenwarteschlange?
MQ: Nachrichtenwarteschlange
Eine Warteschlange, in der Nachrichten gespeichert werden. Beim Konsumieren werden sie in der Reihenfolge konsumiert (Warteschlange zuerst rein, zuerst raus).
Die beiden an der Nachrichtenübermittlung beteiligten Parteien werden angerufen Hersteller UndVerbraucher , der Produzent ist für das Senden von Nachrichten verantwortlich und der Verbraucher ist für die Verarbeitung von Nachrichten verantwortlich.
Wozu dient die Nachrichtenwarteschlange?
Drei bekannte Vorteile:
Asynchrone Verarbeitung: Die asynchrone Verarbeitung wird über die Nachrichtenwarteschlange implementiert. Nach dem Senden der entsprechenden Nachricht an die Nachrichtenwarteschlange wird das Ergebnis sofort zurückgegeben, wodurch die Antwortzeit verkürzt und die Benutzererfahrung verbessert wird. Anschließend verarbeitet das System die Nachricht.
Peak-Clipping/Strombegrenzung: Speichern Sie zunächst die durch hohe Parallelität generierten Transaktionsnachrichten in kurzer Zeit in der Nachrichtenwarteschlange, und dann verbraucht der Back-End-Dienst diese Nachrichten langsam entsprechend seinen eigenen Fähigkeiten, wodurch vermieden wird, dass der Back-End-Dienst direkt besiegt wird -Enddienst.
Reduzieren Sie die Systemkopplung: Es gibt keine direkten Aufrufe zwischen Modulen, sodass das Hinzufügen oder Ändern von Modulen weniger Auswirkungen auf andere Module hat.
Anwendungsszenarien für Unternehmen:
Implementieren Sie verteilte Transaktionen: Eine der Lösungen für verteilte Transaktionen sind MQ-Transaktionen, die von den meisten MQs unterstützt werden.Transaktionen ermöglichen Event-Streaming-Anwendungenkonsumieren, verarbeiten, produzierenDer gesamte Nachrichtenprozess ist als atomare Operation definiert.
Sequenzgarantie: Geeignet für Szenarien mit strengen Anforderungen an die Datenreihenfolge, unterstützt von den meisten MQ.
Verzögerung/Timing-Verarbeitung: Die Nachricht wird nicht sofort nach dem Senden verarbeitet, sondern nach einer bestimmten Zeit.
Datenstromverarbeitung: Für die massiven Datenströme, die von verteilten Systemen generiert werden, wie z. B. Geschäftsprotokolle, Überwachungsdaten, Benutzerverhalten usw., kann die Nachrichtenwarteschlange diese Daten in Echtzeit oder in Stapeln sammeln und in die Big-Data-Verarbeitungs-Engine importieren Erreichen Sie eine effiziente Datenverarbeitungs-Stream-Verwaltung und -Verarbeitung.
Welche Probleme bringt die Verwendung von Nachrichtenwarteschlangen mit sich?
Reduzierte Systemverfügbarkeit: Die Systemverfügbarkeit ist teilweise eingeschränkt. Warum sagen Sie das? Bevor Sie MQ beitreten, müssen Sie nicht über den Verlust von Nachrichten oder das Aufhängen von MQ usw. nachdenken. Nach der Einführung von MQ müssen Sie jedoch darüber nachdenken!
Erhöhte Systemkomplexität: Nach dem Beitritt zu MQ müssen Sie sicherstellen, dass Nachrichten nicht wiederholt konsumiert werden, Nachrichtenverluste behandeln, die Reihenfolge der Nachrichtenzustellung sicherstellen und andere Probleme!
Konsistenzprobleme: Ich habe oben erwähnt, dass die Nachrichtenwarteschlange eine asynchrone Implementierung erreichen kann und die von der Nachrichtenwarteschlange bereitgestellte Asynchronität tatsächlich die Reaktionsgeschwindigkeit des Systems verbessern kann. Aber was wäre, wenn der eigentliche Konsument der Nachricht die Nachricht nicht korrekt konsumiert hätte? Dies führt zu Dateninkonsistenzen!
Gemeinsame Nachrichtenwarteschlangen
Kafka
Kafka ist eine Open-Source-Version von LinkedInVerteilte Streaming-Plattform, hat sich zu einem Top-Level-Projekt von Apache entwickelt. Es wurde in den frühen Tagen zur Verarbeitung umfangreicher Protokolle verwendet und entwickelte sich später nach und nach zu einer leistungsstarken Nachrichtenwarteschlange mit vollem Funktionsumfang.
Eine Streaming-Plattform hat drei Hauptfunktionen:
Nachrichtenwarteschlange: Nachrichtenströme veröffentlichen und abonnieren Diese Funktion ähnelt einer Nachrichtenwarteschlange, weshalb Kafka auch als Nachrichtenwarteschlange klassifiziert wird.
Fehlertolerante dauerhafte Speicherung von Datensatznachrichtenströmen: Kafka speichert Nachrichten auf der Festplatte und vermeidet so effektiv das Risiko eines Nachrichtenverlusts.
Streaming-Verarbeitungsplattform: Um Nachrichten bei ihrer Veröffentlichung zu verarbeiten, stellt Kafka eine vollständige Stream-Verarbeitungsbibliothek bereit.
RocketMQ
RocketMQ ist eine cloudnative „Message, Event, Stream“-Echtzeit-Datenverarbeitungsplattform von Alibaba. Sie basiert auf Kafka und hat sich zu einem Top-Level-Apache-Projekt entwickelt.
Die Kernfunktionen von RocketMQ (Auszug aus der offiziellen Website von RocketMQ):
Cloud-nativ: mit der Cloud geboren, mit der Cloud wachsend, unbegrenzte elastische Skalierung, K8-freundlich
Hoher Durchsatz: Garantierter Durchsatz auf Billionenebene, der sowohl Microservice- als auch Big-Data-Szenarien erfüllt.
Stream-Verarbeitung: Bietet eine leichte, hoch skalierbare, leistungsstarke und funktionsreiche Stream-Computing-Engine.
Finanzielle Qualität: Stabilität der finanziellen Qualität, weit verbreitet in Kerntransaktionsverbindungen.
Minimalistische Architektur: keine externen Abhängigkeiten, Shared-Nothing-Architektur.
Umweltfreundlich: Verbindet sich nahtlos mit umliegenden Ökosystemen wie Microservices, Echtzeit-Computing und Data Lakes.
KaninchenMQ
RocketMQ ist eine cloudnative „Message, Event, Stream“-Echtzeit-Datenverarbeitungsplattform von Alibaba. Sie basiert auf Kafka und hat sich zu einem Top-Level-Apache-Projekt entwickelt.
Die Kernfunktionen von RocketMQ (Auszug aus der offiziellen Website von RocketMQ):
Cloud-nativ: mit der Cloud geboren, mit der Cloud wachsend, unbegrenzte elastische Skalierung, K8-freundlich
Hoher Durchsatz: Garantierter Durchsatz auf Billionenebene, der sowohl Microservice- als auch Big-Data-Szenarien erfüllt.
Stream-Verarbeitung: Bietet eine leichte, hoch skalierbare, leistungsstarke und funktionsreiche Stream-Computing-Engine.
Finanzielle Qualität: Stabilität der finanziellen Qualität, weit verbreitet in Kerntransaktionsverbindungen.
Minimalistische Architektur: keine externen Abhängigkeiten, Shared-Nothing-Architektur.
Umweltfreundlich: Verbindet sich nahtlos mit umliegenden Ökosystemen wie Microservices, Echtzeit-Computing und Data Lakes.
Pulsar
Pulsar ist eine Cloud-native verteilte Nachrichtenflussplattform der nächsten Generation. Sie wurde ursprünglich von Yahoo entwickelt und hat sich zu einem Top-Level-Apache-Projekt entwickelt.
Pulsar integriert Messaging, Speicher und leichtes funktionales Computing. Es verwendet ein Architekturdesign für die Trennung von Datenverarbeitung und Speicher, um mehrere Mandanten, persistenten Speicher und eine regionsübergreifende Datenreplikation mit mehreren Maschinen zu unterstützen und hohe Leistung Streaming-Datenspeicherfunktionen wie Skalierbarkeit gelten als die beste Lösung für Echtzeit-Nachrichtenübertragung, -speicherung und -verarbeitung im Cloud-nativen Zeitalter.
Die Hauptfunktionen von Pulsar sind wie folgt (Auszug aus der offiziellen Website):
Es handelt sich um die nächste Generation einer Cloud-nativen verteilten Nachrichtenflussplattform.
Eine einzelne Instanz von Pulsar unterstützt nativ mehrere Cluster und kann die Nachrichtenreplikation zwischen Clustern über Computerräume hinweg nahtlos abschließen.
Extrem niedrige Release-Latenz und End-to-End-Latenz.
Lässt sich nahtlos auf über 1 Million Themen erweitern.
Einfache Client-API, die Java, Go, Python und C++ unterstützt.
Mehrere Abonnementmodi für Themen (exklusiv, gemeinsam genutzt und Failover).
Die Nachrichtenzustellung wird durch den dauerhaften Nachrichtenspeichermechanismus von Apache BookKeeper gewährleistet.
Das leichte Serverless-Computing-Framework Pulsar Functions implementiert Stream-native Datenverarbeitung.
Pulsar IO, ein serverloses Connector-Framework basierend auf Pulsar Functions, erleichtert das Verschieben von Daten in und aus Apache Pulsar.
Tiered Storage kann Daten vom Hot-Storage in den Cold-/Langzeitspeicher (z. B. S3, GCS) verlagern, wenn die Daten veraltet sind.
Vergleich der oben genannten MQ:
Kontrastrichtung
Zusammenfassung
Durchsatz
Der Durchsatz von 10.000-Level-ActiveMQ und RabbitMQ (ActiveMQ weist die schlechteste Leistung auf) ist eine Größenordnung niedriger als der von 100.000-Level- oder sogar Millionen-Level-RocketMQ und Kafka.
Verfügbarkeit
Alle können eine hohe Verfügbarkeit erreichen. ActiveMQ und RabbitMQ basieren beide auf einer Master-Slave-Architektur, um eine hohe Verfügbarkeit zu erreichen. RocketMQ basiert auf einer verteilten Architektur. Kafka wird ebenfalls verteilt, mit mehreren Kopien derselben Daten. Wenn einige Maschinen ausfallen, kommt es nicht zu Datenverlust oder Nichtverfügbarkeit.
Aktualität
RabbitMQ basiert auf Erlang und verfügt daher über starke Parallelitätsfähigkeiten, eine extrem gute Leistung, eine sehr geringe Latenz, erreicht das Mikrosekunden-Niveau und andere sind auf ms-Niveau.
Funktionsunterstützung
Pulsar verfügt über umfassendere Funktionen und unterstützt Mandantenfähigkeit, mehrere Verbrauchsmodelle und Persistenzmodi. Es handelt sich um eine cloudnative verteilte Nachrichtenflussplattform der nächsten Generation.
Nachricht verloren
ActiveMQ und RabbitMQ haben eine sehr geringe Verlustwahrscheinlichkeit, und Kafka, RocketMQ und Pulsar können theoretisch einen Verlust von 0 erzielen.
Zusammenfassen:
Obwohl RabbitMQ in Bezug auf den Durchsatz Kafka, RocketMQ und Pulsar etwas unterlegen ist, verfügt es aufgrund seiner auf Erlang basierenden Entwicklung über starke Parallelitätsfähigkeiten, eine extrem gute Leistung und eine sehr geringe Latenz, die das Mikrosekundenniveau erreicht. Da RabbitMQ jedoch auf Erlang-Basis entwickelt wird, verfügen nur wenige inländische Unternehmen über die Kraft, Forschung und Anpassung auf Erlang-Quellcodeebene durchzuführen. Wenn das Geschäftsszenario keine zu hohen Anforderungen an die Parallelität stellt (100.000 oder eine Million Ebenen), ist RabbitMQ möglicherweise Ihre erste Wahl unter diesen Nachrichtenwarteschlangen.
RocketMQ und Pulsar unterstützen eine starke Konsistenz und können in Szenarien mit hohen Anforderungen an die Nachrichtenkonsistenz verwendet werden.
RocketMQ wird von Alibaba produziert und ist ein Java-Open-Source-Projekt. Wir können den Quellcode direkt lesen und dann den MQ unseres eigenen Unternehmens in den tatsächlichen Geschäftsszenarien von Alibaba testen.
Die Eigenschaften von Kafka liegen eigentlich auf der Hand: Es stellt nur weniger Kernfunktionen bereit, bietet aber einen ultrahohen Durchsatz, Latenz auf MS-Ebene, extrem hohe Verfügbarkeit und Zuverlässigkeit und die Verteilung kann beliebig erweitert werden. Gleichzeitig ist es für Kafka am besten, eine kleinere Anzahl von Themen zu unterstützen, um einen extrem hohen Durchsatz sicherzustellen. Der einzige Nachteil von Kafka besteht darin, dass Nachrichten möglicherweise wiederholt konsumiert werden, was sich nur geringfügig auf die Datengenauigkeit auswirkt. Im Bereich der Big Data- und Protokollerfassung kann diese Funktion natürlich für Big Data vernachlässigt werden - Zeitberechnung und Protokollierung. Wenn es um Echtzeit-Computing, Protokollsammlung und andere Szenarien im Bereich Big Data geht, ist die Verwendung von Kafka der Industriestandard, und es gibt absolut kein Problem. Die Community ist sehr aktiv und wird niemals pornographisch sein, ganz zu schweigen davon ist in diesem Bereich weltweit nahezu ein De-facto-Standard.
Eine einfache Umfrage zum selbst entwickelten MQ auf Unternehmensebene