国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Heim Java JavaInterview Fragen [Interview] Wie kann eine 100 % erfolgreiche Zustellung von Nachrichten sichergestellt werden? Wie kann die Nachrichten-Idempotenz sichergestellt werden?

[Interview] Wie kann eine 100 % erfolgreiche Zustellung von Nachrichten sichergestellt werden? Wie kann die Nachrichten-Idempotenz sichergestellt werden?

Jul 26, 2023 pm 02:58 PM
Interview


[Interview] Wie kann eine 100 % erfolgreiche Zustellung von Nachrichten sichergestellt werden? Wie kann die Nachrichten-Idempotenz sichergestellt werden?

1. Einführung

Unsere Freunde sollten genug über Message Middleware MQ geh?rt haben, wie zum Beispiel: RabbitMQ, RocketMQ, Kafka usw. Die Vorteile der Einführung von Middleware k?nnen dazu beitragen, hoher Parallelit?t, Peaking und Gesch?ftsentkopplung entgegenzuwirken.

[Interview] Wie kann eine 100 % erfolgreiche Zustellung von Nachrichten sichergestellt werden? Wie kann die Nachrichten-Idempotenz sichergestellt werden?

Wie oben gezeigt:

(1) Der Bestelldienst übermittelt Nachrichten an die MQ-Middleware. (2) Der Logistikdienst überwacht die MQ-Middleware-Nachrichten auf Verbrauch.

Lassen Sie uns in diesem Artikel besprechen, wie der Bestelldienst sichergestellt werden kann Am Beispiel von RabbitMQ wird die Nachricht erfolgreich an die MQ-Middleware übermittelt.

2. Analyse des Problems

Meine Freunde haben m?glicherweise einige Fragen dazu. Wenn der Bestelldienst den Nachrichtendienst initiiert, bedeutet das nicht Erfolg, wenn die Rücksendung erfolgreich ist? Zum Beispiel der folgende Pseudocode:

[Interview] Wie kann eine 100 % erfolgreiche Zustellung von Nachrichten sichergestellt werden? Wie kann die Nachrichten-Idempotenz sichergestellt werden?

Im obigen Code werden Nachrichten im Allgemeinen so gesendet. Glauben Sie, dass es ein Problem gibt?

Lassen Sie uns unten über ein Szenario sprechen. Was passiert, wenn der MQ-Server pl?tzlich ausf?llt? Sind alle Nachrichten unseres Bestellservices verschwunden? Ja, im Allgemeinen speichert die MQ-Middleware Nachrichten im Speicher, um den Durchsatz des Systems zu verbessern. Wenn keine andere Verarbeitung erfolgt, gehen alle Nachrichten verloren, sobald der MQ-Server ausf?llt. Dies wird vom Unternehmen nicht zugelassen und wird gro?e Auswirkungen haben.

3. Persistenz

Ich wei?, dass es beim Senden einer Nachricht einen dauerhaften Parameter gibt, der auf ?true“ gesetzt werden kann , es wird Persistenz.

[Interview] Wie kann eine 100 % erfolgreiche Zustellung von Nachrichten sichergestellt werden? Wie kann die Nachrichten-Idempotenz sichergestellt werden?

In diesem Fall werden die Nachrichten auch bei einem Ausfall des MQ-Servers nach dem Neustart in der Festplattendatei gespeichert, sodass sie nicht verloren gehen. Ja, dadurch wird sichergestellt, dass die Nachricht mit einer gewissen Wahrscheinlichkeit nicht verloren geht.

Aber es wird ein Szenario geben, in dem die Nachricht gerade im MQ-Speicher gespeichert wurde, aber bevor sie in der Festplattendatei aktualisiert werden kann, stürzt sie pl?tzlich ab. (Verdammt, das wird in so kurzer Zeit passieren. Die Wahrscheinlichkeit ist zu gering.) Dieses Szenario wird im Prozess der kontinuierlichen Nachrichtenzustellung in gro?em Ma?stab sehr h?ufig auftreten.

Was tun? Wie k?nnen wir sicherstellen, dass es auf der Festplatte gespeichert bleibt?

4. Mechanismus best?tigen

Das obige Problem entsteht, weil uns niemand sagt, ob Persistenz erfolgreich ist. Glücklicherweise verfügen viele MQs über Rückrufbenachrichtigungsfunktionen und RabbitMQ verfügt über einen Best?tigungsmechanismus, der uns benachrichtigt, ob die Persistenz erfolgreich ist.

