En un entorno donde varias aplicaciones de servidor con un alto nivel de transacciones necesitan comunicarse entre sí, es importante encontrar el mejor canal de comunicación para ellas. Un modelo de editor/suscripción (PubSub) es una de las formas más populares cuando se trata de proporcionar una plataforma de comunicación para sus aplicaciones. Todos sabemos lo que estos medios tienen en común; varios clientes publican mensajes y varios clientes pueden suscribirse a ellos. Todo esto sucede de una manera extremadamente desacoplada, lo que significa que el editor no distribuye los mensajes directamente a los clientes suscriptores. En su lugar, se utiliza un bus de mensajes como canal intermediario a través del cual se comunican todos los clientes.
En resumen, la mensajería PubSub es un método en el que ni el editor ni el suscriptor saben nada sobre la identidad del otro.
Tomémonos un momento para pensar en lo que sucede cuando aumenta el número de editores y suscriptores. Cuanto mayor sea este número, mayor será la carga de mensajes. Esta situación lleva a que su plataforma PubSub provoque cuellos de botella en la escalabilidad, lo que anula el objetivo principal de introducir una interfaz de mensajería desacoplada.
Veamos una solución que no solo hereda el funcionamiento general de pub/sub, sino que también le agrega un montón de otras funcionalidades para su comodidad; un método que es rápido y extremadamente escalable.
NCache Detalles NCache Pub/subdocs Scale Pub/Sub Messaging-Seminario web
Usar NCache PubSub en memoria
NCache le proporciona cachés distribuidos rápidos, flexibles y con la mayor escalabilidad lineal para su aplicación .NET.
Usar NCache ya que su plataforma PubSub basada en eventos puede resultar extremadamente beneficiosa si planea escalar su aplicación sobre la marcha. Evita que se produzcan cuellos de botella en su sistema.
Así es cómo NCache actúa como un bus de mensajería para su aplicación:
NCache actúa como una interfaz intermediaria para su implementación de Pub/Sub. La figura ilustra que no solo uno sino varios clientes pueden suscribirse a uno o varios temas a la vez.
Cualquier número de aplicaciones puede conectarse al caché y comenzar a publicar mensajes en el NCache servidores. Estos mensajes luego son suscritos por varios clientes de acuerdo con sus requisitos. A través de NCache, puedes decidir si todos o solo un suscriptor recibe los mensajes publicados. Al hacerlo, NCache actúa como un bus de mensajería para sus aplicaciones de servidor .NET.
NCache Detalles Pub / Sub NCache Eventos de publicación/suscripción
Ejemplo rápido de PubSub con NCache
Supongamos que tengo una aplicación de juegos en línea que utilizan jugadores de todo el mundo. En mi aplicación, tengo una función que incorpora no solo comunicaciones de audio sino también mensajes de tiempo de ejecución. Varios jugadores envían mensajes contra un canal y para los jugadores de su propio equipo al mismo tiempo.
Teniendo en cuenta la cantidad de jugadores que juegan, la carga de mensajes será enorme. Lo que necesito aquí es una interfaz de comunicación que aumente el rendimiento de mi juego. Y por eso prefiero NCache como bus de mensajes de mi juego.
El siguiente es el fragmento que utilizo para implementar un escenario en el que las aplicaciones del servidor pueden publicar y recibir mensajes. Este código muestra cómo obtener un tema y publicar un mensaje en él.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// Precondition: Cache is already connected // Get the topic ITopic teamChat = cache.MessagingService.GetTopic("RuntimePlayerComms"); // Create the object to be sent in message // Get information of the player through player ID Player teamLeader = FetchInfo(1); // Create the message var newChatMessage = new Message(teamLeader); // Set the expiration time of the message newChatMessage.ExpirationTime = TimeSpan.FromSeconds(60); // Publish the message with delivery option set to All subscribers teamChat.Publish(newChatMessage, DeliveryOption.All, true); |
Una vez que se ha publicado un mensaje sobre un tema, los suscriptores crean suscripciones sobre ese tema para recibir mensajes. El siguiente código demuestra cómo las aplicaciones de suscripción se suscriben a un tema determinado para recibir los mensajes deseados.
1 2 3 4 5 6 7 8 9 |
// Precondition: Cache is already connected // Get the topic ITopic teamChat = cache.MessagingService.GetTopic("RuntimePlayerComms"); // Create and register subscribers for the topic // MessageReceived is the callback through which the message is delivered ITopicSubscription subscriber = teamChat.CreateSubscription(MessageReceived); |
NCache Detalles Publicar mensajes Suscríbete Mensajes
Hasta ahora, todo lo que hablé fue el funcionamiento general de pub/sub, pero lo que realmente necesita saber es la longitud adicional que NCache va a satisfacer sus necesidades.
¿Te estás preguntando cuáles son esas “otras funcionalidades” que exclamaba anteriormente? Vayamos directamente a las características que ofrece exclusivamente NCache.
Suscripciones duraderas exclusivas
Normalmente, cuando un cliente se suscribe a un tema, esa suscripción se conoce como suscripción no duradera, lo que significa que si el cliente se desconecta del servidor, todas sus suscripciones se pierden.
NCache le proporciona suscripciones duraderas. En este caso, incluso si se interrumpe la conexión entre el servidor y el cliente, todas las suscripciones de ese cliente permanecen intactas. Entonces, cuando el cliente se vuelve a conectar, recibe todos los mensajes que se publicaron mientras el suscriptor estaba desconectado.
La forma en que ejecuta este escenario en su aplicación es simple. Agregue la siguiente línea de código en su aplicación para implementar una suscripción duradera exclusiva.
1 2 3 4 5 6 7 8 |
// Create and register subscribers for the topic // MessageReceived callback is specified // The subscription policy is Exclusive IDurableTopicSubscription subscriber = teamChat.CreateDurableSubscription("RuntimePlayerComms", SubscriptionPolicy.Exclusive, MessageReceived, TimeSpan.FromMinutes(20)); |
Mientras la conexión esté activa, ningún cliente nuevo puede suscribirse a esa suscripción. Si esta conexión se rompe, los mensajes se guardan y cuando se restablece la conexión, se envían al cliente. Esto se hace para que no se pierda ningún mensaje.
NCache Detalles Pub / Sub NCache Suscripciones duraderas
Suscripciones duraderas compartidas
Además de las suscripciones exclusivas, la durabilidad también se puede lograr a través de suscripciones compartidas. En este tipo de suscripción, más de un cliente puede suscribirse a una sola suscripción. Esto sirve para el propósito de compartir la carga.
Las suscripciones compartidas utilizan el método Round Robin para enviar mensajes a todos los clientes conectados. Entonces, incluso si un cliente se desconecta, los mensajes continúan distribuyéndose entre los suscriptores restantes.
Una suscripción permanece activa mientras haya un solo cliente conectado a ella. El siguiente código es cómo mi aplicación de juegos en línea implementa suscripciones duraderas compartidas.
1 2 3 4 5 6 7 8 9 |
// Create and register subscribers for the topic // MessageReceived callback is specified // The subscription policy is Shared IDurableTopicSubscription subscriber = teamChat.CreateDurableSubscription("RuntimePlayerComms", SubscriptionPolicy.Shared, MessageReceived, TimeSpan.FromMinutes(20)); |
Por defecto, estas suscripciones son exclusivas y permiten exactamente un suscriptor por suscripción.
Suscripciones basadas en patrones
A veces, en lugar de suscribirse a las suscripciones con nombre una por una, se proporciona un patrón bajo el cual todos los temas, presentes y futuros, se suscriben de una sola vez. Para acomodar esto, NCache facilita a sus clientes proporcionando suscripciones basadas en patrones. A través de este método, se pueden suscribir fácilmente uno o varios temas que se incluyen en el patrón proporcionado.
Para conocer los tipos de comodines admitidos por NCachepara las suscripciones a PubSub, consulte NCache documentación sobre Suscripciones basadas en patrones.
El siguiente es un fragmento de ejemplo de cómo uso comodines basados en patrones en mi aplicación de juegos.
1 2 3 4 5 6 |
// Only ? * [] wildcards supported string topicName = "team*"; string subscriptionName = "TeamPlayersComms"; // Get the topic ITopic teamChat = cache.MessagingService.GetTopic(topicName, TopicSearchOptions.ByPattern); |
¿Por qué NCache para PubSub?
por que favor NCache, podrías preguntar? Bien… NCache is
- rápido porque es una solución en memoria.
- linealmente escalable porque puede agregar servidores adicionales en tiempo de ejecución; cualquier momento.
- flexible, ya que reequilibra automáticamente los datos de forma dinámica sin la intervención del cliente.
La manera en que lo veo, NCache proporciona la forma mejor, más escalable y más rápida de acomodar la comunicación de mensajes dentro de su aplicación. El hecho de que NCache es una solución de almacenamiento en caché distribuida en memoria que es suficiente para contrarrestar cualquier cuello de botella que pueda surgir debido a la carga de mensajes. Ahora, esta es la situación en la que todos ganan que necesita en su aplicación .NET.