Recentemente, isso me chamou a atenção quando encontrei um vídeo incrível no Youtube:
Micheal E. Anderson: Comparando técnicas de mensagens para a IoT, OpenIoTSummit, Linux Foundation .
Os slides da palestra estão disponíveis aqui
Nos slides 26 e 41 minutos do vídeo, ele está discutindo sobre como (deixe-me parafrasear):
As operadoras de celular preferem que seus consumidores de IoT usem mensagens do tipo HTML , XML ou JSON, pois consomem mais dados. Mais dados significa que eles podem cobrar dos consumidores mais dinheiro pelo serviço.
Eu entendo que muitos protocolos proprietários viz. SigFox , Wireless HART ou Z Wave têm taxas de dados mais baixas e o envio de dados volumosos por essas operadoras pode ser um assunto caro.
Questão
Existem outros formatos de mensagens leves que estão sendo usados para uso em protocolos proprietários, o que os torna soluções econômicas para os consumidores atuais e futuros de IoT? (Filmado no escuro: algum formato chamado XML ou HTML leve ou JSON está em algum lugar?)
Talvez algo como o CBOR seja ou talvez usado?
fonte
Respostas:
Você está perguntando sobre o protocolo ou o formato da mensagem ? Geralmente, usamos incorretamente o termo protocolo quando entendemos o formato dos dados. Eu mesmo faço isso, geralmente porque a distinção não é clara para todos.
Os protocolos de mensagens usados na IoT tendem a ser bastante compactos, pelo menos mais que o http, e oferecem recursos significativos que são importantes nas mensagens (sessões, controle de fluxo, confiabilidade, etc.). O formato da mensagem é o de dados na mensagem que é enviada. Suponho que é sobre isso que você está perguntando.
O formato de mensagem mais compacto é um formato binário enrolado à mão cuidadosamente considerado. É freqüentemente usado em cenários de baixa largura de banda quando você deseja enviar alguns bytes e sabe exatamente como eles são. Para mensagens maiores, as desvantagens são significativas e, em geral, devem ser evitadas a todo custo.
Fiz uma avaliação detalhada de muitas opções diferentes de serialização de dados. Eu esperava que o protobuf, messagepack fosse bastante compacto, o que eram. No entanto, meu segundo problema foi encontrar bibliotecas mantidas e disponíveis em várias plataformas diferentes, incluindo C no dispositivo.
O formato em que me acomodei, surpreendentemente, foi o JSON compactado com gzip. É fácil de implementar e entender, roda em qualquer lugar e, com os dados que eu estava usando, era praticamente o mesmo, ou menor, que outros métodos.
Lembre-se também de que, se você tiver um canal seguro como o TLS, consumirá uma grande quantidade de dados (> 6 KB) nos handshakes do TLS.
Há alguns anos, eu esperava que um formato como os buffers de protocolo dominasse, mas realmente não aconteceu muita coisa. Provavelmente devido à facilidade com que o json pode ser gravado e analisado (e compactado). Gosto da aparência dos Flatbuffers , mas a vantagem é mais na velocidade de análise do que em ser compacta.
Como você está na fase de investigação, sugiro que você escreva um pouco de código em cada um, usando dados típicos da sua situação, e faça algumas comparações. Ter dados concretos ao iniciar ajuda a confirmar suas escolhas.
fonte
A grande vantagem de um formato baseado em marcação é que você mantém a flexibilidade na escolha de quais dados você transmite. Isso é extremamente importante em um ecossistema em evolução, em que você antecipa um serviço em evolução ao longo de vários anos de desenvolvimento.
Embora uma estrutura de dados binários rigidamente codificada seja eficiente para transmitir, você precisa decidir antecipadamente, no mínimo, como será a estrutura. Quando, mais tarde, você perceber que mesmo um campo precisa de expansão, você ficará preso. Mesmo a implantação de uma atualização para o protocolo é difícil, pois você não pode obsoleta uma codificação antiga até que cada terminal seja atualizado.
Isso sugere que a abordagem ideal é misturar pacotes minimalistas e codificação baseada em marcação (usando o último como um fallback). O valor disso depende das cargas úteis de largura de banda mais altas. Se você já está transferindo trechos com tamanho de vídeo frequentes, otimizar os dados de controle pouco frequentes vale menos a pena. Se você tem pequenas transferências frequentes (talvez uma temperatura), faz sentido minimizar a sobrecarga na transmissão - mas talvez apenas a remessa das transferências seja tão boa.
fonte