[Interview] Wie kann eine 100 % erfolgreiche Zustellung von Nachrichten sichergestellt werden? Wie kann die Nachrichten-Idempotenz sichergestellt werden?

Prinzip des Best?tigungsmechanismus:

(1) Der Nachrichtenproduzent sendet die Nachricht an MQ. Wenn der Empfang erfolgreich ist, sendet MQ eine Best?tigungsnachricht an den Produzenten zurück ist nicht erfolgreich, MQ Eine Nack-Nachricht wird an den Produzenten zurückgegeben

Der obige Pseudocode verfügt über zwei M?glichkeiten, Nachrichten zu verarbeiten, n?mlich Best?tigungsrückruf und Nack-Rückruf. [Interview] Wie kann eine 100 % erfolgreiche Zustellung von Nachrichten sichergestellt werden? Wie kann die Nachrichten-Idempotenz sichergestellt werden?


Ist dadurch sichergestellt, dass nicht 100 % der Nachrichten verloren gehen?

Werfen wir einen Blick auf den Best?tigungsmechanismus? Stellen Sie sich vor, jedes Mal, wenn unser Produzent eine Nachricht sendet, muss MQ auf der Festplatte gespeichert werden und dann einen Best?tigungs- oder Nack-Rückruf initiieren. In diesem Fall ist der Durchsatz unseres MQ sehr gering, da die Nachricht jedes Mal auf der Festplatte gespeichert werden muss. Das Schreiben auf die Festplatte ist sehr langsam. Dies ist in Szenarien mit hoher Parallelit?t nicht akzeptabel und der Durchsatz ist zu gering.

Die eigentliche Implementierung der persistenten MQ-Festplatte erfolgt über einen bestimmten Mechanismus. Wenn beispielsweise Tausende von Nachrichten vorhanden sind, werden diese auf einmal geleert. Anstatt die Festplatte jedes Mal zu leeren, wenn eine Nachricht eingeht.

Der Best?tigungsmechanismus ist also tats?chlich ein asynchroner Abh?rmechanismus, der den hohen Durchsatz des Systems sicherstellen soll. Dies bedeutet, dass die Nachricht nicht zu 100 % verloren geht, denn selbst wenn der Best?tigungsmechanismus hinzugefügt wird , die Nachricht befindet sich immer noch im MQ-Speicher. Der Computer ist ohne Flashen auf die Festplatte abgestürzt und kann immer noch nicht bearbeitet werden.

Nachdem ich so viel gesagt habe, kann ich es immer noch nicht garantieren. Was soll ich also tun? ? ?

5. Nachrichtenpersistenz im Voraus + geplante Aufgaben

Tats?chlich ist der wesentliche Grund, dass es unm?glich ist, festzustellen, ob sie persistiert? K?nnen wir die Botschaft also selbst dauerhaft machen? Die Antwort lautet: Ja, unser Plan wird sich weiterentwickeln.

[Interview] Wie kann eine 100 % erfolgreiche Zustellung von Nachrichten sichergestellt werden? Wie kann die Nachrichten-Idempotenz sichergestellt werden?

Der Prozess im obigen Bild:

(1) Vor der übermittlung der Nachricht übertr?gt der Bestelldienstersteller die Nachricht zun?chst an Redis oder Redis, um eine hohe Leistung zu erzielen. Der Status der Nachricht ist Wird gesendet.

(2) Wurde die überwachungsnachricht des Best?tigungsmechanismus erfolgreich gesendet? Wenn die Best?tigung erfolgreich ist, l?schen Sie diese Nachricht in Redis.

(3) Wenn Nack fehlschl?gt, k?nnen Sie w?hlen, ob Sie die Nachricht je nach Ihrem eigenen Unternehmen erneut senden m?chten. Abh?ngig von Ihrer gesch?ftlichen Entscheidung k?nnen Sie diese Nachricht auch l?schen.

(4) Hier wird eine geplante Aufgabe hinzugefügt, um die Nachricht nach einer bestimmten Zeitspanne abzurufen. Der Nachrichtenstatus wird immer noch gesendet. Dieser Status zeigt an, dass der Bestelldienst die Best?tigungs-Erfolgsnachricht nicht erhalten hat.

(5) Geplante Aufgaben liefern kompensatorische Nachrichten. Wenn zu diesem Zeitpunkt die MQ-Rückrufbest?tigung erfolgreich empfangen wird, wird die Nachricht in Redis gel?scht.

