O XMPP possui uma grande sobrecarga para dispositivos de IoT que enviam mensagens curtas e frequentes?


10

Eu tenho lido sobre o XMPP como um protocolo de comunicação em potencial para dispositivos IoT, mas, depois de ler uma fonte, não tenho certeza se é realmente um protocolo apropriado se você estiver preocupado com a sobrecarga de cada mensagem.

Esta fonte afirma:

No entanto, o XMPP tem vários problemas que o tornam um pouco indesejável para PROTOCOLOS IOT EMBUTIDOS. Como um protocolo baseado em XML, o XMPP é muito detalhado, ainda mais que o HTTP, e possui sobrecarga de dados pesada. Uma única troca de solicitação / resposta para enviar um byte de dados de um DISPOSITIVO IOT CONECTADO ao servidor é superior a 0,5 kB.

Há um rascunho de especificação que comprimiria o XMPP usando uma codificação XML chamada eficiente XML Interchange (EXI). Mas, mesmo com o EXI, o mesmo byte de dados obtém centenas de bytes de sobrecarga de protocolo somente do XMPP. O EXI também é um formato muito mais difícil de processar do que outras opções agora disponíveis. Devido a esses problemas inerentes, geralmente é recomendável evitar o uso do XMPP em aplicativos IoT incorporados.

No entanto, o XMPP se promove como adequado para aplicativos de IoT (embora não diga especificamente que é uma sobrecarga baixa), portanto, parece estranho que um protocolo tão grande e aparentemente detalhado seja recomendado / promovido para dispositivos de IoT.

A sobrecarga do XMPP é realmente tão grande quanto a fonte sugere para pequenas quantidades de dados? Por exemplo, quanto sobrecarga haveria ao enviar uma mensagem de 8 bytes?

Além disso, a sobrecarga é tão grande se a compactação EXI for usada (conforme mencionado na fonte)? Isso também viria com algumas armadilhas?


4
Pergunta interessante. Embora eu não esteja familiarizado com o XMPP, é importante observar que o EXI exige que os dois pontos de extremidade tenham um esquema que deve ser sincronizado. Além disso, o dispositivo IoT precisa codificar / decodificar o xml, que parece por si só muito complexo para o envio de mensagens de 8 bytes.
Helmar

11
@ Helmar de fato, com o XMPP parece o que você ganha em tamanho de pacote, perde em complexidade computacional.
Aurora0001

11
Acho que essa pergunta geralmente é boa, mas: "Por exemplo, quanto sobrecarga haveria ao enviar uma mensagem de 8 bytes a cada 2 minutos?" -> Os "dois minutos" são tangenciais e propensos a desviar as coisas. O que você realmente está perguntando é quanto sobrecarga uma mensagem de 8 bytes teria (eu acho, se for apenas uma parte dos dados, o mesmo que uma mensagem de 1 byte). Em relação a um componente de tempo, isso é simplesmente dependente da largura de banda e para qualquer pessoa que esteja pensando em usar um protocolo de rede que deve ser uma matemática simples.
Goldilocks

11
@delicateLatticeworkFever vou editá-lo para fora se você não acha que ele é relevante (eu não estava totalmente convencido, mas eu pensei mais detalhes é melhor do que menos)
Aurora0001

2
É uma sugestão, sim. Acabei de ler que eu disse: "Isso não depende de quanto tempo leva para um dispositivo completamente não especificado enviar um número determinado de bytes?" Por exemplo, se a resposta for que a mensagem é ~ 0,5 kB, não há elemento de tempo nas unidades;) Isso está na largura de banda do dispositivo não especificado.
Goldilocks

Respostas:


8

Embora seja justo dizer que o XML é detalhado, isso deve ser moderado com a consciência de que essa verbosidade não é toda "sobrecarga" em relação ao conteúdo, uma vez que encapsula a semântica; é uma sobrecarga sintomática de qualquer protocolo que enfatize uma dinâmica em oposição à estrutura estática. Por exemplo, o HTML é realmente uma forma relaxada de XML que transmite conteúdo com uma estrutura dinâmica, estrutura que pode ser considerada um aspecto do conteúdo. Você pode distinguir o conteúdo de uma tabela da própria tabela, mas o fato de o conteúdo ser dados tabulares com relações específicas é essencial para o conteúdo; se eu pegasse cada célula e transmitisse tudo como uma cadeia longa, essa estrutura e esses relacionamentos desapareceriam, e então eu perdi informações e esse conteúdo não é?

