Sistemas de comunicación instantánea
En la era moderna, la comunicación asíncrona (email o I/O) ha quedado más relegada a un nicho y se necesita una comunicación instantánea y directa, vamos a ver el caso de XMPP y la monitorización.
Protocolo XMPP
XMPP fue una de las potencias que impulsaron la proliferación de aplicaciones de chat a principios de la década de 2000. Incluso ahora, más de dos décadas después, XMPP sigue siendo ampliamente utilizado y compatible.
¿Qué es XMPP?
XMPP o eXtensible Messaging and Presence Protocol, es un protocolo de comunicaciones de estándar abierto basado en XML (Extensible Markup Language). En su raíz, XMPP es un protocolo de chat que permite la transmisión de fragmentos XML, es decir, datos, entre dos puntos finales de red casi en tiempo real. A diferencia de otros protocolos de chat, el protocolo XMPP está diseñado para pequeños fragmentos de datos XML en lugar de grandes blobs o flujos de datos binarios.
XMPP puede manejar muchas de las funciones principales de una aplicación de chat, entre ellas:
Envío y recepción de mensajes
Transmitir el estado de un usuario
Administrar una lista de amigos/contactos
Y el favorito de todos: bloquear a los usuarios para que no te envíen mensajes
La historia de XMPP

Los orígenes de XMPP se remontan a 1999, cuando Jeremie Miller lanzó Jabber, un software de mensajería instantánea de código abierto, con el objetivo de proporcionar una alternativa abierta a los servicios de mensajería instantánea cerrados.
Las funcionalidades de mensajería instantánea y presencia de Jabber se construyeron sobre un protocolo para la transmisión de datos XML en tiempo real. A lo largo de los años, ese protocolo evolucionó hasta convertirse en lo que ahora conocemos como XMPP.
Especificaciones y estándares de XMPP
El IETF publicó los estándares XMPP básicos en 2004 en RFC 3920 y RFC 3921. Luego, en 2011, el IETF actualizó la definición principal de XMPP en RFC 6120 y RFC 6121.
Además de actualizar el núcleo, IETF publicó algunas especificaciones más a lo largo de los años: RFC 7395, que define el uso de XMPP sobre WebSockets a través de un enlace; RFC 7590, que permite el uso de TLS (Transport Layer Security); y RFC 7622, que modernizó las direcciones XMPP.
¿Cómo funciona el chat XMPP?
XMPP funciona en una arquitectura cliente-servidor. Esto significa que cuando envía un mensaje a través de XMPP, primero se envía a un servidor que luego lo enruta al cliente (usuario) correcto.
¿Cómo sabe a qué cliente enviar su mensaje?
Bueno, a cada cliente conectado a un servidor XMPP se le asigna un identificador único, conocido como ID de Jabber. El formato actual del identificador único es user@domain.com/resource.
Las partes de usuario y dominio del identificador único son bastante sencillas. User es el nombre de usuario de la persona y domain.com es el dominio del cliente que envía el mensaje.
El recurso hace referencia al tipo de dispositivo en el que se envió el mensaje. Por ejemplo, móvil vs web. Esta parte del identificador único es opcional y, a menudo, solo se define en situaciones en las que el cliente no es compatible con todos los dispositivos.
Con este identificador único, un servidor XMPP puede enrutar cada mensaje al cliente correcto. Cuando un cliente inicia una sesión con un servidor XMPP, abre una conexión TCP persistente e inicia un flujo XML al servidor. Una vez que el servidor identifica al cliente (a través del identificador único) y se acepta la conexión, el servidor abre un flujo XML adicional, y este flujo vuelve al cliente. El resultado final es un flujo bidireccional de datos XML.
Los servidores XMPP también pueden comunicarse con otros servidores XMPP para crear una red de mensajería global llamada "federación". Una federación le permite comunicarse sin problemas con un cliente en un servidor XMPP diferente.
¿Prefieres los elementos visuales? Una arquitectura de servidor-cliente XMPP tiene el siguiente aspecto:
Ahora que está familiarizado con la arquitectura XMPP a un alto nivel, vamos a desglosarla un poco más:
Estrofas XMPP
Como mencionamos anteriormente, XMPP transmite fragmentos de XML entre dos puntos finales de red. En concreto, los fragmentos XML transmitidos por XMPP, y utilizados para la comunicación básica, se denominan estrofas. Hay 3 tipos de estrofas utilizadas en XMPP y cada una tiene su propia estructura y propósito únicos. Estas son las estrofas de presencia, mensaje y coeficiente intelectual.
Estrofa de presencia
Tal como su nombre indica, la estrofa de presencia se utiliza para compartir el estado de una red o usuario con otros usuarios, redes o servidores. El fragmento XML tiene un aspecto similar al siguiente:
Estrofa del mensaje
Otra estrofa sencilla, la estrofa del mensaje se utiliza para compartir mensajes de chat entre usuarios. Es un mecanismo de "inserción" que envía información a otras entidades XMPP sin necesidad de una respuesta. Una estrofa de mensaje tiene un atributo type que puede tener algunos valores diferentes: chat, normal, chat grupal, encabezado y error. Una estrofa de mensaje puede tener el siguiente aspecto:
Estrofa de IQ
Una estrofa IQ es el método de XMPP para solicitar y modificar datos del cliente al servidor. Es similar a las solicitudes GET y POST de HTTP. Cada estrofa de solicitud de IQ tiene un valor de ID que asocia la solicitud con la estrofa de respuesta. A continuación, se muestra un ejemplo de estrofa de IQ que solicita la vCard (archivo de contacto virtual) de un usuario específico:
Características de XMPP
Algunas de las características principales de XMPP son:
XMPP permite la mensajería asíncrona entre los dispositivos de los usuarios. ¿Qué significa esto para tu aplicación? Esto significa que los usuarios pueden enviar varios mensajes seguidos en lugar de enviar uno y tener que esperar una respuesta del destinatario antes de enviar otro. También significa que dos usuarios no necesitan estar en línea al mismo tiempo para intercambiar mensajes.
Con otras arquitecturas cliente-servidor, el dispositivo del usuario (cliente) debe hacer ping periódicamente al servidor para comprobar si hay nuevos mensajes. Este proceso se denomina sondeo y resta valor a la experiencia en tiempo real del usuario. También puede ser bastante caro en cuanto al ancho de banda.
La mensajería asincrónica brinda al usuario una experiencia en tiempo real, a la vez que es eficiente y requiere poco ancho de banda.
Gateways
Otra característica clave del diseño de XMPP es que se puede utilizar para conectar múltiples tipos de protocolos, como XMPP -> SMS o SMS -> XMPP -> correo electrónico. Esto se hace usando algo llamado puertas de enlace.
Las puertas de enlace son servicios especiales que se ejecutan junto con un servidor XMPP y actúan como proxies de cliente. Este aspecto del lado del servidor de las puertas de enlace significa que el cliente puede permitir que sus usuarios interactúen con otros usuarios en diferentes protocolos, sin necesidad de código adicional.

