Glosario de Automatización • Alias de topico de MQTT

¿Qué es un alias de tópico de MQTT?

Ingeniería Merobix • • 7 min de lectura

En la telemetría industrial la cadena de tópico de un mensaje MQTT suele ser más larga que la lectura que carga. Un tópico bien estructurado que nombra el sitio, el activo y el tag puede llegar a decenas de caracteres, y cada PUBLISH lo repite completo. Sobre un enlace celular medido, enviar esa cadena miles de veces al día desperdicia bytes en información que el broker ya conoce. MQTT 5.0 agregó el alias de tópico para arreglar justamente esto, permitiendo a un publicador enviar el tópico largo una vez y luego referirse a él por un entero pequeño. Esta guía explica qué es un alias de tópico, cómo se negocia el mapeo, y por qué importa para los publicadores de borde en redes limitadas.

Volver al glosario

Alias de topico de MQTT en una línea: Un alias de tópico de MQTT es una función de MQTT 5.0 que permite a un cliente enviar una cadena de tópico larga una sola vez, junto con un entero pequeño como alias, y de ahí en adelante publicar hacia el mismo tópico usando solo ese entero en lugar de la cadena completa. Es una optimización por conexión y por dirección que recorta la sobrecarga de bytes de cada mensaje repetido, lo que importa más para los publicadores de borde que envían telemetría frecuente sobre enlaces medidos o de bajo ancho de banda.

Enviar el tópico una vez y luego un número

En MQTT el tópico es una cadena que nombra a dónde pertenece un mensaje, y en un sistema bien organizado esa cadena es deliberadamente descriptiva. Un tópico podría deletrear una empresa, un sitio, un área, un dispositivo y una medición específica, para que se lea con claridad y enrute limpio. El costo de esa claridad es la longitud. Cada paquete PUBLISH carga la cadena de tópico completa, así que un dispositivo que reporta una lectura de presión de dos bytes muchas veces por minuto puede gastar muchos más bytes en el tópico repetido que en los propios datos.

El alias de tópico elimina esa repetición. En el primer PUBLISH hacia un tópico dado, el cliente incluye tanto la cadena de tópico completa como una propiedad de alias de tópico, que es un entero pequeño elegido por el emisor. El broker registra el emparejamiento durante la vida de esa conexión. En cada PUBLISH posterior el cliente envía una cadena de tópico vacía y solo el entero del alias, y el broker busca la cadena que guardó antes y trata el mensaje como si se hubiera enviado el tópico completo. Dos bytes de alias sustituyen a un tópico que de otro modo podría medir cuarenta o cincuenta bytes.

El mapeo es estrictamente local a una conexión y una dirección. No es un atajo que otros clientes puedan ver, no persiste a través de reconexiones, y un alias de cliente a broker es independiente de cualquier alias que el broker use al entregar mensajes de vuelta a un suscriptor. Si la conexión cae y se restablece, los alias comienzan vacíos de nuevo y cada tópico debe presentarse con su cadena completa una vez más antes de poder referirse a él por número.

Negociar el máximo de alias

Un alias de tópico solo funciona si ambos extremos concuerdan en cuántos alias se permiten, porque el receptor tiene que asignar una tabla para recordar los mapeos. Esto se negocia con la propiedad de máximo de alias de tópico. Cuando un cliente se conecta, el broker puede anunciar el mayor valor de alias que está dispuesto a aceptar de ese cliente, y cuando el broker envía su CONNACK el cliente aprende el techo bajo el cual debe mantenerse. Si el broker fija un máximo de alias de tópico de cero, está rehusando aceptar alias del todo, y el cliente debe seguir enviando cadenas de tópico completas.

Los enteros elegidos importan menos que mantenerse dentro del rango acordado y ser consistente. Un publicador típicamente asigna el alias uno a su tópico más frecuente, el alias dos al siguiente, y así sucesivamente, hasta el máximo que el broker permita. Si un dispositivo publica hacia más tópicos distintos de los que permite el máximo de alias, simplemente no puede aliasarlos todos, así que suele aliasar los tópicos más activos y enviar los raros completos. Reutilizar un número de alias para un tópico nuevo está permitido y lo revincula, así que un cliente puede reciclar una ranura cuando un tópico ya no se necesita, a costa de reenviar la cadena completa cuando regrese.

