¿XMPP tiene una gran sobrecarga para los dispositivos IoT que envían mensajes cortos y frecuentes?


10

He estado leyendo sobre XMPP como un posible protocolo de comunicaciones para dispositivos IoT pero, después de leer una fuente, no estoy seguro de si realmente es un protocolo apropiado si le preocupa la sobrecarga de cada mensaje.

Esta fuente dice:

Sin embargo, XMPP tiene una serie de problemas que lo hacen algo indeseable para PROTOCOLOS DE IOT INTEGRADOS. Como protocolo basado en XML, XMPP es muy detallado, incluso más que HTTP, y tiene una gran sobrecarga de datos. Un solo intercambio de solicitud / respuesta para enviar un byte de datos desde un DISPOSITIVO CONECTADO IOT al servidor es más de 0.5 kB.

Hay un borrador de especificación que comprimiría XMPP usando una codificación XML llamada Intercambio XML eficiente (EXI). Pero incluso con EXI, el mismo byte de datos obtiene cientos de bytes de sobrecarga de protocolo solo de XMPP. EXI también es un formato mucho más difícil de procesar que otras opciones ahora disponibles. Debido a estos problemas inherentes, generalmente se recomienda evitar el uso de XMPP en aplicaciones IoT integradas.

Sin embargo, XMPP se promociona a sí mismo como adecuado para aplicaciones de IoT (aunque no dice específicamente que es de bajo costo), por lo que parece extraño que se recomiende / promueva un protocolo tan grande y aparentemente detallado para dispositivos IoT.

¿Es la sobrecarga de XMPP realmente tan grande como sugiere la fuente para pequeñas cantidades de datos? Por ejemplo, ¿cuánta sobrecarga habría al enviar un mensaje de 8 bytes?

Además, ¿es tan elevada la sobrecarga si se usa compresión EXI (como se menciona en la fuente)? ¿Esto también vendría con algunas trampas?


44
Interesante pregunta. Si bien no estoy familiarizado con XMPP, es importante tener en cuenta que EXI requiere que ambos puntos finales tengan un esquema sincronizado. Además, el dispositivo IoT tiene que decodificar / decodificar ese xml que en sí mismo parece terriblemente complejo para enviar mensajes de 8 bytes.
Helmar

1
@Helmar, de hecho, con XMPP parece que lo que gana en tamaño de paquete, pierde en complejidad computacional.
Aurora0001

1
Creo que esta pregunta generalmente está bien, pero: "Por ejemplo, ¿cuánto gasto adicional habría al enviar un mensaje de 8 bytes cada 2 minutos?" -> Los "dos minutos" son tangenciales y propensos a desviar las cosas. Lo que realmente está preguntando es cuánta sobrecarga tendría un mensaje de 8 bytes (supongo que si es solo una pieza de datos, lo mismo que un mensaje de 1 byte). En relación con un componente de tiempo, esto simplemente depende del ancho de banda y para cualquiera que contemple el uso de un protocolo de red que debe ser matemática simple.
Ricitos

1
@delicateLatticeworkFever Lo editaré si no crees que sea relevante (no estaba completamente convencido, pero pensé que más detalles es mejor que menos)
Aurora0001

2
Es una sugerencia, sí. Simplemente leyendo, dije: "¿No depende eso de cuánto tiempo tarda un dispositivo completamente no especificado en enviar un número determinado de bytes?" Por ejemplo, si la respuesta es que el mensaje es ~ 0.5 kB, no hay elemento de tiempo en las unidades;) Eso está en el ancho de banda del dispositivo no especificado.
Ricitos

Respuestas:


8

Si bien es justo decir que XML es detallado, eso debería atenuarse con la conciencia de que esta verbosidad no está "sobrecargada" en relación con el contenido, ya que encapsula la semántica; su sobrecarga es sintomática de cualquier protocolo que enfatiza una estructura dinámica en lugar de estática. Por ejemplo, HTML es realmente una forma relajada de XML que transmite contenido con una estructura dinámica, estructura que podría considerarse un aspecto del contenido. Puede distinguir el contenido de una tabla de la tabla en sí, pero el hecho de que el contenido sean datos tabulares con relaciones específicas es parte integral del contenido; Si solo tomé cada celda y la transmití como una cadena larga, esa estructura y esas relaciones se han ido, y entonces he perdido información y ¿no es ese contenido?

