blank
9
Dic

Gestores de mensajería: Un mundo hiperconectado

Me gustaría hacer referencia a cómo los gestores de mensajería nos han proporcionado cambios en nuestra comunicación. Quizás el más famoso y popular sea Whatsapp, pero obviamente no es el único. Si los gestores de mensajería están alcanzando grandes cuotas de mercado es porque satisfacen una necesidad. La necesidad de comunicar algo de un emisor a un receptor, de forma asíncrona, es decir, como si yo envío una carta que se queda en el buzón hasta que el receptor abre dicho buzón y la lee. Por eso, el gestor de mensajería no requiere que emisor y receptor se encuentren conectados a la vez. Y eso, que parece algo normal, realmente es muy importante a la hora de gestionar el tiempo en cuanto a cada uno de los participantes en esa comunicación. Una comunicación telefónica se produce en tiempo real, y obliga a ambas partes a estar conectadas, es decir, como el receptor no descuelgue no hay comunicación. Por eso es una comunicación síncrona.

Comunicación asíncrona vs comunicación síncrona 

En la comunicación asíncrona hay tres partes involucradas, el emisor, el sistema de mensajería y el receptor. Al enviar un mensaje a otra persona, se lo estamos enviando a un servidor de mensajería, que nos da un check de confirmación. Cuando el receptor está disponible se conecta con el servidor de mensajería, y en el momento en que el receptor lee el mensaje, al emisor le llega un check de recibido, desde el servidor de mensajería.

Por lo tanto, el sistema de mensajería siempre debería estar operativo. En una comunicación entre personas, quizás no sea tan crítico, pero y si estamos hablando de sistemas de mensajería pensados para ser utilizados, no por seres humanos, sino por máquinas? Y es que tanto los clientes como los usuarios de este servicio, cuando hablamos de grandes volúmenes de datos, son programas que envían datos, y programas que leen datos. Que quede claro, que entre ambos programas puede haber comunicación sin un gestor de mensajería, pero esa comunicación síncrona obliga a que ambos programas estén contestando en tiempo real, sino no se podría efectuar.

Depende de lo que nos interese montaremos uno u otro. Si montamos un sistema de pago con tarjeta en un supermercado, elegiremos un sistema de comunicación síncrona, porque inmediatamente a través del TPV, manda un cargo al banco y requiere una respuesta en el momento. Pero si montamos un sistema de pago en un peaje, el programa en un TPV mandará al banco el cargo del peaje, y aquí nos interesa tener una comunicación asíncrona, ya que es conveniente no esperar respuesta para no generar atascos. Además, si se cayese la pasarela de pago, en un supermercado, el mayor mal es que no podamos pagar y dejemos la compra en el carro, pero en un peaje, no sólo el atasco sería monumental, sino que además podría darse una situación de emergencia con una ambulancia que llevase un enfermo grave y se encontrase con un atasco tremendo. Por lo tanto, en el peaje se utilizaría una comunicación asíncrona en la que no se requiere respuesta inmediata, y simplemente se manda una orden de pago con una tarjeta de débito o de crédito.

Máquinas y grandes volúmenes de datos en mensajería

Por tanto, una comunicación por whatsapp sería asíncrona, mientras por teléfono sería síncrona. Cuando se envía un mensaje a través de whatsapp, bien a un usuario, bien a un grupo, se manda al servidor de whatsapp, que dispone de una cola FIFO de mensajes. Si esta mirada la hacemos desde el punto de vista de máquinas, podemos ver que una máquina que puede estar produciendo mensajes en volúmenes significativos, acabe llenando la cola de mensajes, a partir de ahora, TOPICs. Por lo tanto, estas máquinas productoras de mensajes tendrán varios productores dependiendo de áreas, grupos, departamentos, equipos, etc… que hay en una empresa y se guardan en los TOPICs que se hayan creado, según el volumen.

Por su parte, en grandes volúmenes otras máquinas estarán leyendo esos mensajes, como consumidores de los mismos, que cada uno queda suscrito al TOPIC correspondiente. Así se hace en whatsapp con nuestros contactos o grupos, pero en volúmenes mínimos. Como el volumen de mensajes entre máquinas puede ser enorme, podría ocurrir que cada productor de mensajes, a través de un TOPIC, tenga suscrito a varios consumidores en ese mismo TOPIC, para que un mismo mensaje sea procesado por distintos programas y que unos consumidores se encarguen de procesar ciertos tipos de mensajes y otros consumidores, otro tipo de mensajes. Para llevar un control de los mensajes dentro de la misma tubería o topic que va a llegar a los respectivos consumidores, es necesario identificar esos mensajes con un número (offset) que va asociado a cada uno de los mensajes que se van procesando. Cada consumidor irá por un canal con su offset.

