BorrowBits
Portada » Blog » Telecomunicaciones » MQTT vs HTTP: ¿qué protocolo es mejor para IoT?

MQTT vs HTTP: ¿qué protocolo es mejor para IoT?

Éste es un resumen de las principales diferencias entre MQTT y HTTP como protocolos de comunicación para Internet de las Cosas (IoT). Respuesta corta: MQTT es mejor para casi todas las aplicaciones IoT (Internet of Things). Lee el resto para averiguar qué significa esto en términos de arquitectura, complejidad, velocidad, fiabilidad y seguridad.

MQTT son las siglas de «Message Queue Telemetry Transport» y es un protocolo de publicación/suscripción (pub/sub). Se utiliza frecuentemente en comunicaciones máquina-a-máquina (M2M) debido a su eficiencia y bajo consumo.

Diferencias en la arquitectura

  • MQTT se enfoca en la transmisión de datos a nivel de byte, mientras que HTTP en la transmisión de documentos.
Broker MQTT en un modelo pub/sub
  • Por otra parte HTTP funciona como un modelo cliente-servidor (o petición-respuesta), mientras que MQTT funciona mediante publicaciones y suscripciones a un tema (modelo «pub/sub»), mediante un Broker (agente que gestiona las publicaciones y suscripciones).
  • En MQTT se mantiene la conexión y se pueden compartir pings o latidos («heartbeats») para mantenerla abierta. HTTP sólo crea una conexión cuando se necesita enviar una petición.
  • En este sentido HTTP establece una conexión TCP half-duplex, mientras que en MQTT es full-duplex.

¿Cuál es más sencillo y ligero?

HTTP vs MQTT
  • MQTT tiene una especificación muy liviana. Para los desarrolladores basta con conocer los tipos CONNECT, PUBLISH, SUBSCRIBE, UNSUBSCRIBE y DISCONNECT. Por su parte HTTP es mucho más intrincado, aunque esto lo hace apto para aplicaciones que requieran mayor control de la comunicación.
  • La cabecera más pequeña de MQTT sólo tiene 2 Bytes, mientras que la cabecera más pequeña de HTTP es de 26 Bytes.
  • En cuanto a la carga (payload), MQTT es capaz de transportar datos crudos en binario, mientras que HTTP requiere una codificación en base 64.
  • El aplicaciones industriales, el protocolo MQTT permite propagar configuraciones nuevas de los dispositivos mediante suscripciones. En HTTP las configuraciones nuevas deben solicitarse explícitamente mediante un sondeo periódico (polling): «Dispositivo IoT: Servidor, ¿tienes ya alguna configuración nueva para mí?«

Velocidad: ¿Cuál es más rápido?

  • MQTT es más rápido y más eficiente que HTTP:
    • En redes 3G es 93 veces más rápido, usa 8 veces menos tráfico y gasta 170 veces menos energía en los receptores.
    • En otros escenarios como este test de performance MQTT fue al menos 20 veces más rápido, usa 50 veces menos tráfico y energéticamente un 22% más eficiente.

QoS: ¿Cuál es más fiable?

HTTP no implementa por sí mismo calidad de servicio (QoS). En cambio, MQTT puede establecer tres diferentes niveles QoS:

  • QoS 0 – at most once: sólo realiza una entrega «best effort», sin garantías frente a fallos. Opción por defecto.
  • QoS 1 – at least once: el mensaje será entregado como mínimo una vez y puede proteger frente a pérdidas de conexión (aunque pueden llegar duplicados). Utiliza ACKs (confirmaciones de entrega).
  • QoS 2 – exactly once: garantiza que cada mensaje se reciba por la parte receptora sin duplicados.

Esto es importante para garantizar la entrega de confirmaciones después de hacer una actualización remota de un dispositivo. Por ejemplo Google IoT Cloud garantiza con QoS1 el upgrade de la configuración de los dispositivos suscritos.

Especial en MQTT: «Última Voluntad» y Retención de mensajes

  • MQTT ofrece además las funciones última voluntad (Last will & Testament, LWT): en caso de una desconexión repentina de un cliente, todos los demás clientes suscritos a ese topic recibirán una notificación por parte del broker.
  • Por otra parte la Retención de mensajes permite que un cliente recién suscrito a un tema conseguirá una actualización de estado inmediata sobre el resto de clientes.
  • HTTP carece de las funcionalidaes testamento y retención de mensajes.

¿Cuál es más seguro?

  • En MQTT la autenticación se puede realizar mediante identificador de cliente, usuario/contraseña o certificados x509.
  • Tanto MQTT como HTTP pueden operar sobre TLS ó SSL, ya que esto forma parte del protocolo TCP/IP.
  • El broker MQTT puede controlar quién se suscribe y quién publica en qué topics.
  • Al igual que los servidores web, los brokers y bridges MQTT soportan autorización mediante JWT (JSON Web Token).
  • En este sentido los dos protocolos son igualmente seguros en combinación con SSL y JWT. Y viceversa: HTTP y MQTT son igual de inseguros si no se toma ninguna medida.
  • Sin embargo, MQTT puede tener más problemas para pasar a través de los cortafuegos, ya que sus puertos no suelen estar tan aceptados como los de HTTP.
    • Aunque no es lo ideal, si fuera necesario MQTT se podría implementar sobre WebSockets (puerto 80).