Consideremos un mensaje de 8 bytes que podría constituir algunos datos tabulares. Si uso un protocolo muy estático, podría, como mínimo, transmitirlo sin sobrecarga adicional simplemente definiendo un protocolo como este:

  • Cada mensaje tiene exactamente 8 bytes, por lo que no necesitamos indicar la longitud ni incluir ninguna secuencia de terminación.
  • Los ocho bytes siempre se toman para referirse a una cuadrícula de 2 x 2 donde cada celda contiene un valor de 16 bits.

Si todos mis mensajes son exactamente así, usar XML, HTML o XMPP podría considerarse una tontería: estoy desperdiciando el ancho de banda en componentes estructurales que siempre son iguales y predeterminados de todos modos, y desperdiciando el tiempo de cálculo correspondiente en ambos extremos para crearlo y analizarlo. Una página HTML adecuada y mínima que contenga solo una tabla de 2 x 2 con un par de caracteres en cada celda probablemente tendrá al menos 100 bytes para acomodar el formato y la sobrecarga del protocolo.

Sin embargo, si no todos mis mensajes son exactamente eso, entonces especificar qué tipo de mensaje es no puede ser una parte literal de la "carga útil", pero es un componente necesario, en cuanto al contenido. Podría hacerlo con solo dos bytes adicionales e introducir mucho más dinamismo:

  • Los mensajes ahora son de longitud variable, 0-255 bytes, y el primer byte indica la longitud.
  • Hay (hasta) 256 códigos para diferentes tipos de mensajes predefinidos, uno de los cuales es "tabla 2 x 2", ese es el segundo byte.

Ahora mis 8 bytes de contenido de tabla requieren 2 bytes de sobrecarga, pero hay un rango mucho más amplio de posibilidades en términos de qué tipo de mensajes se pueden enviar con este protocolo personalizado.

Todavía no está cerca de las posibilidades de una página HTML o una especificación de espacio de nombres XML (o conjunto de ellas, que es lo que XMPP es esencialmente ).

Entonces, en base a eso, si principalmente lo que está haciendo es enviar mensajes simples de 8 bytes, XMPP probablemente sea excesivo. Sin embargo, no necesariamente tanto. La afirmación de que "un solo intercambio de solicitud / respuesta para enviar un byte de datos de un DISPOSITIVO CONECTADO IOT al servidor es más de 0.5 kB" me parece, mirando al RFC relevante , una exageración potencial (pero no, todos Lo que hice fue echarle un vistazo, nunca he implementado o usado XMPP). No dudo que pueda construir un ejemplo de eso, pero probablemente no sea un ejemplo mínimo .

Dado que el protocolo está orientado a TCP, el establecimiento de "una secuencia XML calificada por el espacio de nombres 'jabber: client'" solo debe considerarse parte del mensaje si estamos haciendo una sola cosa: el dispositivo contacta a un servidor para enviar 8 bytes, envía los datos, se desconecta. Si la relación es más persistente, lo que a menudo sería en un contexto de IoT, entonces podemos suponer que el dispositivo ya tiene una conexión establecida con el destino. En este caso, si el destino final del mensaje es el servidor (a diferencia de otro cliente al que el servidor va a transmitir el mensaje), la sobrecarga del protocolo es potencialmente mínima.

<message><body>8 bytes.</body></message>

Un mísero 33 bytes de "gastos generales". Vale la pena señalar aquí que XML es texto, por lo que si sus mensajes son a menudo binarios, será mucho menos apropiado, ya que esos datos deben codificarse (por ejemplo, en base64 ), lo que agrega más gastos generales y computacionales. requisitos

Entonces, en última instancia:

¿XMPP tiene una gran sobrecarga para los dispositivos IoT que envían mensajes cortos y frecuentes?

Si hay una conexión persistente y los mensajes están en gran parte desestructurados, no lo creo. Sin embargo, si no necesita lo que ofrece (el dinamismo con respecto a la estructura), entonces probablemente haya metodologías más apropiadas.