Como la tabla de alias está acotada y es por conexión, el aliasado de tópicos se entiende mejor como una ayuda de compresión que como un esquema de nomenclatura. No cambia cómo se estructuran los tópicos, cómo coinciden los comodines, ni cómo se comportan los mensajes retenidos. Cambia solo la cantidad de bytes en el cable para los tópicos que un dispositivo envía con más frecuencia, que es precisamente la sobrecarga que domina en un enlace de telemetría parlanchín.

Por qué a los publicadores de borde les importa en enlaces medidos

Para un gateway de campo que empuja lecturas a una plataforma SCADA en la nube sobre un módem celular, los bytes tienen un costo directo. Muchos planes de SIM industriales se cobran por volumen de datos, e incluso donde no, un enlace marginal o congestionado hace de cada byte innecesario un pequeño impuesto sobre la confiabilidad. Un controlador de bomba que publica varios tags cada pocos segundos acumula una cantidad enorme de paquetes PUBLISH a lo largo de un mes, y si cada uno repite un tópico largo, los tópicos por sí solos pueden representar una gran parte del tráfico. El aliasado de tópicos lo recorta de forma constante, mensaje tras mensaje.

El ahorro se compone con la estructura que hace legibles los tópicos MQTT en primer lugar. La propia disciplina de nomenclatura que una plataforma de monitoreo alienta, con rutas claras de sitio y activo para que los operadores se suscriban de forma intuitiva, es lo que hace largas a las cadenas. El aliasado de tópicos permite a una operación conservar esos tópicos descriptivos para las personas y los suscriptores mientras paga el costo de bytes solo una vez por conexión en el borde publicador. Es un caso raro donde la claridad y la eficiencia no tienen que sacrificarse una por la otra.

En un contexto de SCADA en la nube, una plataforma como Merobix que ingiere telemetría de muchos sitios remotos se beneficia cuando cada publicador de borde es frugal en su subida, porque los mensajes más magros significan menos retransmisiones en enlaces inestables y menores facturas de datos para el operador. El aliasado de tópicos es una de varias funciones de MQTT 5.0 que un dispositivo de borde puede usar para mantener pequeña su huella celular. Convive con otras eficiencias, como enviar lecturas solo cuando cambian, y juntas permiten a un sitio reportar con frecuencia sin saturar un plan celular modesto.

Preguntas frecuentes

¿Un alias de tópico sobrevive a una reconexión?

No. Un mapeo de alias de tópico vive solo durante una única conexión MQTT. Cuando un cliente se desconecta y se reconecta, la tabla de alias queda vacía de nuevo, así que cada tópico debe enviarse una vez con su cadena completa antes de poder referirse a él por su alias entero. Por eso el aliasado ayuda más en conexiones estables y de larga vida que publican muchos mensajes entre reconexiones.

¿El alias de tópico es lo mismo que un alias de métrica de Sparkplug?

No, son mecanismos distintos en capas distintas. Un alias de tópico de MQTT es un atajo de nivel de transporte para la cadena de tópico en un paquete PUBLISH, negociado por conexión. Un alias de métrica de Sparkplug es un entero de nivel de aplicación que sustituye a un nombre de métrica dentro de la carga útil después de que un mensaje de nacimiento lo define. Resuelven problemas de ahorro de bytes similares pero operan de forma independiente, y un sistema puede usar ambos a la vez.

¿Necesito MQTT 5.0 para usar alias de tópico?

Sí. Los alias de tópico son una función introducida en la versión 5.0 de MQTT y no están disponibles en MQTT 3.1.1. Tanto el cliente como el broker deben soportar MQTT 5.0, y el broker debe anunciar un máximo de alias de tópico distinto de cero, antes de que un publicador pueda empezar a usar alias. En una conexión MQTT 3.1.1 cada mensaje sigue cargando su cadena de tópico completa.

Más en Protocolos industriales
Alias de métrica y número de secuencia  •  Corregir un bucle de reconexion de cliente MQTT  •  Sesión limpia vs persistente  •  OPC UA vs MQTT para la empresa  •  Diagnosticar un nodo Sparkplug fuera de linea  •  Todo en Protocolos industriales →
Capacitación SCADA gratuita para operadores
Merobix University - 70 lecciones en video y 261 preguntas de examen, del primer inicio de sesión a los reportes de cumplimiento (contenido en inglés). Sin llamada de ventas.
Comenzar gratis →