XMPP a-t-il une surcharge importante pour les appareils IoT qui envoient des messages courts et fréquents?


10

J'ai lu sur XMPP en tant que protocole de communication potentiel pour les appareils IoT mais, après avoir lu une source, je ne sais pas si c'est vraiment un protocole approprié si vous êtes préoccupé par la surcharge de chaque message.

Cette source déclare:

Cependant, XMPP a un certain nombre de problèmes qui le rendent quelque peu indésirable pour les PROTOCOLES IOT INTÉGRÉS. En tant que protocole basé sur XML, XMPP est très verbeux, encore plus que HTTP, et a une surcharge de données importante. Un seul échange de demande / réponse pour envoyer un octet de données d'un DISPOSITIF CONNECTÉ IOT au serveur est supérieur à 0,5 Ko.

Il existe un projet de spécification qui compresserait XMPP à l'aide d'un codage XML appelé échange XML efficace (EXI). Mais même avec EXI, le même octet de données obtient des centaines d'octets de surcharge de protocole de XMPP seul. EXI est également un format beaucoup plus difficile à traiter que les autres options actuellement disponibles. En raison de ces problèmes inhérents, il est généralement recommandé d'éviter d'utiliser XMPP dans les applications IoT intégrées.

Cependant, XMPP se présente comme convenant aux applications IoT (bien qu'il ne dise pas spécifiquement qu'il est faible), il semble donc étrange qu'un protocole aussi volumineux et apparemment verbeux soit recommandé / promu pour les appareils IoT.

Les frais généraux de XMPP sont-ils vraiment aussi importants que la source le suggère pour de petites quantités de données? Par exemple, combien de temps y aurait-il lors de l'envoi d'un message de 8 octets?

En outre, la surcharge est-elle si grande si la compression EXI est utilisée (comme mentionné dans la source)? Est-ce que cela viendrait aussi avec quelques pièges?


4
Question interessante. Bien que je ne connaisse pas XMPP, il est important de noter que EXI nécessite que les deux points d'extrémité aient un schéma qui doit être synchronisé. Le périphérique IoT doit également encoder / décoder ce xml qui semble en soi terriblement complexe pour l'envoi de messages de 8 octets.
Helmar

1
@Helmar en effet, avec XMPP cela ressemble à ce que vous gagnez en taille de paquet, vous perdez en complexité de calcul.
Aurora0001

1
Je pense que cette question est généralement bien, mais: "Par exemple, combien de temps y aurait-il lors de l'envoi d'un message de 8 octets toutes les 2 minutes?" -> Le "deux minutes" est tangentiel et enclin à égarer les choses. Ce que vous demandez vraiment, c'est la quantité de surcharge qu'un message de 8 octets aurait (je suppose que s'il ne s'agit que d'une seule donnée, la même chose qu'un message de 1 octet). En ce qui concerne une composante temporelle, cela dépend simplement de la bande passante et de quiconque envisage d'utiliser un protocole réseau qui doit être un calcul simple.
goldilocks