Dieser Mechanismus ist eigentlich ein Kompensationsmechanismus. Es ist mir egal, ob MQ ihn tats?chlich empf?ngt. Solange der Nachrichtenstatus in meinem Redis [Sendet] lautet, bedeutet dies, dass die Nachricht nicht erfolgreich korrekt zugestellt wurde. Starten Sie dann die geplante Aufgabe zur überwachung und Einleitung der Entsch?digungslieferung.

Natürlich k?nnen wir auch eine Kompensationsnummer für die geplante Aufgabe hinzufügen und immer noch keine Best?tigungsnachricht erhalten, dann setzen Sie den Status der Nachricht direkt auf [Fehlgeschlagen] und lassen Sie die Leute manuell überprüfen, warum ?

In diesem Fall ist die L?sung perfekter und stellt sicher, dass 100 % der Nachrichten nicht verloren gehen (dabei ist der Festplattenausfall natürlich nicht berücksichtigt, sodass eine Master-Slave-L?sung verwendet werden kann).

Mit dieser L?sung ist es jedoch m?glich, dieselbe Nachricht mehrmals zu senden. Es ist sehr wahrscheinlich, dass MQ die Nachricht bereits empfangen hat, beim Rückruf der Best?tigungsnachricht jedoch ein Netzwerkfehler aufgetreten ist, der Produzent jedoch nicht Erhalte es.

Dann müssen wir von Verbrauchern verlangen, beim Konsum auf Idempotenz zu achten!

Sechs, die Bedeutung von Idempotenz

Lassen Sie uns zun?chst verstehen, was Idempotenz ist. In verteilten Anwendungen ist Idempotenz sehr wichtig. Das hei?t, wenn ein Unternehmen unter denselben Bedingungen betrieben wird, ist das Ergebnis dasselbe, unabh?ngig davon, wie oft es ausgeführt wird.

6.1. Warum gibt es ein solches Szenario wie idempotent?

Warum gibt es ein Szenario wie idempotent? Denn in gro?en Systemen werden sie alle verteilt eingesetzt. Beispielsweise k?nnen Auftragsgesch?ft und Lagergesch?ft unabh?ngig voneinander eingesetzt werden und sind separate Dienste. Wenn ein Benutzer eine Bestellung aufgibt, werden der Bestellservice und der Lagerservice aufgerufen.

[Interview] Wie kann eine 100 % erfolgreiche Zustellung von Nachrichten sichergestellt werden? Wie kann die Nachrichten-Idempotenz sichergestellt werden?

Aufgrund der verteilten Bereitstellung ist es sehr wahrscheinlich, dass der Aufruf des Bestellservices aus Netzwerk- und anderen Gründen fehlschl?gt. Tats?chlich wurde der Inventarservice jedoch verarbeitet, bei der Verarbeitung ist jedoch eine Ausnahme aufgetreten Das Ergebnis wurde an den Bestellservice zurückgegeben. Zu diesem Zeitpunkt erstellt das System im Allgemeinen einen Vergütungsplan, d. h. der Bestelldienst ruft dann den Lagerdienst an und der Lagerbestand wird um 1 reduziert.

[Interview] Wie kann eine 100 % erfolgreiche Zustellung von Nachrichten sichergestellt werden? Wie kann die Nachrichten-Idempotenz sichergestellt werden?

Es liegt tats?chlich ein Problem vor, der letzte Anruf wurde um 1 reduziert, aber der Bestellservice hat das Bearbeitungsergebnis nicht erhalten. Jetzt wird es erneut aufgerufen und muss um 1 reduziert werden. Dies entspricht nicht dem Gesch?ft und ist ein zus?tzlicher Abzug.

Das Konzept der Idempotenz besteht darin, dass das Verarbeitungsergebnis dasselbe ist, egal wie oft der Inventardienst unter denselben Bedingungen aufgerufen wird. Nur so kann die Durchführbarkeit des Vergütungsplans sichergestellt werden. 6.2. Optimistisches Sperrschema Führen Sie die Bestandsaufnahme durch und bringen Sie dann diese Versionsnummer mit. Lassen Sie uns das kl?ren. Als wir die Inventur zum ersten Mal durchführten, bekamen wir Version 1, und als wir den Inventurservice anriefen, gab es ein Problem, als wir zum Bestellservice zurückkehrten Wenn der Bestelldienst als Version übergeben wird und die obige SQL-Anweisung erneut ausgeführt wird, wird sie nicht ausgeführt, da die Version auf 2 ge?ndert wurde. Dies stellt sicher, dass es, egal wie oft es aufgerufen wird, nur einmal tats?chlich verarbeitet wird.

