El protocolo MQTT

De binefa.com
Salta a la navegació Salta a la cerca

¿Qué es MQTT?

MQTT es una manera de comunicar dispositivos de Internet de las Cosas (IdC / IoT) entre sí. Es un protocolo ligero y muy versátil que se puede usar desde un Arduino, una Rasperry Pi, un PC multinúcleo hasta los servicios de Amazon Web Services.

Cuando se trata de comunicar dispositivos mediante TCP/IP hay un gran abanico de protocolos. La clave está en escoger el más adecuado. La comprensión del protocolo nos permite escoger el que más nos conviene. Probablemente hay más opciones para la mensajería de intermediación (brokering), pero la mayoría de dispositivos de IdC usan MQTT.

Un sistema de mensajería de intermediación (message brokering) es un protocolo de publicación / suscripción basado en el modelo hub and spoke (modelo de transporte aéreo equivalente a los radios de una rueda de bicicleta, todos los movimientos de los radios tienen relación con el centro).

Palabras clave

Palabras clave en los sistemas de mensajería de intermediación:

  • Intermediario (broker)
  • Cliente (client)
  • Tema (topic)
  • Publicación (publish)
  • Suscripción (subscribe)
  • Cancelación de suscripción (unsubscribe)
  • Calidad del servicio (QoS)

Intermediario (broker)

Acepta mensajes de los clientes y los envía a los clientes interesados. Los mensajes pertenecen a un tema (topic). A veces se los denomina servidores (servers).

Cliente (client)

Dispositivo que publica un mensaje respecto a un tema, se subscribe a un tema o ambas cosas a la vez.

Tema (topic)

Nombre (o lugar) del intermediario para un tipo de mensaje. Los clientes se subscriben y publican a un tema.

Publicación (publish)

Un cliente envía un mensaje al intermediario usando el nombre de un tema.

Suscripción (subscribe)

Un cliente indica al intermediario cuales son sus temas de interés. Una vez subscrito, el intermediario envía los mensajes publicados sobre el tema de interés. Un cliente se puede subscribir a varios temas.

Cancelación de suscripción (unsubscribe)

Un cliente informa al intermediario que quiere dejar de recibir mensajes sobre un tema determinado.

Calidad del servicio (QoS)

MQTT dispone de un mecanismo de calidad del servicio o QoS, entendido como la forma de gestionar la robustez del envío de mensajes al cliente ante fallos (por ejemplo, de conectividad).

MQTT tiene tres niveles QoS posibles:

  • QoS 0 unacknowledged (at most one): El mensaje se envía una única vez. En caso de fallo puede que alguno no se entregue.
  • QoS 1 acknowledged (at least one): El mensaje se envía hasta que se garantiza la entrega. En caso de fallo, el suscriptor puede recibir algún mensaje duplicados.
  • QoS 2 assured (exactly one): Se garantiza que cada mensaje se entrega al suscriptor, y únicamente una vez.

Usar un nivel u otro depende de las características y necesidades de fiabilidad de nuestro sistema. Lógicamente, un nivel de QoS superior requiere un mayor intercambio mayor de mensajes de verificación con el cliente y, por tanto, mayor carga al sistema.

Fuente: Páqina web de Luis Llamas

Analogía con el servicio postal

Una oficina de correos envía y recibe cartas. Los clientes pueden enviar una carta, recibirla o ambas cosas a la vez. Para enviar una carta solo hay que poner un mensaje dentro del sobre, escribir una dirección y enviarla al servicio postal. Cuando el servicio postal recibe la carta, lo encamina al receptor previsto.


Esto significa que un cliente puede enviar o recibir cartas. La clave de todo es que las cartas pasan por la oficina de correos y la oficina de correos tiene que conocer información de sus clientes. El servicio postal es un ejemplo de sistema de mensajería por intermediación basada en un modelo hub and spoke.


En el MQTT hay un intermediario y hay clientes. En el símil, el intermediario es la oficina de correos, y en términos informáticos el servidor. Los clientes pueden publicar mensajes o enviar cartas a la oficina de correos. Otros clientes pueden subscribirse a los temas, o recibir las cartas, desde la oficina de correos. Los clientes pueden publicar y subscribirse.


En el MQTT hay un intermediario que comunica con los clientes. Hay temas que pueden tener subtemas. Cuando los dispositivos se conectan pueden publicar información sobre temas o subtemas y también se pueden subscribir para recibir información.

Analogía con el servicio postal

MQTT vs HTTP (o REST)

HTTP tiene un montón de cabeceras. Una implementación de mensajería intermediaria puede ser pequeña. Por ejemplo, un paquete MQTT puede tener tan solo 2 bytes.

HTTP requiere de múltiples acciones POST para distribuir un mensaje a mas de un cliente. El objetivo del sistema de mensajería intermediaria es que el intermediario distribuya el mensaje, tan solo a los clientes interesados. La funcionalidad del MQTT es enviar de uno a muchos.

Referencias

Protocolos de comunicación para IoT

MQTT: The Standard for IoT Messaging

Introducció a MQTT (en catalán)

MQTT Essentials (de HiveMQ)

Beginners Guide To The MQTT Protocol