Escalabilidad y mensajería 

Cuando se manejan grandes volúmenes de mensajes es conveniente garantizar alta disponibilidad con un sistema de mensajería que se encuentre siempre operativo, gracias a un clúster de servidores que trabajan como si fuera uno. Entre los gestores de mensajería más populares se encuentran Kafka, ActiveMQ, RabbitMQ, muy útiles en grandes empresas y se suelen montar varios de ellos en distintos servidores, por si se cae un servidor que haya otro atendiendo todas las peticiones. Y el topic que reside en un servidor, debería estar definido también en los otros servidores (por lo menos, en uno) para lograr que los mensajes no se pierdan y sigan transfiriéndose al consumidor, obteniendo redundancia ante cualquier incidencia.

Además de la alta disponibilidad, que en algunos casos supone que el 99,99% del tiempo tiene que estar funcionando o lo que es lo mismo, es asumible que el servicio puede estar caído unos minutos al año, el sistema debe poder atender a un número variable de usuarios que cada vez crece más, por lo tanto, debe proporcionar escalabilidad, ya que según vaya teniendo más datos, más productores y más consumidores, se necesitarán más servidores capaces de procesar y almacenar toda esa información.

Replicar los mismos mensajes en todos los servidores nos obligaría a tener que disponer de mucho espacio de almacenamiento, y el almacenamiento de dichos datos, sería muy lento. Si el volumen de mensajes aumenta, sería necesario no sólo aumentar el número de servidores, sino también aumentar el número de consumidores que van a ir leyendo esos mensajes en la forma en que se haya configurado su repartición de lectura. Cuando un mensaje se envía, desde el origen, puedo elegir a qué partición en el servidor va a ir en base a un criterio específico. Esta forma de trabajar a nivel de particiones, me estará proporcionando escalabilidad, porque puedo tener consumidores haciendo el mismo trabajo en paralelo, pero procesando distintos datos y voy a escalar esta forma de trabajar tanto como necesite, sin entrar en conflicto. Un gestor de mensajería recurre al particionado de los topics, con lo que cada partición guardaría un tipo distinto de información. Hoy en día la información podría estar replicada en distintas ciudades, países o continentes del que nos encontramos, siempre buscando la seguridad.

Un mundo hiperconectado…

Pero para dar una pequeña vuelta de tuerca a este asunto y facilitar el trabajo por secciones, áreas, departamentos, equipos, etc… de la empresa, se podrían crear entre el servidor y el consumidor, en el momento de la lectura, grupos de consumidores que cada uno de ellos, integrase a uno o varios consumidores (departamentos) y leyesen datos de forma determinada.

Un gestor de mensajería puede utilizarse en una petición de cargo en cuenta bancaria. Un programa descontará dinero de una cuenta corriente, otro programa dejará un registro contable y otro programa enviará un SMS al titular de la cuenta. Todos estos mensajes gestionados por programas productores, topics y grupos de consumidores con sus consumidores, se harán en volúmenes inmensos. Esta mensajería puede funcionar igualmente en el mercado de divisas y criptomonedas, o en operaciones bursátiles, como en juegos de móviles para notificaciones de jugadas entre jugadores con partidas simultáneas en todo el mundo.

En monitorizaciones de ficheros log de tiendas online que cuentan con servidores de aplicaciones y donde nos interesaría detectar errores, control de peticiones de usuarios para establecer estadísticas y análisis de todos los eventos que nos podríamos llevar a cualquier BBDD o indexadores, tendríamos una comunicación asíncrona mediante conectores. De forma que, para asegurarnos responder y entregar millones de mensajes en un segundo, contaremos con un sistema de mensajería, dentro de un cluster de servidores, dentro de una arquitectura Big Data, con el fin de manejar un volumen de datos como nunca se ha realizado en la Historia.

Por lo tanto, estos gestores de mensajería están teniendo un recorrido brutal en la extracción, transformación y carga de datos (Business Intelligence), así como en el manejo de grandes volúmenes de información (Big Data). De nuevo, vemos que estás tecnologías que han supuesto un cambio de paradigma en el tratamiento de los datos, en los procesos y, en definitiva, en la comunicación se encuentran relacionadas de forma transversal entre ellas, independientemente del negocio y sector en el que se ubiquen. Si a estas tecnologías añadimos internet de las cosas o inteligencia artificial con machine/Deep learning estamos configurando un entramado de información y comunicación super potente, para un mundo hiperconectado.

Más artículos de Luis López 

Leave a Reply