6.3. Eindeutige ID + Fingerabdruckcode

Das Prinzip besteht darin, den Datenbank-Prim?rschlüssel zu verwenden, um Duplikate zu entfernen. Geben Sie nach Abschluss des Gesch?fts die Prim?rschlüssel-ID ein ist der einzige Prim?rschlüssel der Gesch?ftstabelle, z. B. die Produkt-ID

  • Der Fingerabdruckcode dient zur Unterscheidung des Codes für jeden normalen Vorgang. Der Fingerabdruckcode wird für jeden Vorgang generiert. Es kann die Methode Zeitstempel + Gesch?ftsnummer verwendet werden.

  • Die obige SQL-Anweisung:

    • Wenn der Rückgabewert 0 ist, bedeutet dies, dass nach dem Gesch?ftsvorgang kein Vorgang durchgeführt wurde. Sie k?nnen ihn in t_check (eindeutige ID + Fingerabdruckcode) einfügen

    • Rückgabewert, wenn er gr??er als 0 ist. Nach der Operation direkt zurückkehren

    Vorteile: Einfache Implementierung

    Nachteile: Datenbankengpass bei hoher Parallelit?t

    L?sung: Datenbanken und Tabellen nach ID für Algorithmus-Routing aufteilen

    6.4, Redis-Atomoperation

    Verwenden Sie die atomare Operation von Redis, um den Abschluss der Operation zu markieren. Diese Leistung ist besser. Aber es wird einige Probleme geben.

    Erstens: Müssen wir die Gesch?ftsergebnisse in der Datenbank speichern? Wenn ja, besteht das Hauptproblem, das es zu l?sen gilt, darin, wie man Atomizit?t in Datenbank- und Redis-Operationen erreicht?

    Das bedeutet, dass der Bestand um 1 reduziert wird, aber was soll ich tun, wenn der Redis-Vorgang nach Abschluss der Markierung fehlschl?gt? Das hei?t, wir müssen sicherstellen, dass die Datenbankl?schung und die Redis-Operation entweder erfolgreich sind oder fehlschlagen. Zweitens: Wenn die Datenbank nicht gel?scht wird, wird alles im Cache gespeichert. Wie wird die geplante Synchronisierungsstrategie festgelegt?

    Dies bedeutet, dass der Bestand um 1 reduziert wird und der Redis-Vorgang nicht direkt ausgeführt wird, um die Markierung abzuschlie?en. Anschlie?end wird ein weiterer Synchronisierungsdienst verwendet, um den Bestand zu l?schen , und wie man die Synchronisationsstrategie festlegt

    Das obige ist der detaillierte Inhalt von[Interview] Wie kann eine 100 % erfolgreiche Zustellung von Nachrichten sichergestellt werden? Wie kann die Nachrichten-Idempotenz 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

    Undress AI Tool

    Undress AI Tool

    Ausziehbilder kostenlos

    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.

    Clothoff.io

    Clothoff.io

    KI-Kleiderentferner

    Video Face Swap

    Video Face Swap

    Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

    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)

    Hei?e Themen

    PHP-Tutorial
    1502
    276
    Lassen Sie uns darüber sprechen, wie Sie das beste Node.js-Docker-Image ausw?hlen. Lassen Sie uns darüber sprechen, wie Sie das beste Node.js-Docker-Image ausw?hlen. Dec 13, 2022 pm 08:00 PM

    Die Auswahl eines Docker-Images für Node mag trivial erscheinen, aber die Gr??e und potenziellen Schwachstellen des Images k?nnen erhebliche Auswirkungen auf Ihren CI/CD-Prozess und Ihre Sicherheit haben. Wie w?hlen wir also das beste Node.js-Docker-Image aus?

    Wie lassen sich dom?nenübergreifende Probleme l?sen? Eine kurze Analyse g?ngiger L?sungen Wie lassen sich dom?nenübergreifende Probleme l?sen? Eine kurze Analyse g?ngiger L?sungen Apr 25, 2023 pm 07:57 PM

    Dom?nenübergreifend ist ein Szenario, das in der Entwicklung h?ufig vorkommt und auch ein h?ufig in Interviews diskutiertes Thema ist. Die Beherrschung g?ngiger dom?nenübergreifender L?sungen und der dahinter stehenden Prinzipien kann nicht nur unsere Entwicklungseffizienz verbessern, sondern auch in Vorstellungsgespr?chen bessere Leistungen erbringen.

    Ein Artikel zum Verst?ndnis des Singleton-Musters in JavaScript Ein Artikel zum Verst?ndnis des Singleton-Musters in JavaScript Apr 25, 2023 pm 07:53 PM

    Das JS-Singleton-Muster ist ein h?ufig verwendetes Entwurfsmuster, das sicherstellt, dass eine Klasse nur eine Instanz hat. Dieser Modus wird haupts?chlich zur Verwaltung globaler Variablen verwendet, um Namenskonflikte und wiederholtes Laden zu vermeiden. Au?erdem kann er die Speichernutzung reduzieren und die Wartbarkeit und Skalierbarkeit des Codes verbessern.

    Sammlung von Interviewfragen zum Golang-Framework Sammlung von Interviewfragen zum Golang-Framework Jun 02, 2024 pm 09:37 PM

    Das Go-Framework besteht aus einer Reihe von Komponenten, die die integrierten Bibliotheken von Go erweitern und vorgefertigte Funktionen bereitstellen (z. B. Webentwicklung und Datenbankoperationen). Zu den beliebten Go-Frameworks geh?ren Gin (Webentwicklung), GORM (Datenbankoperationen) und RESTful (API-Verwaltung). Middleware ist ein Interceptor-Muster in der HTTP-Anforderungsverarbeitungskette und wird verwendet, um Funktionen wie Authentifizierung oder Anforderungsprotokollierung hinzuzufügen, ohne den Handler zu ?ndern. Die Sitzungsverwaltung verwaltet den Sitzungsstatus durch die Speicherung von Benutzerdaten. Sie k?nnen gorilla/sessions zum Verwalten von Sitzungen verwenden.

    Ausgew?hlte Java JPA-Interviewfragen: Testen Sie Ihre Beherrschung des Persistenz-Frameworks Ausgew?hlte Java JPA-Interviewfragen: Testen Sie Ihre Beherrschung des Persistenz-Frameworks Feb 19, 2024 pm 09:12 PM

    Was ist JPA? Wie unterscheidet es sich von JDBC? JPA (JavaPersistence API) ist eine Standardschnittstelle für objektrelationales Mapping (ORM), die es Java-Entwicklern erm?glicht, vertraute Java-Objekte zum Betreiben von Datenbanken zu verwenden, ohne SQL-Abfragen direkt in die Datenbank schreiben zu müssen. JDBC (JavaDatabaseConnectivity) ist die Standard-API von Java für die Verbindung mit Datenbanken. Sie erfordert, dass Entwickler SQL-Anweisungen verwenden, um die Datenbank zu betreiben. JPA kapselt JDBC, bietet eine bequemere und übergeordnete API für die objektrelationale Zuordnung und vereinfacht Datenzugriffsvorg?nge. Was ist in JPA eine Entit?t? juristische Person

    Wie bestimmt JavaScript den Datentyp? 8 M?glichkeiten zum Teilen Wie bestimmt JavaScript den Datentyp? 8 M?glichkeiten zum Teilen Feb 16, 2023 pm 02:48 PM

    Wie bestimmt JavaScript den Datentyp? In diesem Artikel werden 8 M?glichkeiten zur Verwendung von JS zur Bestimmung des Datentyps vorgestellt, die die Arbeit und Interviews effektiv unterstützen k?nnen. Der Interviewer l?chelte leicht, nachdem er ihn gelesen hatte.

    Lassen Sie uns über das URL-Modul und das Querystring-Modul in Node sprechen Lassen Sie uns über das URL-Modul und das Querystring-Modul in Node sprechen Feb 23, 2023 pm 07:39 PM

    Das URL-Modul und das Querystring-Modul sind zwei sehr wichtige URL-Verarbeitungsmodule. Es wird h?ufig bei der Entwicklung von Knotenservern verwendet.

    100 h?ufige PHP-Interviewfragen (mit Analyse), um Ihren Wissensvorrat zu erweitern! 100 h?ufige PHP-Interviewfragen (mit Analyse), um Ihren Wissensvorrat zu erweitern! May 11, 2022 am 10:45 AM

    In diesem Artikel werden 100 h?ufig gestellte PHP-Interviewfragen (mit gemeinsamen Antworten) zusammengestellt und geteilt, um Ihnen dabei zu helfen, Grundkenntnisse zu erwerben und Ihren PHP-Wissensvorrat zu erweitern. Es hat einen gewissen Referenzwert. Freunde in Not k?nnen sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.

    See all articles