Чи має XMPP великі накладні витрати на пристрої IoT, що надсилають короткі, часті повідомлення?


10

Я читав про XMPP як потенційний протокол комунікації для пристроїв IoT, але, прочитавши одне джерело, я не впевнений, чи справді це відповідний протокол, якщо ви переймаєтесь накладними витратами на кожне повідомлення.

У цьому джерелі зазначено:

Однак у XMPP є ряд проблем, які роблять дещо небажаними для ВПРОВАДЕНИХ ПРОТКОЛІВ. Як протокол на основі XML, XMPP дуже багатослівний, навіть більше, ніж HTTP, і має великі накладні дані. Один обмін запитом / відповіддю для надсилання одного байта даних з ВІДКЛЮЧЕНОГО ПРИСТРОЮ на сервер становить понад 0,5 кБ.

Існує проект специфікації, який стискав би XMPP за допомогою кодування XML, званого ефективним обміном XML (EXI). Але навіть з EXI, той самий один байт даних отримує сотні байтів накладних даних протоколу лише від XMPP. EXI - це також набагато важчий формат, ніж інші параметри, які зараз доступні. Через ці властиві проблеми, як правило, рекомендується уникати використання XMPP у вбудованих програмах IoT.

Однак XMPP рекламує себе як придатний для додатків IoT (хоча конкретно не говорить про те, що це низькі витрати), тому дивно, що такий великий, здавалося б, багатослівний протокол був би рекомендований / просунутий для пристроїв IoT.

Чи справді накладні витрати XMPP такі великі, як пропонує джерело для невеликих обсягів даних? Наприклад, скільки накладних витрат буде при надсиланні 8-байтного повідомлення?

Також чи великі накладні витрати, якщо використовується стиснення EXI (як зазначено в джерелі)? Чи може це також мати якісь підводні камені?


4
Цікаве запитання. Хоча я не знайомий з XMPP, важливо відзначити, що EXI вимагає, щоб обидві кінцеві точки мали схему, яка повинна бути синхронізованою. Також пристрій IoT повинен перекодувати / декодувати той xml, який сам по собі здається жахливо складним для надсилання 8-байтних повідомлень.
Гельмар

1
@Helmar дійсно, з XMPP це виглядає як те, що ви отримуєте в розмірі пакету, ви втрачаєте обчислювальну складність.
Aurora0001

1
Я думаю, що це питання, як правило, добре, але: "Наприклад, скільки накладних витрат буде при надсиланні 8-байтного повідомлення кожні 2 хвилини?" -> "Дві хвилини" є дотичними і схильні до того, що вони збивають збитки. Те, що ви насправді запитуєте, - скільки накладних повідомлень у 8 байт (я б припустив, якщо це лише один фрагмент даних, такий же, як повідомлення в 1 байті). Що стосується компонента часу, це просто залежить від пропускної здатності та для тих, хто планує використовувати мережевий протокол, який повинен бути мертвим простої математики.
золотинок

1
@delicateLatticeworkЯкщо я відредагую це, якщо ви не вважаєте, що це доречно (я не був повністю переконаний, але думав, що детальніше краще, ніж менше)
Aurora0001

2
Це пропозиція, так. Щойно прочитавши, що я пішов: "Чи не це залежить від того, скільки часу потрібен абсолютно не визначений пристрій для надсилання визначеної кількості байтів?" Наприклад, якщо відповідь полягає в тому, що повідомлення становить ~ 0,5 кБ, в одиницях немає елемента часу;) Це в не визначеній смузі пропускання пристрою.
золотинки

Відповіді:


8

Хоча справедливо сказати, що XML є багатослівним, це слід гартувати з усвідомленням того, що це багатослів’я не все «накладне» щодо змісту, оскільки воно інкапсулює семантику; це накладні витрати, що є симптоматичним для будь-якого протоколу, який підкреслює динаміку на відміну від статичної структури. Наприклад, HTML - це справді розслаблена форма XML, яка передає контент з динамічною структурою, структурою, яку можна вважати аспектом вмісту. Ви можете відрізнити зміст таблиці від самої таблиці, але той факт, що вміст є табличними даними з конкретними співвідношеннями, є невід’ємним змістом; якщо я просто взяв кожну клітинку і передавав все це однією довгою струною, ця структура та ці відносини вже відсутні, і тому я втратив інформацію, і чи не це вміст?

