Есть ли у XMPP большие издержки для устройств IoT, отправляющих короткие частые сообщения?


10

Я читал о XMPP как о потенциальном протоколе связи для устройств IoT, но, прочитав один источник, я не уверен, действительно ли это подходящий протокол, если вы беспокоитесь о накладных расходах для каждого сообщения.

Этот источник утверждает:

Однако у XMPP есть ряд проблем, которые делают его несколько нежелательным для встраиваемых IOT-протоколов. Как протокол, основанный на XML, XMPP очень многословен, даже больше, чем HTTP, и требует больших затрат данных. Один обмен запросом / ответом для отправки одного байта данных с устройства, подключенного к IOT, составляет более 0,5 кБ.

Существует черновая спецификация, которая будет сжимать XMPP с использованием XML-кодировки, называемой эффективным XML Interchange (EXI). Но даже с EXI один и тот же байт данных получает сотни байтов служебных данных протокола только от XMPP. EXI - также гораздо более сложный формат для обработки, чем другие доступные сейчас опции. Из-за этих присущих проблем обычно рекомендуется избегать использования XMPP во встроенных приложениях IoT.

Тем не менее, XMPP позиционирует себя как пригодный для приложений IoT (хотя в нем не говорится, что он требует слишком много накладных расходов), поэтому кажется странным, что такой большой, казалось бы, подробный протокол будет рекомендован / продвинут для устройств IoT.

Действительно ли накладные расходы на XMPP так велики, как предполагает источник для небольших объемов данных? Например, сколько будет издержек при отправке 8-байтового сообщения?

Кроме того, насколько велики издержки, если используется сжатие EXI (как упомянуто в источнике)? Будет ли это также с некоторыми подводными камнями?


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

1
@ Helmar действительно, с XMPP похоже, что вы получаете в размере пакета, вы теряете в вычислительной сложности.
Аврора0001

1
Я думаю, что этот вопрос, как правило, хорошо, но: «Например, сколько будет издержек при отправке 8-байтового сообщения каждые 2 минуты?» -> «Две минуты» являются тангенциальными и склонны вводить вещи в заблуждение. На самом деле вы спрашиваете, сколько служебных данных будет иметь 8-байтовое сообщение (я думаю, если это всего лишь один фрагмент данных, такой же, как 1-байтовое сообщение). Относительно временного компонента это просто зависит от пропускной способности и для любого, кто рассматривает использование сетевого протокола, который должен быть просто математикой.
Златовласка

1
@delicateLatticeworkFever Я отредактирую его, если вы не считаете, что это актуально (я не совсем убедился, но я думал, что больше деталей лучше, чем меньше)
Aurora0001

2
Это предложение, да. Просто прочитав это, я сказал: «Разве это не зависит от того, сколько времени требуется совершенно неопределенному устройству для отправки определенного количества байтов?» Например, если ответом является то, что размер сообщения составляет ~ 0,5 кБ, в единицах измерения нет элемента времени;) Это относится к полосе пропускания неуказанного устройства.
Златовласка

Ответы:


8

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

Давайте рассмотрим 8-байтовое сообщение, которое может составлять некоторые табличные данные. Если бы я использовал очень статический протокол, я мог бы, как минимум, передать его без дополнительных затрат, просто определив протокол, подобный этому:

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

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

Однако, если не все мои сообщения являются именно такими, то указание того, что это за сообщение, может быть не буквальной частью «полезной нагрузки», а необходимым компонентом в отношении содержимого. Я мог бы сделать это с помощью дополнительных двух байтов и добавить гораздо больше динамизма:

  • Сообщения теперь имеют переменную длину, 0-255 байт, а первый байт указывает длину.
  • Имеется (до) 256 кодов для различных предопределенных типов сообщений, один из которых «таблица 2 x 2», то есть второй байт.

Теперь мои 8 байтов табличного содержимого требуют 2 байта служебной информации, но существует гораздо более широкий диапазон возможностей с точки зрения того, какие виды сообщений могут быть отправлены с этим пользовательским протоколом.

Это все еще близко к возможностям спецификации HTML-страницы или пространства имен XML (или их набора, что в сущности является XMPP ).

Итак, исходя из этого, если в основном то, что вы делаете, это отправка простых 8-байтовых сообщений, XMPP, вероятно, излишне. Однако не обязательно так много. Утверждение, что «один обмен запросом / ответом для отправки одного байта данных с устройства, подключенного к IOT, составляет более 0,5 кБ», мне кажется, взглянув на соответствующий RFC , является потенциальным преувеличением (но, все же, все Я взглянул на это, я никогда не использовал и не использовал XMPP). Я не сомневаюсь, что вы могли бы построить пример такого, но это, вероятно, не минимальный пример.

Поскольку протокол ориентирован на TCP, создание «потока XML, определяемого пространством имен« jabber: client »» необходимо рассматривать только как часть сообщения, если мы делаем что-то одно - устройство связывается с сервером для отправки 8 байтов, отправляет данные, отключается. Если связь более постоянна, как это часто бывает в контексте IoT, то можно предположить, что устройство уже имеет установленное соединение с пунктом назначения. В этом случае, если конечным пунктом назначения сообщения является сервер (в отличие от другого клиента, которому сервер будет передавать сообщение), тогда издержки протокола могут быть минимальными.

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

Жалкие 33 байта "накладных расходов". Здесь стоит указать, что XML - это текст, и поэтому, если ваши сообщения часто бывают двоичными, тогда они станут намного менее подходящими, потому что эти данные должны быть закодированы (например, в base64 ), что добавляет дополнительные издержки и вычислительные требования.

Итак, в конечном итоге:

Есть ли у XMPP большие издержки для устройств IoT, отправляющих короткие частые сообщения?

Если связь постоянна и сообщения в основном неструктурированы, я так не думаю. Однако, если вам не нужно то, что он предлагает (динамизм в отношении структуры), то, вероятно, есть более подходящие методологии.

В соответствии с этим, если у нас есть контекст, в котором один центральный сервер обрабатывает и / или передает сообщения между различными устройствами, даже если то, что делает любое из этих устройств, всегда может быть простым и понятным, протокол, который может инкапсулировать Разнообразие сообщений все равно будет полезно. Если клиентское устройство имеет ограниченные ресурсы, мы можем жестко закодировать большую часть протокола, и перенос каждого сообщения с этой стороны становится очень простой задачей; Я полагаю, что многие устройства IoT, которые развертывают HTTP-серверы, делают это (что противоположно «простым клиентам, сложным серверам»). Эти серверы не могут обрабатывать HTTP-запросы любого типа (кроме как через предварительно отформатированный отказ) и имеют очень четко определенный, сфокусированный набор действий, которые будут выполнять, и ответы, которые они будут отправлять, но, тем не менее, они правильно работают как HTTP-серверы,


3

Прежде всего, я должен сказать, что XML был использован для инкапсуляции сообщений в реальном времени с некоторым успехом и в больших масштабах, в частности, для передачи IM и присутствия в 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 в платежной сети для представления платежной транзакции (номер_карты, дата, время, терминал_ид и список дополнительных элементов) по сравнению с традиционным

    растровое изображение ISO8583

  2. У XML огромные накладные расходы. Если учесть влияние в сетях с 10000+ узлами, каждый из которых отправляет более 10 сообщений ежечасно / ежедневно на центральный хост, тогда XML выходит, и вам действительно нужно что-то более эффективное.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.