¿Cuándo debo usar el protocolo XMPP para mi aplicación de chat?
XMPP es solo uno de los muchos protocolos de chat diferentes entre los que puede elegir al seleccionar la pila tecnológica para su aplicación de chat. Elegir el protocolo que mejor se adapte a su caso de uso específico no es una tarea fácil. Necesita un protocolo que sea eficiente y eficaz y, al mismo tiempo, cumpla con sus requisitos únicos.
Cuando es adecuado usar XMPP en mi aplicación:
Si estás buscando un protocolo estandarizado y de código abierto.
Si necesitas un protocolo que ofrezca flexibilidad en lo que respecta a los lenguajes de programación.
Si deseas un protocolo que sea ampliamente adoptado y generalmente conocido en la comunidad de desarrolladores.
Algunos ejemplos de aplicaciones de chat que usan XMPP son:
WhatsApp utiliza su propia variación propietaria de XMPP.
Zoom utiliza XMPP para su funcionalidad de chat.
Apple usa XMPP para enviar notificaciones push.
Grindr, una aplicación de citas basada en geolocalización, utiliza XMPP para su funcionalidad de chat.

Comunicación de estado de servidores y monitorización
En la actualidad, la administración de servidores es una tarea crucial para garantizar el correcto funcionamiento de sistemas informáticos y servicios en línea. La comunicación del estado de los servidores y su monitorización permiten detectar fallos, optimizar recursos y garantizar la disponibilidad de servicios críticos.

