La arquitectura de aplicación monolítica convencional para aplicaciones de servidor ha experimentado recientemente un cambio de paradigma en la industria del software, y actualmente la arquitectura de microservicios está ocupando su lugar. La idea de una colección de módulos livianos y poco conectados, cada uno de los cuales representa una sola funcionalidad y se ejecuta en sus procesos, ha sido bastante popular, y por una buena razón. La escalabilidad, la confiabilidad y la alta disponibilidad son posibles gracias a la arquitectura de microservicios, ya que cada servicio por separado se crea, administra y prueba de forma independiente sin ninguna dependencia.
Dado que los microservicios están poco acoplados, tiene sentido que un intermediario de mensajes se ajuste a esta infraestructura para permitir la comunicación asincrónica de microservicios, mientras se mantiene el desacoplamiento. La comunicación asíncrona significa que ninguno de los servicios tiene que esperar al otro. Para ello, el modelo de publicación-suscripción ha sido ampliamente adoptado como medio de comunicación entre microservicios.
NCache es un almacén de datos distribuidos en memoria para .NET y proporciona publicación/suscripción en memoria rica en funciones para la comunicación basada en eventos. Por eso, NCache se puede configurar fácilmente como un agente de mensajería para comunicaciones asincrónicas entre microservicios mediante el modelo Pub/Sub.
NCache Detalles Mensajes y eventos Pub/Sub Pub / Sub NCache Docs
Usar NCache Pub/Sub en memoria para microservicios
Pub/Sub está habilitado en NCache definiendo un tema sobre el cual los microservicios (construidos en .NET/.NET Core) puede publicar eventos y suscribirse a ellos. Los eventos se publican fuera del microservicio, al NCache agente de mensajes. Cada microservicio de suscriptor contiene un controlador de eventos para manejar el evento apropiado una vez que el microservicio del publicador lo haya publicado. En la Figura 1 se destaca un diagrama lógico y simple de esta arquitectura:
Para .NET/.NET Core microservicios, NCache actúa como un bus de eventos o intermediario de mensajes a través del cual los mensajes se transmiten a uno o más suscriptores. Para más detalles sobre el NCache modelo Pub/Sub, consulte el NCache documentación o nuestro blog en Usar NCache como Pub/Sub en memoria.
Esta entrada de blog utiliza el eShopEnContenedores aplicación de muestra ampliada con NCache y subido en GitHub. El proyecto inyecta NCache como un bus de eventos para la coordinación de aplicaciones entre los microservicios .NET. NCacheEl rol de en esta aplicación se muestra en la Figura 2.
NCache Detalles Mensajes y eventos Pub/Sub Pub / Sub NCache Docs
Ejemplo rápido de uso NCache Pub/Sub en memoria
Usando el eShopEnContenedores aplicación, NCache actúa como intermediario de mensajes en múltiples escenarios. Un escenario destacado aquí es el evento de pago del usuario donde se muestran los detalles de la cesta. publicado En el correo electrónico “Su Cuenta de Usuario en su Nuevo Sistema XNUMXCX”. NCache bus de eventos, y la solicitud de pedido puede tener suscrito a cualquier cesta entrante en el pago del usuario para procesar el pedido.
- Publicar: Este fragmento de código simplificado muestra una parte de la lógica de pago de la cesta en el microservicio Basket.API, donde el ID de usuario y todos los detalles de la cesta, como la dirección, el número de tarjeta y más, se agregan como una carga de mensaje y se publican en el bus de eventos. El código Basket.API se puede encontrar en BasketController.cs clase en 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); } |
- Suscribir: El siguiente fragmento de código es del microservicio Ordering.API, cuyo código es subido en GitHub. Esto contiene una suscripción al evento UserCheckout en el que una vez que un usuario retira la cesta, se publica un evento como un mensaje y se llama al controlador del suscriptor para procesar el pedido.
1 2 3 4 |
var eventBus = app.ApplicationServices.GetRequiredService<IEventBus>(); eventBus.Subscribe<UserCheckoutAcceptedEvent, IIntegrationEventHandler<UserCheckoutAcceptedEvent>>(); |
NCache Detalles Mensajes y eventos Pub/Sub Pub / Sub NCache Docs
Durabilidad de los mensajes Pub/Sub con suscripciones duraderas
Dado que los microservicios están poco acoplados, significa que los microservicios pueden unirse o abandonar la aplicación en cualquier momento. Además, ¿qué sucede si experimenta alguna falla en la red durante el paso de mensajes de alto tráfico? Esto significa que la conexión del microservicio con el bus de eventos debe ser lo suficientemente resistente para que los mensajes no se pierdan incluso si la red se ha caído temporalmente.
NCache ofrece dos tipos de suscripciones duraderas para acomodar la durabilidad de su mensaje entre sus .NET/.NET Core microservicios:
- Suscripciones duraderas compartidas: Múltiples suscriptores pueden suscribirse a una suscripción. El método Round Robin se utiliza para enviar mensajes a múltiples suscriptores. Incluso si algún suscriptor abandona la red, los mensajes entre suscriptores activos continúan distribuyéndose.
- Suscripciones duraderas exclusivas: Una suscripción solo tiene un suscriptor activo a la vez. No se acepta ninguna solicitud de nuevo suscriptor en la misma suscripción hasta que la conexión esté activa.
NCache Detalles Mensajes y eventos Pub/Sub Pub / Sub NCache Docs
Confiabilidad de la comunicación con reintentos de conexión
Dado que los microservicios dependen de la red para la comunicación, puede haber fallas de red no deseadas que requerirían tener un mecanismo de establecimiento de conexión. De este modo, NCache mantiene una plataforma de comunicación confiable con reintentos de conexión y mantener viva características para asegurarse de que su .NET/.NET Core los servicios intentan conectarse automáticamente al caché en caso de falla de la red. Esto elimina la necesidad de políticas de reintento por parte de cualquier biblioteca de terceros, como Polly.
NCache Detalles Reintentos de conexión Confiabilidad de la comunicación NCache Docs
¿Por qué NCache?
A medida que las organizaciones ahora están adoptando la arquitectura de microservicios sobre aplicaciones monolíticas, NCache se convierte en su almacén de datos distribuidos en memoria para ser utilizado como un medio intermediario para su .NET/.NET Core aplicaciones de microservicios.
- Extremadamente rápido y linealmente escalable: Estando en la memoria, NCache proporciona una comunicación más rápida que otras soluciones Pub/Sub. Además, al estar distribuido permite NCache para permitirle escalar sobre la marcha a medida que agrega más servidores al clúster de Message Broker para manejar mayores cargas.
- Alta disponibilidad: NCache proporciona una arquitectura agrupada entre pares dinámica y autorreparable que garantiza que no haya ningún punto único de falla. Además, NCache replica de forma inteligente los mensajes y también proporciona suscripciones duraderas para que no se pierdan mensajes en caso de que un servidor de caché se caiga, lo que garantiza una alta disponibilidad de sus microservicios para la comunicación. NCache también brinda alta disponibilidad cuando necesita aumentar la cantidad de servidores en el clúster al permitirle agregar estos servidores en tiempo de ejecución sin detener el clúster.
- Nativo .NET Core: Para microservicios integrados en .NET/.NET Core, NCache proporciona un 100% .NET / .NET Core pila nativa para integrarse en su pila de aplicaciones sin problemas.
En resumen, si bien los microservicios simplifican su aplicación en unidades lógicas, también se vuelve difícil administrar la comunicación entre ellos. Por lo tanto, NCache elimina la complejidad adicional de introducir un agente de mensajería de alta disponibilidad que también respeta el desacoplamiento al mismo tiempo.
Tenemos otro blog en Escalamiento del rendimiento de los microservicios con almacenamiento en caché distribuido. ¡Ve a ver eso!