Busque eso, si tenemos un contexto en el que un único servidor central está procesando y / o confiando mensajes entre una variedad de dispositivos, a pesar de que lo que esté haciendo cualquiera de esos dispositivos puede ser siempre simple y directo, un protocolo que puede encapsular un variedad de mensajes aún sería útil. Si un dispositivo cliente tiene recursos limitados, podemos codificar gran parte del protocolo, y ajustar cada mensaje desde ese extremo se convierte en una tarea muy simple; Creo que muchos dispositivos IoT que implementan servidores HTTP hacen eso (que es lo contrario de "clientes simples, servidor complejo"). Esos servidores no pueden manejar ningún tipo de solicitud HTTP (excepto a través del rechazo preformateado) y tienen un conjunto muy bien definido y enfocado de cosas que las cosas harán y las respuestas que enviarán, pero como no obstante funcionan correctamente como servidores HTTP,


3

En primer lugar, debo decir que XML se ha utilizado para encapsular mensajes en tiempo real con cierto éxito, y a gran escala, en particular para comunicar IM y presencia en XMPP. También parece haber algunas compañías que tienen la intención de aprovechar su conocimiento XML para tratar de encontrar otra área de aplicación para este sistema de representación de datos.

Sin embargo, no todos están convencidos de que XML sea la respuesta a todo en los sistemas de mensajería. Por ejemplo, en los últimos años ha habido un cambio notable hacia sistemas en línea que usan JSON como una forma de serializar datos en lugar de XML, y si me pongo el sombrero de desarrollador por un momento, diría que las herramientas para codificar / decodificar desde nativo La representación (por ejemplo, en Python, PHP, Javascript) parece mucho más fácil de usar que para JSON que sus equivalentes para XML, incluso si XML ha tenido más tiempo para obtener las respuestas correctas.

XML es una representación difícil de manejar para las computadoras, ya que necesita un analizador de texto relativamente complejo y luego algún tipo de representación jerárquica para permitir que sus datos se extraigan en un programa. Debido a que hay mucho texto involucrado, necesita bastante memoria disponible para codificar / decodificar.

A menudo parece poco claro que XML está agregando mucho valor a la representación de los datos: si el mensaje central no es profundamente jerárquico, entonces agregar mucha paja textual parece innecesario, pero paradójicamente si hay mucha jerarquía, entonces decodifica el mensaje desde su representación textual será un trabajo duro y necesitará muchos recursos. Además, el beneficio de representar en texto no me resulta claro: cuando escribimos y depuramos por primera vez los sistemas de comunicación, es común usar herramientas de monitoreo / decodificación (por ejemplo, Wireshark) para ayudarnos a descubrir qué está sucediendo mal. A largo plazo, todo funciona bien, y ningún ser humano tendrá que mirar en detalle los mensajes que van y vienen (solo computadoras). Las computadoras prefieren la representación binaria. La representación textual no beneficia a nadie involucrado en ninguna etapa del despliegue.

XML es difícil de leer para los humanos (y construir manualmente) mientras que es un trabajo duro para las computadoras al mismo tiempo; Por lo tanto, es un sistema que no es adecuado para computadoras ni para humanos.

Es importante destacar que IoT tiene algunas restricciones especiales que hacen que sea deseable ser eficiente. Los dispositivos IoT generalmente tendrán una capacidad de procesamiento y almacenamiento limitados (generalmente no hay almacenamiento secundario a gran escala, solo algo de RAM y EEPROM). Un dispositivo IoT podría tener los enlaces de comunicación más simples posibles, tal vez ni siquiera una pila TCP / IP. Habrá una amplia variedad de diseños de microcontroladores, ni siquiera al nivel de sofisticación donde se utilizaría un sistema operativo estándar (por ejemplo, Linux, Android); Esto limita la cantidad de herramientas disponibles que ofrecerán interfaces XML fáciles de usar.

En resumen, sospecho que con IoT, es mejor dejar la representación de datos caso por caso, dependiendo de las restricciones de hardware, estilo de comunicación (por ejemplo, difusión, datagrama, confiable, etc.), frecuencia de comunicación, etc. XML ciertamente no debe considerarse como una condición sine qua non para IoT.


3
  1. Hace muchos años analicé la diferencia por usar

    XML en la red de pago para la representación de la transacción de pago (número de tarjeta, fecha, hora, terminal_id y lista de elementos adicionales) en comparación con los tradicionales

    bit- maped ISO8583

  2. XML tiene una gran sobrecarga. Si considera el impacto en las redes con más de 10000 nodos, cada uno de ellos envía más de 10 mensajes por hora / día al host central, entonces XML se apaga y realmente necesita algo más eficiente.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.