Vamos considerar uma mensagem de 8 bytes que possa constituir alguns dados de tabela. Se eu usar um protocolo muito estático, eu poderia, no mínimo, transmitir isso sem sobrecarga adicional simplesmente definindo um protocolo como este:

  • Cada mensagem tem exatamente 8 bytes, portanto, não precisamos indicar o comprimento ou incluir nenhuma sequência final.
  • Os oito bytes são sempre usados ​​para se referir a uma grade 2 x 2, em que cada célula contém um valor de 16 bits.

Se todas as minhas mensagens são exatamente assim, o uso de XML, HTML ou XMPP pode ser considerado bobo - estou desperdiçando largura de banda em componentes estruturais que são sempre os mesmos e predeterminados de qualquer maneira, e desperdiçando o tempo de computação correspondente nas duas extremidades, criando e analisando-o. Uma página HTML mínima e adequada que contenha apenas uma tabela 2 x 2 com alguns caracteres em cada célula provavelmente terá pelo menos 100 bytes para acomodar a sobrecarga de formatação e protocolo.

No entanto, se nem todas as minhas mensagens forem exatamente isso, especificar o tipo de mensagem que pode não ser uma parte literal da "carga útil", mas é um componente necessário em termos de conteúdo. Eu poderia fazer isso com apenas dois bytes extras e introduzir muito mais dinamismo:

  • As mensagens agora têm comprimento variável, 0 a 255 bytes e o primeiro byte indica o comprimento.
  • Existem (até) 256 códigos para diferentes tipos de mensagens predefinidos, um dos quais é "tabela 2 x 2", que é o segundo byte.

Agora, meus 8 bytes de conteúdo da tabela exigem 2 bytes de sobrecarga, mas há uma gama muito maior de possibilidades em termos de que tipos de mensagens podem ser enviadas com esse protocolo personalizado.

Ainda não está nem perto das possibilidades de uma página HTML ou especificação de namespace XML (ou conjunto dela, que é essencialmente o XMPP ).

Portanto, com base nisso, se você está enviando mensagens simples de 8 bytes, o XMPP provavelmente é um exagero. No entanto, não necessariamente tanto assim. A alegação de que "uma única troca de solicitação / resposta para enviar um byte de dados de um DISPOSITIVO IOT CONNECTED para o servidor é superior a 0,5 kB" parece-me, olhando para a RFC relevante , um exagero em potencial (mas nb, tudo Eu fiz é olhar para ele, eu nunca implementei ou usei XMPP). Não duvido que você possa construir um exemplo disso, mas esse provavelmente não é um exemplo mínimo .

Como o protocolo é orientado para TCP, o estabelecimento de "um fluxo XML qualificado pelo namespace 'jabber: client'" só precisa ser considerado parte da mensagem se estivermos fazendo uma coisa única - o dispositivo entra em contato com um servidor para enviar 8 bytes, envia os dados, desconecta. Se o relacionamento for mais persistente, o que normalmente ocorreria em um contexto de IoT, podemos assumir que o dispositivo já possui uma conexão estabelecida com o destino. Nesse caso, se o destino final da mensagem for o servidor (em oposição a outro cliente para o qual o servidor passará a mensagem), a sobrecarga do protocolo será potencialmente mínima.

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

Um mísero 33 bytes de "overhead". Vale ressaltar aqui que XML é texto e, portanto, se suas mensagens são frequentemente binárias, isso se tornará muito menos apropriado, porque esses dados precisam ser codificados (por exemplo, para base64 ), o que adiciona mais sobrecarga e computação. requisitos.

Então, finalmente:

O XMPP possui uma grande sobrecarga para dispositivos de IoT que enviam mensagens curtas e frequentes?

Se houver uma conexão persistente e as mensagens não forem estruturadas, acho que não. No entanto, se você não precisa do que ele oferece (o dinamismo em relação à estrutura), provavelmente existem metodologias mais apropriadas.

