Implementierungspraxis für Apache RocketMQ 5.0 Tencent Cloud

Überprüfung der Apache RocketMQ-Entwicklungsgeschichte

RocketMQ wurde erstmals in der Online-E-Commerce-Transaktionsszene von Taobao geboren. Nach Jahren mit doppeltem Spitzenwert im Werbeverkehr wurde es 2016 an die Apache-Community gespendet und wurde zum Top-Projekt der Apache-Community. Es wurde in inländischen und ausländischen e -Handel, Finanzen, Internet und andere Branchen. Es wurde von Kunden aus allen Gesellschaftsschichten bestätigt und genießt weithin Anerkennung.

Die Apache RocketMQ-Community hat die neue Version 5.0 im Oktober 2022 offiziell veröffentlicht. Das Tencent Cloud Message Queue-Team hat auch eng mit der Community zusammengearbeitet, um die kommerzielle Version von 5.0 zu unterstützen. Jetzt werden wir die Erkenntnisse aus dem gesamten Implementierungsprozess zusammenfassen und etwas zurückgeben die Gemeinde. .

Was ist RocketMQ 5.0?

Eine neue Versionsnummer?

Eine neu gestaltete API?

Eine Reihe neuer Funktionen implementiert?

Eine neue Architektur, die Speicherung und Berechnung trennt?

Eine neue kommerzielle Produktform?

RocketMQs neues Denken für Cloud Native?

Die Apache RocketMQ-Community hat die neue 5.0-Architektur im vergangenen Jahr aus verschiedenen Blickwinkeln geteilt und vorgestellt, was dazu geführt hat, dass viele Benutzer ein inkonsistentes Verständnis der neuen 5.0-Architektur haben. Tatsächlich sind die Verständnisse aus den oben genannten verschiedenen Blickwinkeln korrekt. Dieser Artikel versucht dies Geben Sie eine umfassendere Erklärung aus mehreren Dimensionen und überprüfen Sie sie, um Benutzern zu helfen, die Denklogik hinter der Entwicklung der RocketMQ 5.0-Architektur vollständig zu verstehen.

Entwicklungsziele von RocketMQ 5.0

  • Die Infrastruktur passt sich Cloud-nativ an

Die Umgebung, auf die RocketMQ zum Betrieb angewiesen ist, hat in den letzten zehn Jahren enorme Veränderungen erfahren. Von der frühesten Bereitstellung physischer Maschinen bis hin zum heutigen Cloud Computing ist es tief in den Herzen der Menschen verankert. Ressourcen werden immer „elastischer skalierbar“. „Pay-as-you-go, hohe SLA“ und Rechenressourcen sind in Containern untergebracht. Speicherressourcen haben sich zu standardmäßigem verteiltem Speicher wie Blockspeicher, Dateispeicher und Objektspeicher entwickelt, die immer ausgereifter und standardisierter werden. Insbesondere Objektspeicher S3 bietet im Vergleich zu anderen Speichersystemen große Kostenvorteile. Bei der Weiterentwicklung der Architektur geht es darum, die Vorteile neuer Rechen- und Speicherressourcen voll auszuschöpfen.

  • Leichte API und vollständige mehrsprachige SDK-Unterstützung

Die Protokolle vor RocketMQ 4.x basierten auf dem privaten Remoting-Protokoll, das vor mehr als zehn Jahren entwickelt wurde, was zu sehr hohen Kosten für die Entwicklung von Nicht-Java-Sprach-SDKs führte. Daher können die neuen API- und Proxy-Modi, die auf gRPC basieren, in 5.0 verwendet werden Erleichtern Sie mehrsprachige SDKs erheblich. Entwickeln und bereichern Sie das mehrsprachige Ökosystem.

  • Integration von Botschaften, Ereignissen, Strömungsszenarien und ökologischem Ausbau

Die Community verfügt auch über Open-Source-Peripherieprojekte wie EventBridge, Connector, Stream, MQTT usw., die dazu beitragen werden, die umgebende Ökologie zu verbessern und zu erweitern und weitere Geschäftsszenarien zu erweitern.

Wichtige neue Funktionen von RocketMQ 5.0

Um die oben genannten drei Hauptentwicklungsziele zu unterstützen, führt die RocketMQ 5.0-Version eine große Anzahl neuer Technologien und Funktionen ein. Hier finden Sie eine kurze Einführung nacheinander in einige wichtige Funktionen. Viele davon wurden in Tencent Cloud tatsächlich verwendet einen geschäftlichen Wert ausgeübt haben.

