Die herkömmliche monolithische Anwendungsarchitektur für Server-Apps hat in der Softwareindustrie kürzlich einen Paradigmenwechsel erfahren, an dessen Stelle derzeit die Microservice-Architektur getreten ist. Die Idee einer Sammlung leichtgewichtiger, lose verbundener Module, die jeweils eine einzelne Funktionalität darstellen und in ihren Prozessen ausgeführt werden, ist sehr beliebt, und das aus gutem Grund. Skalierbarkeit, Zuverlässigkeit und Hochverfügbarkeit werden durch die Microservice-Architektur ermöglicht, da jeder einzelne Service ohne Abhängigkeiten unabhängig erstellt, verwaltet und getestet wird.
Da Microservices lose gekoppelt sind, ist es sinnvoll, dass ein Message Broker in diese Infrastruktur passt, um eine asynchrone Microservice-Kommunikation zu ermöglichen und gleichzeitig die Entkopplung aufrechtzuerhalten. Asynchrone Kommunikation bedeutet, dass keiner der Dienste auf den anderen warten muss. Aus diesem Grund wurde das Publish-Subscribe-Modell als Medium für die Kommunikation zwischen Microservices weit verbreitet.
NCache ist ein verteilter In-Memory-Datenspeicher für .NET und bietet funktionsreiches In-Memory-Pub/Sub für ereignisgesteuerte Kommunikation. Somit, NCache kann mithilfe des Pub/Sub-Modells einfach als Messaging-Broker für die asynchrone Kommunikation zwischen Microservices konfiguriert werden.
NCache Details Pub/Sub-Nachrichten und -Ereignisse Pub / Sub NCache Docs
Die richtigen NCache In-Memory-Pub/Sub für Microservices
Pub/Sub ist aktiviert NCache indem Sie ein Thema definieren, zu dem die Microservices (eingebaut in .NET/.NET Core) kann sowohl Veranstaltungen veröffentlichen als auch abonnieren. Die Ereignisse werden außerhalb des Microservices in der veröffentlicht NCache Nachrichtenbroker. Jeder Abonnenten-Microservice enthält einen Event-Handler, um das entsprechende Ereignis zu verarbeiten, sobald der Publisher-Microservice es veröffentlicht hat. Ein einfaches, logisches Diagramm dieser Architektur ist in Abbildung 1 hervorgehoben:
Für .NET/.NET Core Mikrodienste, NCache fungiert als Ereignisbus oder Nachrichtenbroker, über den die Nachrichten an einen oder mehrere Abonnenten weitergeleitet werden. Näheres zu den NCache Pub/Sub-Modell finden Sie unter NCache Dokumentation oder unseren Blog auf Die richtigen NCache als In-Memory-Pub/Sub.
Dieser Blogbeitrag verwendet die eShopOnContainer Beispielanwendung erweitert mit NCache und auf GitHub hochgeladen. Das Projekt spritzt NCache als Event-Bus für die App-Koordination zwischen den .NET-Microservices. NCacheDie Rolle von in dieser Anwendung ist in Abbildung 2 dargestellt.
NCache Details Pub/Sub-Nachrichten und -Ereignisse Pub / Sub NCache Docs
Schnelles Beispiel für die Verwendung NCache In-Memory-Pub/Sub
Verwendung der eShopOnContainer Anwendung, NCache fungiert in mehreren Szenarien als Nachrichtenbroker. Ein hier hervorgehobenes Szenario ist das Checkout-Ereignis des Benutzers, bei dem sich die Warenkorbdetails befinden veröffentlicht zu den NCache Event-Bus, und die Bestellanwendung kann haben gezeichnet zu allen eingehenden Warenkörben an der Benutzerkasse, um die Bestellung zu bearbeiten.
- Veröffentlichen: Dieses vereinfachte Code-Snippet zeigt einen Teil der Warenkorb-Checkout-Logik im Basket.API-Microservice, wo die Benutzer-ID und alle Warenkorbdetails wie Adresse, Kartennummer und mehr als Nachrichtennutzlast hinzugefügt und im Ereignisbus veröffentlicht werden. Den Basket.API-Code finden Sie in BasketController.cs Klasse auf GitHub.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
[Route("checkout")] [HttpPost] public async Task<ActionResult> CheckoutAsync([FromBody]BasketCheckout basketCheckout, [FromHeader(Name = "x-requestid")] string requestId) { var userId = GetUserIdentity(); basketCheckout.RequestId = GetRequestID(); var basket = await GetBasketAsync(userId); var userName = User.FindFirst(x => x.Type == "unique_name").Value; var eventMessage = new UserCheckoutAcceptedIntegrationEvent(userId, userName, basketCheckout.Address, basketCheckout.CardNumber, basketCheckout.RequestId, basket); // This message is published to the NCache Pub/Sub store eventBus.Publish(eventMessage); } |
- Abonnieren: Das folgende Code-Snippet stammt vom Microservice Ordering.API, dessen Code ist auf GitHub hochgeladen. Dies enthält ein Abonnement für das UserCheckout-Ereignis, bei dem, sobald ein Benutzer den Warenkorb auscheckt, ein Ereignis als Nachricht veröffentlicht und der Handler des Abonnenten aufgerufen wird, um die Bestellung weiter zu verarbeiten.
1 2 3 4 |
var eventBus = app.ApplicationServices.GetRequiredService<IEventBus>(); eventBus.Subscribe<UserCheckoutAcceptedEvent, IIntegrationEventHandler<UserCheckoutAcceptedEvent>>(); |
NCache Details Pub/Sub-Nachrichten und -Ereignisse Pub / Sub NCache Docs
Haltbarkeit von Pub/Sub-Nachrichten mit dauerhaften Abonnements
Da Microservices lose gekoppelt sind, bedeutet dies, dass Microservices der Anwendung jederzeit beitreten oder sie verlassen können. Was ist außerdem, wenn Sie während der Übermittlung von Nachrichten mit hohem Datenverkehr einen Netzwerkfehler feststellen? Das bedeutet, dass die Microservice-Verbindung mit dem Event-Bus robust genug sein muss, damit Nachrichten auch dann nicht verloren gehen, wenn das Netzwerk vorübergehend ausfällt.
NCache bietet zwei Arten von dauerhaften Abonnements an, um die Dauerhaftigkeit Ihrer Nachrichten in Ihren .NET/.NET Core Mikrodienste:
- Geteilte dauerhafte Abonnements: Mehrere Abonnenten können ein Abonnement abonnieren. Das Round-Robin-Verfahren wird verwendet, um Nachrichten an mehrere Abonnenten zu senden. Selbst wenn ein Teilnehmer das Netzwerk verlässt, werden die Nachrichten zwischen aktiven Teilnehmern weiterhin verteilt.
- Exklusive dauerhafte Abonnements: Ein Abonnement hat jeweils nur einen aktiven Abonnenten. Für dasselbe Abonnement wird keine neue Abonnentenanfrage angenommen, bis die Verbindung aktiv ist.
NCache Details Pub/Sub-Nachrichten und -Ereignisse Pub / Sub NCache Docs
Kommunikationszuverlässigkeit mit Verbindungswiederholungen
Da Microservices für die Kommunikation auf das Netzwerk angewiesen sind, kann es zu unaufgeforderten Netzwerkausfällen kommen, die einen Verbindungsherstellungsmechanismus erfordern würden. Daher, NCache unterhält eine zuverlässige Kommunikationsplattform mit Verbindungsversuche und bleib am Leben Funktionen, um sicherzustellen, dass Ihr .NET/.NET Core Bei einem Netzwerkausfall versuchen die Dienste automatisch, eine Verbindung zum Cache herzustellen. Dadurch entfällt die Notwendigkeit von Wiederholungsrichtlinien durch Bibliotheken von Drittanbietern wie Polly.
NCache Details Verbindungsversuche Kommunikationszuverlässigkeit NCache Docs
Warum NCache?
Da Unternehmen jetzt die Microservice-Architektur gegenüber monolithischen Anwendungen übernehmen, NCache wird zu Ihrem bevorzugten verteilten In-Memory-Datenspeicher, der als Zwischenmedium für Ihr .NET/.NET Core Microservice-Anwendungen.
- Extrem schnell und linear skalierbar: Im Speicher sein, NCache bietet eine schnellere Kommunikation als andere Pub/Sub-Lösungen. Außerdem ermöglicht die Verteilung NCache damit Sie unterwegs skalieren können, wenn Sie weitere Server zum Message Broker-Cluster hinzufügen, um größere Lasten zu bewältigen.
- Hohe Verfügbarkeit: NCache bietet eine dynamische, selbstheilende Peer-to-Peer-Cluster-Architektur, die sicherstellt, dass es keinen Single Point of Failure gibt. Darüber hinaus, NCache repliziert die Nachrichten auf intelligente Weise und bietet auch dauerhafte Abonnements, sodass keine Nachrichten verloren gehen, falls ein Cache-Server ausfällt, was eine hohe Verfügbarkeit Ihrer Mikrodienste für die Kommunikation garantiert. NCache bietet auch Hochverfügbarkeit, wenn Sie die Anzahl der Server im Cluster erhöhen müssen, indem Sie diese Server zur Laufzeit hinzufügen können, ohne den Cluster zu stoppen.
- Ureinwohner .NET Core: Für Microservices, die in .NET/.NET Core, NCache bietet 100 % .NET / .NET Core nativen Stack zur nahtlosen Integration in Ihren Anwendungs-Stack.
Zusammenfassend lässt sich sagen, dass Microservices zwar Ihre Anwendung in logische Einheiten vereinfachen, es aber auch schwierig wird, die Kommunikation zwischen ihnen zu verwalten. Somit, NCache beseitigt die zusätzliche Komplexität der Einführung eines hochverfügbaren Messaging-Brokers, der gleichzeitig auch die Entkopplung berücksichtigt.
Wir haben einen weiteren Blog auf Skalierung der Leistung von Microservices mit verteiltem Caching. Schau dir das an!