La monitorización de servidores es el proceso de supervisar el rendimiento, la disponibilidad y la integridad de los servidores mediante herramientas especializadas. El objetivo principal es prevenir fallos, detectar problemas de rendimiento y garantizar la continuidad operativa por lo tanto, algunos de los elementos clave de la monitorización son:
Disponibilidad: Verificar si el servidor está activo y accesible.
Uso de recursos: CPU, memoria RAM, almacenamiento y ancho de banda.
Estado de servicios: Funcionamiento de bases de datos, aplicaciones y procesos críticos.
Seguridad: Detección de accesos no autorizados y vulnerabilidades.
Vamos a ver algunos de los métodos, herramientas y mejores prácticas para la monitorización de servidores y la comunicación de su estado:
1. Notificaciones y alertas
Correos electrónicos: Informan sobre incidentes críticos.
Mensajería instantánea: Integración con Slack, Telegram, Discord, etc.
Sistemas de gestión de incidencias: Jira, ServiceNow, entre otros.
Notificaciones push: Para dispositivos móviles mediante aplicaciones específicas.
2. Dashboards y visualización
Grafana: Permite la creación de paneles dinámicos con métricas en tiempo real.
Kibana: Parte del stack ELK, útil para análisis de logs.
Nagios y Zabbix: Herramientas con interfaces gráficas para visualizar el estado del sistema.
3. Registros y reportes
Logs del sistema:
/var/log/syslog
,/var/log/auth.log
, entre otros.Registros de aplicaciones: Logs específicos de cada software.
Reportes periódicos: Informes automáticos sobre el estado del sistema y rendimiento.

Herramientas de Monitorización
Además, existen diversas herramientas concretas para la monitorización de servidores, cada una con características específicas según la necesidad del entorno:
Herramientas de código abierto:
Nagios: Monitorización de redes y servidores con alertas configurables.
Zabbix: Plataforma de monitorización avanzada con soporte para agentes.
Prometheus: Ideal para métricas en tiempo real y monitoreo de contenedores.
ELK Stack: ElasticSearch, Logstash y Kibana para gestión y visualización de logs.
Herramientas comerciales:
Datadog: Solución SaaS con monitorización en la nube.
New Relic: Especializado en el monitoreo de aplicaciones.
SolarWinds: Ofrece una suite completa para administración de infraestructura.
Mejores Prácticas en Monitorización
Para una monitorización eficiente, se deben seguir ciertas mejores prácticas:
Definir métricas clave
Establecer valores normales y umbrales críticos.
Identificar patrones de comportamiento del sistema.
Automatización
Configurar alertas automáticas basadas en reglas predefinidas.
Usar scripts para recopilar y procesar datos.
Seguridad en la monitorización
Controlar el acceso a herramientas de monitoreo.
Encriptar las comunicaciones de los agentes de monitoreo.
Escalabilidad y redundancia
Implementar sistemas distribuidos para evitar puntos únicos de fallo.
Optimizar el rendimiento del sistema de monitoreo para grandes infraestructuras.
En las siguientes lecciones veremos algunas de estas tecnologias
Referencias
Última actualización