Розглянемо 8-байтне повідомлення, яке може становити деякі табуляційні дані. Якщо я використовую дуже статичний протокол, я міг би, як мінімум, передавати це без додаткових накладних витрат, просто визначивши такий протокол:

  • Кожне повідомлення має рівно 8 байт, тому нам не потрібно вказувати довжину або включати будь-яку завершальну послідовність.
  • Вісім байт завжди приймаються для позначення сітки 2 х 2, де кожна комірка містить 16-бітове значення.

Якщо всі мої повідомлення точно такі, використання XML, HTML або XMPP може вважатися нерозумним - я витрачаю пропускну здатність на структурні компоненти, які завжди однакові і заздалегідь визначені, і витрачаю відповідний час обчислення на обох кінцях, створюючи та аналізуючи їх. Мінімальна, належна HTML-сторінка, що містить лише 2 x 2 таблиці з парою символів у кожній комірці, ймовірно, має становити щонайменше 100 байт для розміщення форматування та протоколу накладних витрат.

Однак якщо не всі мої повідомлення саме такі, то уточнення, яке саме повідомлення може бути, не є буквальною частиною "корисного навантаження", але це необхідний компонент, змістовний. Я міг би зробити це лише з додатковими двома байтами і ввести набагато більше динамізму:

  • Тепер повідомлення мають різну довжину, 0-255 байт, і перший байт вказує довжину.
  • Існує (до) 256 кодів для різних заздалегідь визначених типів повідомлень, один з яких "2 х 2 таблиці", це другий байт.

Зараз мої 8 байт вмісту таблиці потребують 2 байти накладних витрат, але існує набагато ширший спектр можливостей щодо того, які види повідомлень можна надіслати за допомогою цього користувацького протоколу.

Це все ще ніде не наближене до можливостей сторінки HTML або специфікації простору імен XML (або їх набору, що по суті є XMPP ).

Отже, виходячи з цього, якщо в основному те, що ви робите, - це надсилання простих 8-байтних повідомлень, XMPP, ймовірно, надмірний. Однак не обов’язково так багато. Твердження про те, що "один обмін запитом / відповіддю для надсилання одного байта даних з IOT ЗВ'ЯЗАНОГО ПРИСТРОЮ на сервер становить понад 0,5 кБ", мені здається, поглядаючи на відповідний RFC , є потенційним перебільшенням (але nb, все Я поглянув на це, я ніколи не реалізував і не використовував XMPP). Я не сумніваюся, що ви могли побудувати приклад такого, але це, мабуть, не мінімальний приклад.

Оскільки протокол орієнтований на TCP, встановлення "потоку XML, кваліфікованого за допомогою простору імен" jabber: client ", потрібно вважати частиною повідомлення лише в тому випадку, коли ми займаємось одними справами - пристрій зв’язується з сервером, щоб надіслати 8 байт, надіслати дані, відключає. Якщо відносини є більш стійкими, що часто було б в контексті IoT, то можна припустити, що пристрій вже має встановлене з'єднання з пунктом призначення. У цьому випадку, якщо кінцевим пунктом призначення повідомлення є сервер (на відміну від іншого клієнта, на який сервер збирається передати повідомлення), накладні витрати протоколу потенційно мінімальні.

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

Потворні 33 байти "накладних витрат". Тут варто зазначити, що XML - це текст, і тому, якщо ваші повідомлення часто є двійковими, то це стане набагато менш доречним, тому що ці дані потрібно кодувати (наприклад, до base64 ), що додає додаткові накладні та обчислювальні дані вимоги.

Отже, в кінцевому рахунку:

Чи має XMPP великі накладні витрати на пристрої IoT, що надсилають короткі, часті повідомлення?

Якщо існує стійкий зв’язок і повідомлення в основному неструктуровані, я не думаю, що так. Однак, якщо вам не потрібно те, що він пропонує (динамізм щодо структури), можливо, існують більш відповідні методології.