POP-Verbrauchsmodell

Versionen vor RocketMQ 5.0 boten nur den Pull-Verbrauchsmodus (sogar PushConsumer simuliert den Push-Effekt durch Pull- und langes Rotationstraining). Der Pull-Verbrauchsmodus ähnelt dem Kafka-Verbrauchsmodus. Er erfordert außerdem einen Lastausgleich auf dem Client und die Berechnung von Client-Instanzen und Warteschlangen. Die Zuordnungsbeziehung und das anschließende Konsumieren von Nachrichten und Verwalten der Standortinformationen der Warteschlange über das neue POP-Verbrauchsmodell bringen die folgenden offensichtlichen Vorteile:

  • Es ist nicht erforderlich, die Zuordnungslogik auf dem Client zu berechnen, was die Client-Logik vereinfacht

  • Reduziert die Komplexität der Client-SDK-Entwicklung und erleichtert die schnelle Unterstützung mehrsprachiger Clients

  • Die Verbrauchsseite wird vollständig auf der Broker-Seite verwaltet, um Verbrauchsverzögerungen durch langsame einzelne Verbrauchsknoten zu vermeiden.

  • Der Proxy-Modus passt sich reibungsloser an andere Protokolle an und erleichtert so die Durchführung von Push-Pull-Konvertierungen bei der Unterstützung mehrerer Verbrauchsmodelle.

In der Produktform von RocketMQ 5.0 übernimmt Tencent Cloud den POP-Verbrauchsmodus, um das neue 5.0-Protokoll zu unterstützen und mit anderen Nachrichtenprotokollen kompatibel zu sein, was bequem die vollständige Zustandslosigkeit und den Lastausgleich von Proxy unterstützt.

Ausführlichere erweiterte Lesereferenz zum POP-Lösungsdesign:

Neues API-Design basierend auf gRPC

In den letzten Jahren ist die RocketMQ-Community zunehmend auf die Mängel des Remoting-Protokolls bei der Unterstützung von RocketMQ 4 aufmerksam geworden. Proxy-Lösung, diese neue API entspricht der offiziellen einheitlichen skalierbaren Proxy-Lösung, die Unternehmen die Zusammenführung erleichtert Seien Sie mit einigen anderen Protokollen kompatibel, die auf diesem Proxy basieren, vereinheitlichen und vereinfachen Sie die Architektur und bilden Sie schließlich einen Speicherkern mit RocketMQ Broker, einer einheitlichen Architektur für zustandslose, vom Proxy getrennte Speicherung und Berechnung, die mit verschiedenen Nachrichtenprotokollen kompatibel ist.

Da der Proxy bei der Implementierung der neuen Architektur von Tencent Cloud CPU-intensive Berechnungen wie Protokollserialisierung und -konvertierung durchführen muss, muss auf die Optimierung der CPU-Auslastung geachtet werden. Wir haben der Community außerdem mehrere Optimierungscodes übermittelt. Im Folgenden finden Sie unsere Spezifikationen für 4C8G-Referenzdrucktestdaten:

Eine typische Flammendiagrammbelegungsanalyse während des Proxy-Drucktestprozesses sieht wie folgt aus:

Ausführlichere Informationen zum neuen Lösungsdesign und erweiterte Lektüre finden Sie unter:

Geplante Nachrichten der zweiten Ebene

Zeitgesteuerte Nachrichten sind ein Nachrichtentyp, der häufig in Online-Messaging-Szenarien verwendet wird. Nachdem der Absender die Nachricht gesendet hat, möchte er nicht, dass der Abonnent die Nachricht sofort konsumiert. Stattdessen wartet er eine gewisse Zeit, bevor die Nachricht für den Abonnenten sichtbar wird Ein typisches Geschäftsszenario ist das Aufgeben einer Bestellung. Überprüfen Sie den Bestellstatus nach fünf Minuten oder generieren Sie Punkte oder Gutscheine zu einem festgelegten Zeitpunkt am nächsten Tag nach erfolgreicher Transaktion.

Versionen vor RocketMQ 5.0 konnten nur den Mechanismus mit festen Intervallen zum Wiederholen von Nachrichten verwenden, um Timing-Nachrichten auf fester Ebene zu implementieren. In der neuen Version 5.0 wurden Timing-Nachrichten neu implementiert und können extrem große und langfristige Timing-Nachrichten unterstützen jede Granularität der zweiten Ebene.