Em busca disso, se tivermos um contexto em que um único servidor central está processando e / ou confiando mensagens entre uma variedade de dispositivos, mesmo que o que qualquer um desses dispositivos esteja fazendo possa ser sempre simples e direto, um protocolo que pode encapsular um uma variedade de mensagens ainda seria útil. Se um dispositivo cliente tiver recursos limitados, podemos codificar grande parte do protocolo, e agrupar cada mensagem com esse objetivo se tornará uma tarefa muito simples; Acredito que muitos dispositivos de IoT que implantam servidores HTTP fazem isso (que é o inverso de "clientes simples, servidor complexo"). Esses servidores não podem lidar com nenhum tipo de solicitação HTTP (exceto por rejeição pré-formatada) e têm um conjunto muito bem definido e focado de coisas que as coisas farão e respostas que eles enviarão, mas, como funcionam corretamente como servidores HTTP,


3

Antes de tudo, devo dizer que o XML foi usado para encapsular mensagens em tempo real com algum sucesso e em larga escala, principalmente para comunicar mensagens instantâneas e presença no XMPP. Também parece haver algumas empresas que pretendem aproveitar seu conhecimento de XML para tentar encontrar outra área de aplicação para esse sistema de representação de dados.

No entanto, nem todo mundo está convencido de que XML é a resposta para tudo nos sistemas de mensagens. Por exemplo, houve uma mudança perceptível nos últimos anos para sistemas online que usam JSON como uma maneira de serializar dados em vez de XML, e se eu colocar meu chapéu de desenvolvedor por um momento, diria que as ferramentas para codificar / decodificar de a representação (por exemplo, em Python, PHP, Javascript) parece muito mais fácil de usar do que para JSON do que seus equivalentes para XML, mesmo que XML tenha tido mais tempo para acertar essas respostas.

XML é uma representação difícil para os computadores manipular, pois precisa de um analisador de texto relativamente complexo e, em seguida, algum tipo de representação hierárquica para permitir que seus dados sejam extraídos em um programa. Como há muito texto envolvido, você precisa de um pouco de memória disponível para codificação / decodificação.

Freqüentemente, parece claro que XML está agregando muito valor à representação dos dados: se a mensagem principal não for profundamente hierárquica, a adição de uma grande quantidade de texto parece desnecessária, mas paradoxalmente, se houver muita hierarquia, decodificando a mensagem. sua representação textual será um trabalho árduo e precisará de muitos recursos. Além disso, os benefícios de representar em texto não são claros para mim: quando escrevemos e depuramos sistemas de comunicação, é comum usar ferramentas de monitoramento / decodificação (por exemplo, Wireshark) para nos ajudar a descobrir o que está errado. A longo prazo, tudo está funcionando bem, e nenhum ser humano precisará examinar detalhadamente as mensagens que vão e voltam (apenas computadores). Computadores preferem representação binária. A representação textual beneficia ninguém envolvido em qualquer estágio da implantação.

XML é difícil para os humanos lerem (e construírem manualmente) enquanto é um trabalho árduo para computadores ao mesmo tempo; Portanto, é um sistema que não é adequado para computadores e nem para humanos.

É importante ressaltar que a IoT possui algumas restrições especiais que tornam desejável a eficiência. Os dispositivos de IoT normalmente têm capacidade e armazenamento limitados de processamento (geralmente não há armazenamento secundário em larga escala, apenas alguma RAM e EEPROM). Um dispositivo IoT pode ter os links de comunicação mais simples possíveis, talvez nem mesmo uma pilha TCP / IP. Haverá uma grande variedade de designs de microcontroladores, nem mesmo no nível de sofisticação em que um sistema operacional padrão (por exemplo, Linux, Android) estaria em uso; isso limita o número de ferramentas disponíveis no mercado, oferecendo interfaces XML fáceis de usar.

Em resumo, suspeito que, com a IoT, é melhor deixar a representação de dados caso a caso, dependendo das restrições de hardware, estilo de comunicação (por exemplo, transmissão, datagrama, confiável etc.), frequência de comunicação e assim por diante. Certamente, o XML não deve ser pensado como um sine qua non para a IoT.


3
  1. Muitos anos atrás, analisei a diferença ao usar

    XML na rede de pagamento para representação da transação de pagamento (número do cartão, data, hora, terminal_id e lista de elementos adicionais) em comparação com o tradicional

    ISO8583 bit- maped

  2. XML tem uma sobrecarga enorme. Se você considerar o impacto em redes com mais de 10000 nós, cada um deles enviando mais de 10 mensagens por hora / diariamente para o host central, o XML será apagado e você realmente precisará de algo mais eficiente.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.