L'architecture d'application monolithique conventionnelle pour les applications de serveur a récemment subi un changement de paradigme dans l'industrie du logiciel, et l'architecture de microservice prend actuellement sa place. L'idée d'une collection de modules légers et vaguement connectés qui représentent chacun une fonctionnalité unique et s'exécutent dans leurs processus a été assez populaire, et pour une bonne raison. L'évolutivité, la fiabilité et la haute disponibilité sont rendues possibles par l'architecture de microservice puisque chaque service distinct est créé, géré et testé indépendamment sans aucune dépendance.
Étant donné que les microservices sont faiblement couplés, il est logique qu'un courtier de messages s'intègre dans cette infrastructure pour permettre une communication de microservice asynchrone, tout en maintenant le découplage. La communication asynchrone signifie que l'un ou l'autre des services n'a pas à attendre l'autre. Pour cela, le modèle de publication-abonnement a été largement adopté comme moyen de communication entre les microservices.
NCache est un magasin de données distribué en mémoire pour .NET et fournit un pub/sub en mémoire riche en fonctionnalités pour la communication pilotée par les événements. Ainsi, NCache peut facilement être configuré en tant que courtier de messagerie pour les communications asynchrones entre les microservices à l'aide du modèle Pub/Sub.
NCache Détails Messagerie Pub/Sub et événements Pub / Sous-marin NCache Docs
En utilisant NCache Pub/Sub en mémoire pour les microservices
Pub/Sub est activé dans NCache en définissant un sujet sur lequel les microservices (construits en .NET/.NET Core) peut publier des événements et s'y abonner. Les événements sont publiés en dehors du microservice, au NCache courtier de messages. Chaque microservice d'abonné contient un gestionnaire d'événements pour gérer l'événement approprié une fois que le microservice de l'éditeur l'a publié. Un schéma simple et logique de cette architecture est mis en évidence dans la figure 1 :
Pour .NET/.NET Core microservices, NCache agit comme un bus d'événements ou un courtier de messages par lequel les messages sont relayés vers un ou plusieurs abonnés. Pour plus de détails sur le NCache Modèle Pub/Sub, reportez-vous au NCache Documentation ou notre blog sur En utilisant NCache en tant que Pub/Sub en mémoire.
Ce billet de blog utilise le eShopOnContainers exemple d'application étendue avec NCache ainsi que téléchargé sur GitHub. Le projet injecte NCache en tant que bus d'événements pour la coordination des applications entre les microservices .NET. NCacheLe rôle de dans cette application est illustré à la figure 2.
NCache Détails Messagerie Pub/Sub et événements Pub / Sous-marin NCache Docs
Exemple rapide d'utilisation NCache Pub/Sub en mémoire
Le eShopOnContainers l'application, NCache agit comme un courtier de messages dans plusieurs scénarios. Un scénario mis en évidence ici est l'événement de paiement de l'utilisateur où les détails du panier sont publié à la NCache bus d'événements, et l'application de commande peut avoir souscrit à tous les paniers entrants lors du paiement de l'utilisateur pour traiter la commande.
- Publier: Cet extrait de code simplifié montre une partie de la logique de paiement du panier dans le microservice Basket.API où l'ID utilisateur et tous les détails du panier tels que l'adresse, le numéro de carte, etc. sont ajoutés en tant que charge utile de message et publiés sur le bus d'événements. Le code Basket.API se trouve dans BasketController.cs classe sur 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); } |
- S'abonner: L'extrait de code suivant provient du microservice Ordering.API, dont le code est téléchargé sur GitHub. Celui-ci contient un abonnement à l'événement UserCheckout où une fois qu'un utilisateur vérifie le panier, un événement est publié sous forme de message et le gestionnaire de l'abonné est appelé pour poursuivre le traitement de la commande.
1 2 3 4 |
var eventBus = app.ApplicationServices.GetRequiredService<IEventBus>(); eventBus.Subscribe<UserCheckoutAcceptedEvent, IIntegrationEventHandler<UserCheckoutAcceptedEvent>>(); |
NCache Détails Messagerie Pub/Sub et événements Pub / Sous-marin NCache Docs
Durabilité des messages Pub/Sub avec des abonnements durables
Étant donné que les microservices sont faiblement couplés, cela signifie que les microservices peuvent rejoindre ou quitter l'application à tout moment. De plus, que se passe-t-il si vous rencontrez un problème de réseau lors de la transmission de messages à fort trafic ? Cela signifie que la connexion du microservice avec le bus d'événements doit être suffisamment résiliente pour que les messages ne soient pas perdus même si le réseau est temporairement en panne.
NCache offre deux types d'abonnements durables pour s'adapter à la durabilité de votre message parmi votre .NET/.NET Core microservices :
- Abonnements durables partagés : Plusieurs abonnés peuvent souscrire à un seul abonnement. La méthode Round Robin est utilisée pour envoyer des messages à plusieurs abonnés. Même si un abonné quitte le réseau, les messages entre abonnés actifs continuent d'être distribués.
- Abonnements durables exclusifs : Un abonnement n'a qu'un seul abonné actif à la fois. Aucune nouvelle demande d'abonné n'est acceptée sur le même abonnement tant que la connexion n'est pas active.
NCache Détails Messagerie Pub/Sub et événements Pub / Sous-marin NCache Docs
Fiabilité des communications avec tentatives de connexion
Comme les microservices s'appuient sur le réseau pour la communication, il peut y avoir des pannes de réseau indésirables qui nécessiteraient un mécanisme d'établissement de connexion. Ainsi, NCache maintient une plate-forme de communication fiable avec tentatives de connexion ainsi que rester en vie fonctionnalités pour vous assurer que votre .NET/.NET Core les services tentent automatiquement de se connecter au cache en cas de panne du réseau. Cela élimine le besoin de stratégies de nouvelle tentative par toute bibliothèque tierce telle que Polly.
NCache Détails Nouvelles tentatives de connexion Fiabilité des communications NCache Docs
Constat NCache?
Alors que les organisations adoptent désormais l'architecture de microservices plutôt que des applications monolithiques, NCache devient votre magasin de données distribué en mémoire incontournable à utiliser comme support intermédiaire pour votre .NET/.NET Core applications de microservices.
- Extrêmement rapide et linéairement évolutif : Être en mémoire, NCache offre une communication plus rapide que les autres solutions Pub/Sub. De plus, être distribué permet NCache pour vous permettre d'évoluer à mesure que vous ajoutez plus de serveurs au cluster Message Broker pour gérer des charges plus importantes.
- La haute disponibilité: NCache fournit une architecture clusterisée peer-to-peer dynamique et auto-réparatrice qui garantit l'absence de point de défaillance unique. En outre, NCache réplique intelligemment les messages et fournit également des abonnements durables afin qu'il n'y ait aucune perte de message en cas de panne d'un serveur de cache, garantissant une haute disponibilité à vos microservices pour la communication. NCache fournit également une haute disponibilité lorsque vous devez augmenter le nombre de serveurs dans le cluster en vous permettant d'ajouter ces serveurs au moment de l'exécution sans arrêter le cluster.
- Originaire .NET Core: Pour les microservices construits en .NET/.NET Core, NCache fournit un 100% .NET / .NET Core pile native pour s'intégrer de manière transparente dans votre pile d'applications.
Pour résumer, si les microservices simplifient votre application en unités logiques, il devient également difficile de gérer la communication entre elles. Ainsi, NCache supprime la complexité supplémentaire liée à l'introduction d'un courtier de messagerie hautement disponible qui respecte également le découplage en même temps.
Nous avons un autre blog sur Mise à l'échelle des performances des microservices avec la mise en cache distribuée. Allez vérifier ça !