Ausführlichere Informationen zum Design des Timing-Nachrichtenschemas der zweiten Ebene und weiterführende Literatur finden Sie unter:

Abgestufter Speicher

RocketMQ 4.x unterstützt nur Blockgeräte wie lokale Festplatten oder Cloud-Festplatten als persistente Speichermedien. Obwohl Blockgerätespeicher eine geringe Latenz und Zuverlässigkeit bieten können, sind seine Speicherkosten fünf- bis zehnmal so hoch wie die von Objektspeichern und Nachrichtenwarteschlangen Die Daten sind typische heiße und kalte verteilte Daten. Laut den Statistiken des Autors werden im tatsächlichen System etwa 85 % der heißen Daten innerhalb von 10 Minuten über den Speichercache gelesen, und die zweiten 10 % der warmen Daten können innerhalb von 1 Stunde gelesen werden. Das sind etwa 5 %. % der kalten Daten werden nur in Szenarien gelesen, in denen sie über einen längeren Zeitraum akkumuliert oder im Nachhinein verbraucht werden.

RocketMQ 5.0 führt die Tiered-Storage-Technologie ein, mit der kalte Daten in kostengünstigeren Speicher wie Objektspeicher verschoben werden können, wodurch die Gesamtspeicherkosten erheblich gesenkt werden können, ohne dass die Benutzererfahrung beeinträchtigt wird. Die Implementierungsidee ist in der folgenden Abbildung dargestellt. Der Zweck der hierarchischen Speicherung wird durch asynchrones Kopieren von Nachrichten in den hierarchischen Speicher beim Schreiben, Priorisieren des Lesens aus dem lokalen Speicher beim Lesen und anschließendes Lesen des Remote-Speichers erreicht, wenn kein Treffer vorliegt.

Bei der Implementierung von Tiered Storage wählte Tencent Cloud Tencent Cloud Cloud Disk CBS als Primärspeicher und Tencent Cloud Object Storage COS als Sekundärspeicher. Die folgende Tabelle ist ein Leistungstestbericht, den wir auf Tencent Cloud durchgeführt haben, als Tiered Storage aktiviert war. Es wird nahezu keine Auswirkungen auf das Online-Geschäft haben, was mit dem erwarteten Verhalten des Codes übereinstimmt (asynchroner Schreibobjektspeicher versenden, lokaler Cache zum Lesen heißer Daten), der Sekundärspeicher-Einzelpartitionsverbrauch kann 7500 msg/s unterstützen und erweiterte Partitionen können erweitert werden die Verbrauchsgeschwindigkeit in gleichen Anteilen, die Online-Nachfragestandards erfüllen können.

Ausführlichere Implementierungslösungen finden Sie in der RIP-Dokumentation:

KV-basierter Millionen-Warteschlangenindex

In der RocketMQ 4.x-Version speichert jedes Thema Nachrichten tatsächlich in mehreren Warteschlangen. Die Warteschlangendaten werden in einem einheitlichen Commitlog gespeichert. Der Nachrichtenwarteschlangenindex wird über die Dateiwarteschlange gespeichert. Wenn die Warteschlange weniger als 10.000 beträgt. Wenn die Anzahl der Warteschlangen Wenn die Anzahl der Warteschlangen 100.000 überschreitet, können die Lese- und Schreibdienste stabil und effizient bereitgestellt werden. Wenn die Anzahl der Warteschlangen 100.000 überschreitet, wird der Warteschlangenindex in schwerwiegende zufällige Schreibvorgänge umgewandelt, was zu erheblichen Leistungseinbußen führt.

RocketMQ 5.0 führt den RocksDB-Speicherwarteschlangenindex ein und verwendet die LSM-Indexstruktureigenschaften von RocksDB, um zufällige Schreibvorgänge einer großen Anzahl von Dateiwarteschlangenindizes in sequentielle Schreibvorgänge von SST-Dateien umzuwandeln. Selbst wenn es Millionen von Nachrichtenwarteschlangen gibt, aus der Perspektive des Ganzen Architektur, die zugrunde liegende Cloud-Festplatte ist immer noch Nur eine kleine Anzahl sequentiell geschriebener Dateien kann weiterhin stabile Lese- und Schreibdienste für Nachrichten bereitstellen.