Si os interesa el tema de seguridad en IoT háganoslo saber en los comentarios y publicaremos un tutorial más extenso 🙂

Conclusiones

MQTT está mucho más optimizado que HTTP en cuanto a tiempos de respuesta, throughput, consumo de batería y ancho de banda.

HTTP derrocha más energía y capacidad. Pero es un viejo conocido y puede ser más fácil de implementar con respecto a sistemas antiguos que todavía usen HTTP. También es idóneo para enviar bloques grandes de datos de una sentada.

Otra diferencia importante a tener en cuenta es la posibilidad de implementar QoS y las funciones especiales de MQTT: última voluntad y retención de mensajes.

Por tanto MQTT es mejor para casi todas las aplicaciones de Internet de las Cosas (IoT), pero si estás empezando y no sabes cuál elegir, implementa HTTP y cambia a MQTT cuando lo necesites.

En próximos tutoriales describiremos algunos ejemplos de implementación usando NodeMCU y el broker Mosquitto. Asegúrate de suscribirte!

Angel H.

Tecnófilo irreparable y lector insaciable. Ingeniero de Telecomunicaciones y Product Manager. +10 años de experiencia en proyectos de Software, Cloud e Ingeniería de Redes. Me apasiona el DIY, la tecnología Blockchain y las Finanzas.

3 comentarios

  • Hola buen día. He leído tu artículo. Me pareció interesante y quería ver si me puedes orientar.
    Quiero utilizar esta tecnología para el uso RFID. Lo usamos en carreras de moto para saber cuántas vueltas dio y que tiempo. Tenemos una limitación que es la velocidad que pasa la moto.

    Mi idea es poner en la linea de meta una antena y en la moto colocar este ESP8266. leyendo tu articulo veo que el protocolo MQTT es mejor. Así mismo puedo leer sobre TCP/IP. Un de mis inquietudes es saber que conexión hacer para que al llegar a la linea de meta se conecte lo más rápido posible para que me entregue el ID que estará grabado en el ESP8266 y ademas el db para identificar cual es la registro mas alto pasa saber la proximidad con la antena.

    Desde ya muchas gracias.

    • Hola Gabriel, ése sí que es un proyecto interesante! No sé si he comprendido bien tu pregunta. Si estás usando RFID, entiendo que en la moto llevas una antena RFID pasiva (una especie de etiqueta) con su respectivo ID y la antena RFID lo leería usando el protocolo correspondiente (necesitaría saber más especificaciones técnicas).

      Si lo quieres hacer de la forma que describes, publicando el ID activamente desde la moto con su propia MCU, no estaríamos hablando de RFID sino de algo similar a IoT. En ese caso yo usaría MQTT (por velocidad). En el broker tendrías un tema «/carrera» y cada moto publicaría un mensaje JSON { «vehiculoID»: 1234, «timestamp»: 1645278697 } cada pocos milisegundos. Esos mensajes los puedes llevar a una base de datos NoSQL como CosmosDB o MongoDB (más rápidas que una SQL relacional). La moto con la marca de tiempo más baja sería el que ha logrado alcanzar la meta (el rango de la antena) en primer lugar.
      Sigue sin quedarme claro si lo quieres hacer con RFID pasivo o IoT via WiFi.
      Cuéntame más!

  • Hola Angel,

    Te comento que tenemos pensado desarrollar una aplicación móvil que permita encontrar lugares como centros de salud, farmacias, clínicas en una ciudad, haciendo uso de Beacons.
    La problemática es que en la ciudad hay bajísima conectividad móvil que no permite navegar en google maps, waze, etc. Es por ello, que queremos apoyarnos en los beacons.
    Sé que los beacons de última generación tienen sensores y protocolos de comunicación más allá del Bluetooth. Te ruego me ayudes a resolver algunas dudas.

    – Si deseo usar el sensor de temperatura del beacon, ¿tiene el beacon que conectarse a internet?
    – Podrías explicarme ¿cómo podría conectar el beacon a la aplicación? Si tuvieras un esquema de cómo podría comunicarse beacon-aplicación-servidor.
    – ¿Consideras que el beacon es la mejor solución para este tipo de proyectos?
    – Dado que hay zonas alejadas donde el beacon puede ser sustraído, ¿se podría enterrarlo o de qué maneras se puede ocultar en zonas abiertas?

    De antemano, muchas gracias.

Angel H.

Tecnófilo irreparable y lector insaciable. Ingeniero de Telecomunicaciones y Product Manager. +10 años de experiencia en proyectos de Software, Cloud e Ingeniería de Redes. Me apasiona el DIY, la tecnología Blockchain y las Finanzas.

Suscríbete

¡Sácale el máximo partido a BorrowBits!

Apúntate para seguir recibir por email las nuevas publicaciones, noticias sobre Blockchain pre-filtradas y material exclusivo para suscriptores. De momento es gratis:

{subscription_form_1}

Categorías

Bits del pasado

Sitio patrocinado por:

JitKey rentabilización apartamentos turísticos

JITKey.- Startup enfocada en la gestión de alojamientos turísticos.