Queue Broker Capella Queue

Hallo!





Ich habe oft Header wie "Apache Kafka vs RabbitMQ vs NATS" gesehen, aber was ist, wenn es etwas gibt, das nicht zu den vorgefertigten Lösungen passt? Sie können sich anpassen oder etwas Eigenes erfinden. Ich bin den zweiten Weg gegangen. In diesem Artikel möchte ich über meine Implementierung eines Nachrichtenbrokers sprechen. Wenn Sie interessiert sind, willkommen bei Katze.





1.1 Bestellungen speichern

Vor einiger Zeit habe ich in einem sehr großen Online-Shop gearbeitet. Es gab eine gemeinsame Aufgabe: keine Bestellung zu "verpassen". Das heißt, um es so zu gestalten, dass es möglich ist, die Bestellung an mehreren Orten zu speichern, und wenn mindestens eine davon verfügbar ist, speichern Sie die Bestellung.





1: .





2: , , .





3: ( ).





:( .





, . , .





.





1.2

, " ". , , , , , . , , , .





, .





2.

, , - .





- .





0: - ().





1: (). " " , .





2: , , ().





3: , ().





4: , , ().





*` ` - . , .





.





Kafka - . Kafka - , - .





RabbitMQ - - , . - .





NATS Streaming - . NATS Streaming . NATS Streaming . , PostgreSQL NATS Streaming . , , , . , , NATS Streaming .





.





, .





3. ( )

3.1

Cluster - , .





Queue - . . , . ID .





Handler - . , , , .





ExternalCluster - . . .





3.2

. . . . , .





4 :













  • ,





  • , ,





. , - .





. , .





3.3

. ( ) (s3) ( ).





. . .





: () , .





. :





















" ". " + ID". . , ID . . ( 1000) .





FIFO

. ( , )





3.4

( )

:





  • N Capella Queue









  • , , ,





  • ( )





:





Capella Queue M (M < K)





:





  • + ID.





  • M





  • - , .





, . .





( )

:









  • ,









  • ,





  • ( )





:





Ereignisse werden in einer Warteschlange im lokalen Cluster gespeichert. Sie müssen eine global eindeutige Linkquelle + eine externe ID für die Nachricht definieren. Dank der Kopierhandler sind Nachrichten sowohl auf dem Gerät als auch im DC verfügbar





4. Sofortige Pläne

  1. Erstellen Sie ein Tutorial, das die Hauptfälle beschreibt.





  2. Sicherheit anschrauben.





  3. Verschärfen Sie die Verwendung von SSL-Zertifikaten durch den Dienst.





  4. Segmentierung hinzufügen - die Möglichkeit, Daten nach Segmenten zu lesen und zu übertragen.





  5. Aktualisieren von Parametern für Warteschlangen, Cluster und Handler.





  6. Funktion zum Steuern, dass die Nachricht auf andere Cluster repliziert wird.





  7. Metriken.





Der Code

Auf Github








All Articles