Das Folgende sind die in unserer Testumgebung gemessenen Daten: Wenn die Anzahl der Warteschlangen gering ist, unterscheiden sich die TPS- und Zeitverbrauchsindikatoren der beiden Lösungen nicht wesentlich. Wenn die Anzahl der Warteschlangen jedoch 200.000 überschreitet, basiert die Indexlösung auf RocksDB hat Vorteile in Bezug auf Leistung und Stabilität. Offensichtlich.

Eine ausführlichere Einführung in den Implementierungsplan finden Sie unter:

Native Batch-Messaging-Unterstützung

Die Batch-Nachricht in der RocketMQ 4.x-Version ist eine „Pseudo-Batch“-Nachrichtenimplementierung. Der Absender muss ein auf Geschäftsebene organisiertes Nachrichtenarray senden. Nachdem RocketMQ Broker das Nachrichtenarray empfangen hat, wird es in mehrere Nachrichten aufgeteilt um eins. Für die Verarbeitung des Nachrichtenschreibens weist die alte Lösung zwar eine gute Kompatibilität auf und ist einfach zu implementieren, optimiert jedoch nur den Netzwerk-Overhead, und die Optimierung der Komprimierungs- und Speicherleistung ist nicht offensichtlich.

RocketMQ 5.0 führt die neue AutoBatch-Funktion ein und optimiert die gesamte Verknüpfung von Batch-Nachrichten, von der automatischen Batch-Programmierschnittstelle auf der Sendeseite bis hin zum neuen Speicherformat und der Indexstruktur.

Das Folgende sind die Stresstestdaten mehrerer Szenarien, die von der RocketMQ-Community Salty Fish (guyinyou · GitHub) bereitgestellt werden und den normalen Nachrichtendurchsatz vergleichen Verdoppelt die Verbesserung im Vergleich zu Kafka, kann es unter denselben Knotenspezifikationen und Geschäftsszenarien nahezu den gleichen Durchsatz erzielen. Im Szenario mit größeren Partitionen bietet es einen besseren Sendeverzögerungs-Jitter:

Unter Verwendung derselben Testknoten und Kafka zum Leistungsvergleich übernimmt die Bereitstellungsarchitektur ein Testszenario mit 3 Knoten und 2 Replikaten. Unter den gleichen 16 Partitionen kann fast der gleiche Durchsatz, aber eine geringere Sendeverzögerung erreicht werden, und zwar mit zunehmender Anzahl der Partitionen , RocketMQ Es hat offensichtliche Vorteile in Bezug auf Stabilität und Sendeverzögerung.

Ausführlichere Designdokumente und Testergebnisse finden Sie unter:

jRaft Controller-Implementierung

Die Master-Slave-Replikation von RocketMQ 4.x bietet eine einfache und effiziente Lösung mit hoher Zuverlässigkeit für Nachrichten, es fehlt jedoch immer eine Funktion, die Master und Slave nicht automatisch wechseln kann. Obwohl der DLedger-Modus das Problem der automatischen Masterauswahl durch drei Replikate löst Floß, die Leistung ist relativ schlecht. Schlecht und die Maschinenkosten sind hoch.

RocketMQ 5.0 fügt eine neue Controller-Komponente hinzu (diese Komponente kann zusammen mit Namesrv bereitgestellt werden), um das Problem des automatischen Wechsels im Master-Slave-Replikationsbereitstellungsmodus zu lösen. Die Standard-Controller-Komponente der Community basiert jedoch auf DLedger und Raft implementiert es nicht. Nicht perfekt, Mitglieder des Tencent Cloud Messaging-Teams haben der Community eine neue, ausgereiftere Raft-Implementierungslösung basierend auf SOFAJRaft zur Verfügung gestellt, die dies kann Erzielen Sie einen stabileren und zuverlässigeren Master-Slave-Schalter.

Der Leistungsvergleich verschiedener Replikate und Synchronisationsmechanismen ist in der folgenden Abbildung dargestellt:

Die Chaos-Testergebnisse in der Tencent Cloud-Testumgebung wurden alle bestanden:

Ausführlichere Referenzen zum Designdokument des JRaft Controllers:

Anderer neuer Funktionsindex

Die RocketMQ-Community verfügt über detaillierte RIP-Dokumente und Überprüfungsprozesse für wichtige Funktionsänderungen. Aus Platzgründen werden in diesem Artikel nur einige wichtige neue Funktionen für eine kurze Einführung ausgewählt. Sie können auf weitere neue Funktionen verweisen . Alle Community-RIP-Listen-Links

