Mensajería Pub/Sub en caché: descripción general
Este paradigma de mensajería de publicación/suscripción (Pub/Sub) proporciona un canal intermediario (denominado tema) para intercambiar mensajes entre múltiples aplicaciones sin acoplamiento directo entre el emisor (editor) y el receptor (suscriptor). Una aplicación de publicación envía mensajes a una aplicación de suscripción a través de temas. Dado que todos los modelos de publicación/suscripción requieren un canal de comunicación, NCache Actúa como un medio para los temas, de modo que el editor publica el mensaje en el tema. Los suscriptores reciben el mensaje a través del tema como una notificación. Al utilizar NCache Como bus de mensajes, las aplicaciones logran alta disponibilidad y escalabilidad sin acoplamiento directo, lo que permite a los editores transmitir eventos a miles de suscriptores en tiempo real. Además de una caché distribuida, NCache también proporciona un dedicado Caché de mensajería Pub/Sub.
Importante
Recomendamos una caché de Pub/Sub dedicada por los siguientes motivos:
Desalojos: si el caché contiene mensajes y elementos de caché, la expulsión frecuente de elementos de caché también puede eliminar los mensajes antes de reenviarlos al suscriptor.
Transferencia de estado: La transferencia de estado agrega un costo a cada operación de elemento de caché. Dado que los mensajes se publican, retransmiten y caducan con frecuencia, esta actividad recurrente puede resultar costosa porque desencadena la transferencia de estado.
¿Por qué utilizar la mensajería Pub/Sub en arquitecturas distribuidas?
Los eventos en tiempo real requieren el intercambio de notificaciones entre diferentes aplicaciones en arquitecturas distribuidas basadas en eventos. Los patrones de Pub/Sub permiten a los editores compartir eventos con los suscriptores para que cualquier procesamiento deseado tenga lugar cuando ocurra un evento de interés.
Por ejemplo, un grupo de suscriptores puede estar interesado en información sobre los detalles del envío de un pedido para procesarla y hacer el seguimiento de la entrega. Por lo tanto, se suscribirán a un tema que retransmite mensajes con los detalles del pedido. Una vez que el editor publique un mensaje en el tema, los suscriptores recibirán una notificación y recibirán el mensaje con los detalles del pedido para su posterior procesamiento.
Componentes básicos de NCache Modelo Pub/Sub
Los componentes básicos de la NCache El modelo de suscriptor editor (Pub/Sub) se enumera a continuación y se analiza en detalle más adelante:
Tema: Un lugar donde se publican mensajes.
Autor: Una aplicación (aplicación web, aplicación de escritorio, microservicios) que publica mensajes en Tema/Temas.
Abonado: Una aplicación interesada en recibir mensajes de Tema/Temas.
Suscripción: Una entidad de interés creada para que un suscriptor reciba mensajes previstos.
Mensaje: El objeto de datos real que el editor envía y los suscriptores reciben a través del tema.
Temas en NCache
El editor publica mensajes sobre el tema. Los suscriptores se suscriben al tema para recibir el mensaje. Este tema existe en forma distribuida en NCachePor lo tanto, su creación se produce en todos los nodos del clúster. Contiene el almacén de mensajes, que almacena los objetos de datos que el publicador publica en una cola. También mantiene internamente una lista de todos los suscriptores y una lista de publicadores. ITopic/Topic interfaz facilita Creación de temas, Tema en desarrollo, y Eliminación de tema. También puedes eliminar un tema de forma asincrónica para evitar la espera a que se elimine un tema.
Nota:
La naturaleza distribuida de los temas y los mensajes subyacentes mejora la escalabilidad.
Una vez que se publica un mensaje en el tema, se activa un evento, que el tema transmite a los suscriptores según la preferencia de opción de envío de mensajes para que puedan recibir el mensaje cuando lo necesiten. La siguiente figura ilustra el papel de un tema como canal intermediario para editores y suscriptores:
Nota:
En caso de desconexión temporal de un suscriptor y luego reconexión automática, toda la información relacionada con un tema, como suscripciones y notificaciones de eventos de falla, se vuelve a registrar en el tema sin ninguna interrupción en el extremo del suscriptor.
Prioridad del tema
NCache Introduce la prioridad a nivel de tema, que permite asignar niveles de prioridad relativos a los temas según su importancia. Puedes crear temas con mayor prioridad si necesitan publicar mensajes críticos. De esta manera, esos mensajes se entregan primero. De igual forma, puedes crear temas con menor prioridad si publican mensajes menos críticos. La caché expulsará estos mensajes primero. Simplemente puedes configurar... Prioridad a nivel de tema en el momento de la creación del tema para priorizar la entrega de mensajes críticos.
Importante
La prioridad de un tema se puede especificar únicamente en el momento de su creación y no se puede modificar posteriormente.
Notificación de eliminación de tema
Para recibir la notificación de eliminación de tema, su aplicación se registra en el Evento OnTopicDeletedTodos los mensajes y la metainformación relacionada de la caché se eliminan al eliminar un tema. Por lo tanto, el suscriptor y el editor reciben notificaciones de esta eliminación por las siguientes razones:
- Los suscriptores pueden estar esperando mensajes entrantes del tema registrado. Una vez que se elimina el tema, los suscriptores pueden gestionar su ejecución en consecuencia a través de la notificación de eventos y evitar un estado de espera infinito.
- El editor puede evitar enviar mensajes a un tema inexistente y gestionar cualquier mensaje pendiente y ejecución futura en consecuencia.
Publicar mensajes en un tema
Un editor puede Publicar mensajes en un tema especificando un nombre de tema. Los mensajes se pueden publicar de forma asincrónica y en masa para mejorar el rendimiento de la aplicación. Una caché particionada distribuye los mensajes en todo el clúster. Para el enrutamiento de mensajes, cada mensaje tiene un ID único denominado MessageID en el extremo del editor, y el código hash de MessageID determina el nodo del clúster para almacenar el mensaje. NCache permite a un editor usar las siguientes propiedades al publicar mensajes.
Nota:
NCache permite publicar una gran cantidad de mensajes en una sola llamada para mejorar el rendimiento y el uso de la memoria.
Opción de envío de mensajes: Un editor puede decidir si un mensaje se entregará a un solo suscriptor o se transmitirá a todos los suscriptores en el momento de la publicación mediante opción de envío de mensajes.
Caducidad del mensaje: El editor puede establecer la caducidad de un mensaje para controlar la vida útil de un mensaje en la caché. Hemos cubierto el vencimiento con más detalle en el Mensajes .
Notificación de falla en la entrega del mensaje: Un editor puede registrarse para MessageDeliveryFailure para recibir una notificación si un mensaje en particular no se pudo entregar. Estos escenarios de fallas en la entrega se elaboran con más detalle en el Asignación de mensajes y entrega a suscripción .
Importante
La notificación de falla en la entrega de mensajes es solo para los mensajes con vencimiento.
- Notificación de eliminación de tema: Un editor puede registrarse para Notificación de eliminación de tema para evitar la publicación indebida de mensajes correspondientes una vez eliminado el Tema.
Suscríbete a un tema
Una aplicación de suscriptor puede Suscríbete a los mensajes del tema Registrándose en un tema de interés mediante una suscripción. En Pub/Sub, una suscripción representa el interés del suscriptor en un tema específico.
Nota:
En caso de que se agregue un nuevo nodo al clúster de caché y se active la transferencia de estado, todas las suscripciones junto con los mensajes y los datos de caché se replican en el nuevo nodo.
NCache Permite suscribirse a un tema proporcionando un nombre de tema o un patrón. Para obtener más detalles, consulte Métodos de suscripción. Además, también puede establecer modo de entrega de mensajes como síncrono o asíncrono al crear una suscripción. NCache proporciona varios tipos de suscripciones de Pub/Sub que se analizan a continuación.
Suscripción y sus tipos
Suscripciones en NCache se puede clasificar en los siguientes tipos:
Durable
Nota:
Una suscripción duradera es una suscripción con nombre.
En un Suscripción duraderaLa caché garantiza que el suscriptor no pierda ningún mensaje en caso de desconexión debido al apagado o reinicio de la aplicación o a un fallo de la red. Por lo tanto, las suscripciones duraderas no se ven afectadas por la desconexión y reconexión del suscriptor.
Nota:
Las suscripciones duraderas no se eliminan a menos que el suscriptor cancele su suscripción correctamente.
Si un suscriptor se desconecta, los mensajes dirigidos a él se almacenan en un servidor hasta que se reincorpora o hasta que caducan. Las suscripciones duraderas no se eliminan automáticamente al desconectarse, a menos que este se haya dado de baja debidamente. Una suscripción duradera se clasifica en:
Compartido: Una suscripción compartida y duradera significa que varios suscriptores comparten una suscripción con nombre. Los mensajes asignados a una suscripción compartida se distribuyen entre los suscriptores de forma rotativa. Incluso si algún suscriptor abandona la red, los mensajes continúan enviándose a los suscriptores activos. Por lo tanto, si un suscriptor abandona la red de forma elegante o abrupta después de una asignación, sus mensajes asignados se reasignan a otros suscriptores activos.
Importante
Una suscripción compartida solo es compatible con una suscripción duradera.
En una suscripción compartida, la suscripción permanecerá en el tema y no se podrá cancelar hasta que todos los suscriptores se hayan dado de baja. Esto significa que mientras haya un solo suscriptor activo, la suscripción permanecerá activa.
- Exclusivo: Una suscripción duradera exclusiva significa que solo hay un suscriptor activo registrado en una suscripción a la vez. Si un suscriptor cancela su suscripción sin problemas, la suscripción exclusiva se puede asignar a un nuevo suscriptor. Si un suscriptor se da de baja de forma abrupta, la nueva solicitud de suscripción se acepta después de esperar un tiempo de inactividad. Los mensajes asignados siempre permanecen allí, incluso si no hay ningún suscriptor.
no duradero
En un Suscripción no duraderaLos suscriptores solo reciben mensajes dirigidos a ellos mientras la red permanezca conectada. Si el suscriptor abandona la red, no recibirá mensajes publicados durante su periodo de desconexión. Una suscripción temporal es exclusiva por defecto.
Importante
Los suscriptores perderán mensajes si la aplicación de suscriptores se reinicia.
Además, las suscripciones no duraderas se eliminan automáticamente cuando el suscriptor abandona la red. Esto significa que si ese suscriptor se reincorpora o establece la conexión nuevamente, se considerará una nueva suscripción.
Caducidad de la suscripción duradera
Puede Establecer fecha de vencimiento para una suscripción duradera Tras un período de inactividad, por ejemplo, cuando no hay ningún suscriptor activo durante un tiempo prolongado. Una vez que la suscripción expira, los mensajes asignados a esta se reasignan según la DeliveryOption de estos mensajes.
Nota:
Cada vez que el suscriptor realiza una encuesta o realiza cualquier otra actividad, se restablece el tiempo de vencimiento de la suscripción.
Manejo de suscripciones inactivas
Nota:
Solo las suscripciones no duraderas están marcadas como inactivas y esto no se aplica a las suscripciones duraderas.
En caso de que no haya un suscriptor activo contra una suscripción después de esperar un cierto período inactivo, la suscripción se considera caducada. Si un suscriptor se reincorpora después de la desconexión durante el período inactivo, podrá recibir sus mensajes asignados.
Importante
Las suscripciones inactivas deben gestionarse para evitar la sobrecarga de memoria en el lado del servidor.
Después de esperar el período de inactividad, la suscripción caduca y sus mensajes asignados se reasignarán a otras suscripciones. La reasignación de mensajes depende de la opción de entrega de mensajes.
Si el mensaje asignado a la suscripción A tenía la opción de entrega configurada en TODOS y ya está asignado a otra suscripción B antes de que expire la suscripción A, no será necesaria la reasignación.
Si el mensaje asignado a una suscripción tenía una opción de entrega configurada en CUALQUIER y la suscripción vence, los mensajes asignados siempre se reasignarán a cualquier otra suscripción.
Mensaje
Un mensaje contiene el objeto de datos que el editor envía y entrega a los suscriptores a través del tema. Una vez que el editor publica el mensaje en el tema, los suscriptores registrados reciben una notificación de que se ha publicado un mensaje de su interés. Si hay varios mensajes, se almacenan en secuencia dentro de la cola de un tema específico. Aquí, se analiza con más detalle la asignación de mensajes a la suscripción, la entrega de mensajes y el mecanismo de confirmación.
Nota:
El mismo mensaje se puede asignar a varios temas. Esto se identifica de forma única mediante un ID generado automáticamente.
Asignación de mensajes y entrega a suscripción
Inicialmente, los mensajes no están asignados en el lado del servidor. Todas las suscripciones reciben mensajes de acuerdo con la DeliveryOptionUna vez asignada la suscripción, el suscriptor recibe una notificación. A continuación, implementa un mecanismo de sondeo para obtener múltiples mensajes de forma masiva, lo que reduce la sobrecarga del servidor. Tras recibir los mensajes, el suscriptor envía la confirmación y estos se consideran entregados.
Nota:
Los mensajes se almacenan en el tema si no hay ningún suscriptor que los reciba. Los mensajes se asignan y se envían al primer suscriptor en cuanto se suscribe al tema.
Opción de entrega de mensajes
Un editor debe especificar la opción de entrega del mensaje para decidir si este se entregará a un único suscriptor o se difundirá a todos los suscriptores en el momento de la publicación. Es importante destacar que la definición de entrega exitosa depende de la opción de entrega especificada. A continuación, se describen las dos opciones de entrega y los criterios de entrega exitosa correspondientes:
Todas: Todos los suscriptores registrados reciben mensajes. Un mensaje se elimina cuando todos los suscriptores lo confirman.
año: Cualquier suscriptor registrado recibe los mensajes. Si el suscriptor asignado no envía confirmación, los mensajes se reasignan al siguiente suscriptor. Si envían un acuse de recibo, los mensajes se consideran entregados correctamente.
Nota:
Si un mensaje se entrega correctamente de acuerdo con la opción de entrega especificada, se elimina de la memoria caché.
Almacenamiento y distribución de mensajes
Los siguientes son los aspectos importantes del almacenamiento y distribución de mensajes en la caché:
Los mensajes se distribuyen entre nodos según topologías.
Para las topologías Partición-Réplica y Particionado, se utiliza la distribución basada en hash.
Para la topología replicada, los mensajes se replican en todos los nodos de la memoria caché en clúster. Sin embargo, el nodo coordinador es responsable de la manipulación de mensajes.
Para la topología Mirror, los mensajes se publican en el nodo activo y luego se replican en el nodo pasivo según corresponda.
Si el almacén de mensajes está a punto de ser desalojado, se registra un evento que indica un almacenamiento de mensajes completo y el inicio del desalojo.
Los mensajes tienen una sobrecarga en la memoria caché. Por lo tanto, se debe tener en cuenta el tamaño del mensaje al calcular el tamaño de la memoria caché.
Comportamiento del mensaje
Aquí discutimos el comportamiento esperado de los mensajes en los siguientes casos:
En borrar caché: Los mensajes se eliminan junto con los elementos del caché una vez que se borra el caché.
Al reiniciar el caché: Al igual que al borrar la caché, el contenido de la caché se borra al reiniciarla. Esto también incluye todos los temas y los mensajes que contienen.
Desalojo: If desalojo está habilitado en un caché Pub/Sub, primero se expulsarán los datos y luego se expulsarán los mensajes.
Cifrado y compresión: If cifrado y compresión Se configuran a nivel de caché, y esto también se aplica a la carga útil del mensaje del tema.
transferencia estatal: En caso de transferencia de estado, cuando los mensajes se mueven a otro nodo en el clúster, el nodo donde finalmente se almacena el mensaje es el responsable de la entrega.
Notificación de falla en la entrega de mensajes
Importante
Un editor que se haya registrado para recibir notificaciones de fallos en la entrega de mensajes recibe una notificación cuando un mensaje con fecha de caducidad expira antes de ser entregado a algún suscriptor.
En caso de que un mensaje no sea asignado o entregado a ninguno de los suscriptores, se considera un fracaso. Puede suceder cuando el suscriptor no existe o está inactivo debido a una falla en la red. En tal escenario, un editor puede registrar notificación de error en la entrega del mensajeEs importante tener en cuenta que la notificación de error de entrega solo se aplica a los mensajes con vencimiento. Se considera que la entrega de un mensaje ha fallado cuando el mensaje vence antes de ser entregado a alguno de los suscriptores.
Nota:
Si hay varios editores en un tema, la notificación de error se enviará a cualquiera de los editores activos que se hayan registrado para recibir la notificación de error.
Vencimiento del mensaje
Similar a los elementos de caché, un editor puede establecer la caducidad de los mensajes. Los mensajes caducarán del caché tan pronto como haya pasado el intervalo de caducidad y utilizarán el mismo mecanismo de intervalo de limpieza.
La caducidad de un mensaje determina el tiempo que persiste en la memoria caché. Independientemente de la entrega, si un mensaje no se entrega, se eliminará después del tiempo de vencimiento. Si un mensaje se entrega con éxito antes de que caduque, se elimina de la memoria caché sin esperar el tiempo de caducidad.
Mensajes ordenados
NCache Ahora admite mensajes ordenados en los que la secuencia de los mensajes se mantiene en el lado del cliente. Un editor puede publicar mensajes ordenados Al especificar un nombre de secuencia para un bloque de mensajes, estos se entregan a los suscriptores en el mismo orden en que se publican. La cadena de secuencia debe ser la misma para toda la cadena de mensajes ordenados. Mediante esta cadena, todos los mensajes residen en el mismo nodo gracias al mecanismo de afinidad de ubicación. A continuación, se detallan las características importantes de los mensajes ordenados:
Nota:
El modo de entrega sincrónica se puede utilizar para mensajes ordenados.
Los mensajes de un editor con la misma secuencia residen en un solo nodo de caché.
Si
DeliveryOptionse establece en Cualquiera, todos los mensajes ordenados de la misma secuencia se entregan al mismo suscriptor. En caso de que el suscriptor específico pierda la conexión o no esté disponible, se reasignará un nuevo suscriptor para este fin. Sin embargo, si elDeliveryOptionse establece en Todo, entonces todos los mensajes ordenados de la misma secuencia se entregan a todos los suscriptores.En caso de transferencia de estado, los mensajes ordenados pueden perder su secuencia y ser publicados sin mantener el orden.
Los mensajes pedidos solo se pueden publicar mediante el modo de sincronización en la API de publicación. No se admiten las llamadas API masivas y asíncronas.
Monitoring
NCache le brinda la capacidad de monitorear las estadísticas de Pub/Sub Topic y observar varios contadores de rendimiento En este sentido, la actividad y el estado de los temas de Pub/Sub se pueden monitorear a través de Contadores PerfMon de Windows y Herramientas de línea de comandos.
Confiabilidad y alta disponibilidad
NCache Implementa el mecanismo de confirmación para la entrega de mensajes. Los mensajes se guardan en memoria hasta que se entregan correctamente según la al menos una vez entrega criterios. Por eso, NCache garantiza la confiabilidad de la entrega de mensajes para Pub/Sub Messaging en arquitecturas distribuidas.
Además, la tolerancia a fallas de hasta un nodo en Topología de réplica de partición hace que la tienda de mensajería de Pub/Sub esté altamente disponible. Si un nodo abandona el clúster por cualquier motivo, la réplica tiene la copia de seguridad del mensaje.
En esta sección
Temas de Pub/Sub
Explica cómo crear, obtener y eliminar temas para el modelo Pub/Sub en NCache.
Publicar mensajes en un tema
Explica cómo crear un tema y publicar mensajes en él.
Suscríbete a un tema
Explica cómo suscribirse a un tema y recibir mensajes de interés.
Eventos de publicación/suscripción
Explica los eventos de Pub/Sub para notificar al editor y al suscriptor acerca de varios eventos que suceden en la memoria caché y las aplicaciones.