З огляду на це, якщо у нас є контекст, коли один центральний сервер обробляє та / або спирається на повідомлення між різними пристроями, навіть якщо те, що робить будь-який з цих пристроїв, завжди може бути простим і зрозумілим, протокол, який може інкапсулювати різноманітність повідомлень все ще буде корисною. Якщо клієнтський пристрій має обмежені ресурси, ми можемо жорстко кодувати велику частину протоколу, і загортання кожного повідомлення з цього кінця стає дуже простим завданням; Я вважаю, що багато IoT-пристроїв, що розгортають HTTP-сервери, роблять це (що є зворотною стороною "прості клієнти, складний сервер"). Ці сервери не можуть обробляти будь-який тип запиту HTTP (за винятком попередньо відформатованого відхилення) і мають дуже чітко визначений, цілеспрямований набір дій, які будуть робити, і відповіді, які вони надсилатимуть, але оскільки вони не менш функціонують правильно як HTTP-сервери,


3

Перш за все, я повинен сказати, що XML використовувався для інкапсуляції повідомлень у реальному часі з певним успіхом та у великих масштабах, зокрема для спілкування чатів та присутності в XMPP. Також, здається, є деякі компанії, які мають намір використовувати свої знання XML, щоб спробувати знайти ще одну область застосування для цієї системи представлення даних.

Однак не всі впевнені, що XML - це відповідь на все в системах обміну повідомленнями. Наприклад, останніми роками спостерігається помітний перехід до он-лайн систем, які використовують JSON як спосіб серіалізації даних, а не XML, і якщо я на мить надягну шапку розробника, я б сказав, що інструменти для кодування / декодування з рідного представлення (наприклад, у Python, PHP, Javascript) здається набагато простішим у використанні, ніж у JSON, ніж їх еквіваленти для XML, навіть якщо XML має більше часу, щоб правильно відповісти на ці відповіді.

XML - це складне представлення для комп'ютерів, оскільки воно потребує відносно складного текстового аналізатора, а потім якесь ієрархічне подання, яке дозволяє витягувати його дані в програму. Оскільки тут задіяно стільки тексту, вам потрібно зовсім небагато пам'яті, що доступна для кодування / декодування.

Часто здається незрозумілим, що XML додає великої цінності представленню даних: якщо основне повідомлення не є глибоко ієрархічним, то додавання великої кількості текстових слов здається непотрібним, але парадоксально, якщо є багато ієрархії, то розшифровуючи повідомлення від його текстове представлення буде важкою працею і потребує великих ресурсів. Також користь представлення в тексті мені не зрозуміла: Коли ми вперше пишемо та налагоджуємо системи зв’язку, звичайно використовувати засоби моніторингу / декодування (наприклад, Wireshark), щоб допомогти нам зрозуміти, що йде не так. У перспективі все працює нормально, і жодному людині не потрібно буде детально дивитись на повідомлення, що йдуть вперед і назад (лише комп'ютери). Комп'ютери віддають перевагу бінарному представленню. Текстове представлення приносить користь нікому, що бере участь у будь-якому етапі розгортання.

Людям XML важко читати (і вручну створювати), одночасно важко працюючи за комп'ютерами; Тому це система, яка не підходить ні для комп'ютерів, ні для людей.

Важливо, що IoT має деякі особливі обмеження, які роблять бажаним бути ефективним. Пристрої IoT, як правило, мають обмежену потужність процесора та зберігання (як правило, немає великомасштабного вторинного сховища, лише деякі оперативної пам’яті та EEPROM). Пристрій IoT може мати найпростіші можливі зв’язки, можливо навіть не стек TCP / IP. Буде широке різноманіття конструкцій мікроконтролерів, навіть не на рівні складності, де використовувалася б стандартна операційна система (наприклад, Linux, Android); це обмежує кількість нестандартних інструментів, які будуть лежати навколо, пропонуючи прості XML-інтерфейси для використання.

Підсумовуючи це, я підозрюю, що в IoT подання даних краще залишати в кожному конкретному випадку, залежно від апаратних обмежень, стилю спілкування (наприклад, трансляція, дейтаграма, надійний тощо), частоти спілкування тощо. XML , звичайно , не слід розглядати як неодмінну для IoT.


3
  1. Багато років тому я аналізував різницю щодо використання

    XML у платіжній мережі для представлення платіжних транзакцій (номер картки, дата, час, термінал_id та список додаткових елементів) порівняно з традиційними

    розрядний ISO8583

  2. XML має величезні накладні витрати. Якщо ви враховуєте вплив у мережах із 10000+ вузлами, кожен з яких надсилає 10+ повідомлень щодня / щодня центральному хосту, тоді XML вимикається, і вам дійсно потрібно щось більш ефективне.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.