1
@delicateLatticeworkFever Je le modifierai si vous ne pensez pas que cela soit pertinent (je n'étais pas entièrement convaincu mais je pensais que plus de détails
valaient

2
C'est une suggestion, oui. Juste en lisant que je suis allé, "cela ne dépend-il pas du temps qu'il faut à un périphérique complètement non spécifié pour envoyer un nombre déterminé d'octets?" Par exemple, si la réponse est que le message est ~ 0,5 ko, il n'y a pas d'élément de temps dans les unités;) C'est dans la bande passante de l'appareil non spécifié.
goldilocks

Réponses:


8

Bien qu'il soit juste de dire que XML est verbeux, cela devrait être tempéré en sachant que cette verbosité n'est pas entièrement «indirecte» par rapport au contenu car elle encapsule la sémantique; c'est la surcharge qui est symptomatique de tout protocole qui met l'accent sur une structure dynamique par opposition à une structure statique. Par exemple, le HTML est vraiment une forme détendue de XML qui transmet le contenu avec une structure dynamique, structure qui pourrait être considérée comme un aspect du contenu. Vous pouvez distinguer le contenu d'une table de la table elle-même, mais le fait que le contenu soit des données tabulaires avec des relations spécifiques fait partie intégrante du contenu; si je prenais chaque cellule et transmettais le tout comme une longue chaîne, cette structure et ces relations disparaissent, et donc j'ai perdu des informations et n'est-ce pas du contenu?

Prenons un message de 8 octets qui pourrait constituer des données tabulaires. Si j'utilise un protocole très statique, je pourrais, au minimum, le transmettre sans surcharge supplémentaire simplement en définissant un protocole comme celui-ci:

  • Chaque message fait exactement 8 octets, nous n'avons donc pas besoin d'indiquer la longueur ni d'inclure de séquence de terminaison.
  • Les huit octets sont toujours considérés comme faisant référence à une grille 2 x 2 où chaque cellule contient une valeur de 16 bits.

Si tous mes messages sont exactement comme ça, l'utilisation de XML, HTML ou XMPP peut être considérée comme stupide - je gaspille de la bande passante sur des composants structurels qui sont toujours les mêmes et prédéterminés de toute façon, et je perds le temps de calcul correspondant aux deux extrémités pour le créer et l'analyser. Une page HTML minimale et appropriée qui contient juste un tableau 2 x 2 avec quelques caractères dans chaque cellule va probablement faire au moins 100 octets pour prendre en charge la mise en forme et la surcharge du protocole.

Cependant, si tous mes messages ne sont pas exactement cela, alors spécifier de quel type de message il s'agit peut ne pas être une partie littérale de la "charge utile" mais c'est un composant nécessaire, en termes de contenu. Je pourrais le faire avec seulement deux octets supplémentaires et introduire beaucoup plus de dynamisme:

  • Les messages sont désormais de longueur variable, de 0 à 255 octets, et le premier octet indique la longueur.
  • Il existe (jusqu'à) 256 codes pour différents types de messages prédéfinis, dont l'un est "tableau 2 x 2", c'est le deuxième octet.

Maintenant, mes 8 octets de contenu de table nécessitent 2 octets de surcharge, mais il existe un éventail beaucoup plus large de possibilités en termes de types de messages pouvant être envoyés avec ce protocole personnalisé.

C'est encore loin des possibilités d'une page HTML ou d' une spécification d' espace de noms XML (ou un ensemble de celles-ci, ce qui est essentiellement XMPP ).

Donc, sur cette base, si la plupart du temps ce que vous faites envoie des messages simples de 8 octets, XMPP est probablement exagéré. Cependant, pas nécessairement tant que ça. L'affirmation selon laquelle "un seul échange de demande / réponse pour envoyer un octet de données d'un DISPOSITIF CONNECTÉ IOT au serveur est supérieur à 0,5 Ko" me semble, en regardant le RFC pertinent , être une exagération potentielle (mais nb, tous Je l'ai regardé, je n'ai jamais implémenté ou utilisé XMPP). Je ne doute pas que vous puissiez en construire un exemple, mais ce n'est probablement pas un exemple minimal .

Étant donné que le protocole est orienté TCP, l'établissement d'un "flux XML qualifié par l'espace de noms 'jabber: client'" ne doit être considéré comme faisant partie du message que si nous faisons une chose - l'appareil contacte un serveur pour envoyer 8 octets à, envoie les données, déconnecte. Si la relation est plus persistante, ce qui serait souvent le cas dans un contexte IoT, nous pouvons supposer que le périphérique dispose déjà d'une connexion établie avec la destination. Dans ce cas, si la destination ultime du message est le serveur (contrairement à un autre client auquel le serveur va transmettre le message), la surcharge du protocole est potentiellement minime.

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

Un maigre 33 octets de "surcharge". Il convient de souligner ici que XML est du texte, et donc si vos messages sont souvent binaires, cela deviendra beaucoup moins approprié, car ces données doivent être codées (par exemple, en base64 ), ce qui ajoute des frais généraux et des calculs supplémentaires. exigences.

Donc, finalement:

XMPP a-t-il une surcharge importante pour les appareils IoT qui envoient des messages courts et fréquents?

S'il y a une connexion persistante et que les messages sont en grande partie non structurés, je ne pense pas. Cependant, si vous n'avez pas besoin de ce qu'elle offre (le dynamisme en matière de structure), alors il y a probablement des méthodologies plus appropriées.

Poursuivez cela, si nous avons un contexte où un seul serveur central traite et / ou utilise des messages entre divers appareils, même si ce que fait l'un de ces appareils peut toujours être simple et direct, un protocole qui peut encapsuler un une variété de messages serait toujours utile. Si un appareil client a des ressources limitées, nous pouvons coder en dur une grande partie du protocole, et encapsuler chaque message à cette fin devient une tâche très simple; Je pense que de nombreux appareils IoT qui déploient des serveurs HTTP font cela (ce qui est l'inverse de "clients simples, serveur complexe"). Ces serveurs ne peuvent pas gérer tout type de requête HTTP (sauf via un rejet préformaté) et ont un ensemble de choses très bien défini et ciblé que les choses feront et les réponses qu'ils enverront, mais puisqu'ils fonctionnent néanmoins correctement comme serveurs HTTP,


3

Tout d'abord, je dois dire que XML a été utilisé pour encapsuler des messages en temps réel avec un certain succès, et à grande échelle, en particulier pour communiquer la messagerie instantanée et la présence dans XMPP. Il semble également que certaines entreprises ont l'intention de tirer parti de leurs connaissances XML pour essayer de trouver un autre domaine d'application pour ce système de représentation des données.

Cependant, tout le monde n'est pas convaincu que XML est la réponse à tout dans les systèmes de messagerie. Par exemple, il y a eu un changement notable ces dernières années vers les systèmes en ligne qui utilisent JSON comme un moyen de sérialiser les données plutôt que XML, et si je mets mon chapeau de développeur pendant un moment, je dirais que les outils pour encoder / décoder à partir de natif la représentation (par exemple en Python, PHP, Javascript) semble beaucoup plus facile à utiliser que pour JSON que leurs équivalents pour XML, même si XML a eu plus de temps pour obtenir ces bonnes réponses.

XML est une représentation difficile à gérer pour les ordinateurs, car il a besoin d'un analyseur de texte relativement complexe, puis d'une sorte de représentation hiérarchique pour permettre d'extraire ses données dans un programme. Parce qu'il y a tellement de texte impliqué, vous avez besoin de beaucoup de mémoire disponible pour l'encodage / décodage.

Souvent, il ne semble pas clair que XML ajoute beaucoup de valeur à la représentation des données: si le message principal n'est pas profondément hiérarchique, ajouter beaucoup de paillettes textuelles semble inutile, mais paradoxalement s'il y a beaucoup de hiérarchie, puis décoder le message à partir de sa représentation textuelle va être un travail difficile et nécessitera beaucoup de ressources. De plus, les avantages de la représentation dans le texte ne sont pas clairs pour moi: lorsque nous écrivons et déboguons des systèmes de communication pour la première fois, il est courant d'utiliser des outils de surveillance / décodage (par exemple Wireshark) pour nous aider à comprendre ce qui ne va pas. À long terme, tout fonctionne bien, et aucun humain n'aura besoin de regarder en détail les messages qui vont et viennent (uniquement les ordinateurs). Les ordinateurs préfèrent la représentation binaire. La représentation textuelle ne profite à personne à aucun stade du déploiement.

XML est difficile à lire (et à construire manuellement) pour les humains tout en étant difficile pour les ordinateurs en même temps; Il s'agit donc d'un système qui ne convient ni aux ordinateurs ni aux humains.

Il est important de noter que l'IoT a certaines contraintes spéciales qui rendent souhaitable d'être efficace. Les appareils IoT auront généralement une puissance de traitement et un stockage limités (généralement pas de stockage secondaire à grande échelle, seulement une partie de la RAM et de l'EEPROM). Un appareil IoT peut avoir les liaisons de communication les plus simples possibles, peut-être même pas une pile TCP / IP. Il y aura une grande variété de conceptions de microcontrôleurs, pas même au niveau de sophistication où un système d'exploitation standard (par exemple Linux, Android) serait utilisé; cela limite le nombre d'outils disponibles sur le marché qui offriront des interfaces XML faciles à utiliser.

En résumé, je soupçonne qu'avec l'IoT, il vaut mieux laisser la représentation des données au cas par cas, en fonction des contraintes matérielles, du style de communication (par exemple, diffusion, datagramme, fiable, etc.), de la fréquence de communication, etc. XML ne doit certainement pas être considéré comme une condition sine qua non pour l'IoT.


3
  1. Il y a plusieurs années, j'ai analysé la différence d'utilisation

    XML dans le réseau de paiement pour la représentation des transactions de paiement (numéro de carte, date, heure, terminal_id et liste des éléments supplémentaires) en comparaison avec le traditionnel

    bitmap ISO8583

  2. XML a d'énormes frais généraux. Si vous considérez l'impact dans les réseaux de plus de 10000 nœuds, chacun d'eux envoyant plus de 10 messages toutes les heures / jour à l'hôte central, alors XML disparaît et vous avez vraiment besoin de quelque chose de plus efficace.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.