Der Kommerzialisierungsprozess von Tencent Cloud RocketMQ

Das Tencent Cloud Message Queuing-Team hat in den letzten Jahren einen vollständigen Kommerzialisierungsprozess auf Basis der Apache RocketMQ-Community durchlaufen und im September 2023 offiziell die kommerzielle Version 5.x auf den Markt gebracht, die äußerst flexible und kostengünstigere RocketMQ-Dienste für unterschiedliche Anforderungen bietet Szenarien. Die differenzierte Nachfrage nach RocketMQ wurde in vielen Branchen wie Finanzen, Reisen, Bildung und Spiele umgesetzt.

Neues Upgrade der Speicher- und Computertrennungsarchitektur

Innerhalb von Tencent Cloud haben wir auch die Bereitstellungsarchitektur angepasst. Gemäß der von RocketMQ 5.0 empfohlenen Speicher- und Berechnungstrennungsarchitektur können wir den Betrieb und die Wartung von RocketMQ vereinfachen und Benutzern ein besseres Upgrade- und Bereitstellungsflexibilitätserlebnis bieten.

Das Bild unten zeigt die neue Speicher- und Berechnungstrennungsarchitektur von RocketMQ 5.0:

Brandneue serverlose 5.0-Produktform

Basierend auf der oben genannten neuen Architektur zur Trennung von Speicher und Datenverarbeitung haben wir eine neue serverlose Produktform von TDMQ RocketMQ 5.0 auf den Markt gebracht. Durch ein neues Pay-as-you-go-Abrechnungsmodell bieten die Professional-Version und höher elastische TPS-Funktionen kostenlos. Es kann Notfälle zu geringeren Kosten bewältigen. Senden Sie Datenverkehr.

Zusammenfassung und Perspektiven der Umsetzungspraxis

Wenn wir auf die Entwicklungsgeschichte von RocketMQ in den letzten zehn Jahren zurückblicken, können wir die dynamische Entwicklung der RocketMQ-Community und die schnelle iterative Weiterentwicklung der Funktionen erkennen. Außerdem gibt es schnelle Implementierungsunterstützung durch große inländische Cloud-Anbieter. Tencent Cloud wird dies auch weiterhin tun Investieren Sie stark in Forschung und Entwicklung, um RocketMQ-Benutzern mehr und bessere Auswahlmöglichkeiten zu bieten.

Tencent Cloud hat der RocketMQ-Community während des Kommerzialisierungsprozesses von RocketMQ auch aktiv etwas zurückgegeben. Im vergangenen Jahr hat Tencent Cloud der RocketMQ-Community mehr als 30 Fehlerkorrekturen und Codezusammenführungen zur Leistungsoptimierung beigesteuert und einen Beitrag geleistet RIP 67 und hoffe, in Zukunft enger mit der RocketMQ-Community zusammenzuarbeiten, zum Wohlstand und zur Entwicklung von Apache RocketMQ beizutragen und den Benutzern bessere Leistungen zu bieten RocketMQ-Dienste.

Tang Xiaoou, Gründer von SenseTime, ist im Alter von 55 Jahren verstorben Im Jahr 2023 stagniert PHP Wi-Fi 7 wird vollständig verfügbar sein Anfang 2024 Debüt, fünfmal schneller als Wi-Fi 6 Das Hongmeng-System steht kurz vor der Unabhängigkeit und viele Universitäten haben „Hongmeng-Klassen“ eingerichtet Zhihui Das Startup-Unternehmen von Jun refinanziert sich, der Betrag übersteigt 600 Millionen Yuan und die Pre-Money-Bewertung beträgt 3,5 Milliarden Yuan Quark Browser PC-Version startet interne Tests KI-Code-Assistent ist beliebt, und Programmiersprachen-Rankings sind alle Es gibt nichts, was Sie tun können Das 5G-Modem und die Hochfrequenztechnologie des Mate 60 Pro liegen weit vorne MariaDB spaltet SkySQL auf und etabliert sich als unabhängiges Unternehmen Xiaomi antwortet auf Yu Chengdongs „Keel Pivot“-Plagiatsaussage von Huawei
{{o.name}}
{{m.name}}

Supongo que te gusta

Origin my.oschina.net/u/4587289/blog/10322342
Recomendado
Clasificación