Бинарные протоколы мертвы?

Кажется, что раньше использовались более бинарные протоколы из-за очень медленных интернет-скоростей времени (dialup). Я видел, что все заменено HTTP и SOAP/REST/XML.

Почему это?

Действительно ли бинарные протоколы мертвы или они менее популярны? Почему они мертвы или менее популярны?

Ответ 1

Вы просто не можете бить двоичный

Двоичные протоколы всегда будут иметь больше пространства, чем текстовые протоколы. Даже когда скорость интернета резко возрастает, также увеличивается количество и сложность информации, которую мы хотим передать.

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

Большая часть информации носит двоичный характер и, вероятно, никогда не будет заменена текстовым протоколом. Ярким примером является потоковое видео.

Даже если вы сжимаете текстовый протокол (например, с GZip), алгоритм сжатия общего назначения никогда не будет таким эффективным, как двоичный протокол, созданный вокруг определенного потока данных.

Но иногда вам не нужно

Причина, по которой вы видите больше текстовых протоколов, заключается в том, что скорость передачи данных и емкость хранилища данных действительно выросли быстрее по сравнению с размером данных для широкого круга приложений. Нам, людям, гораздо проще работать с текстовыми протоколами, поэтому мы разработали наш вездесущий XML-протокол вокруг текстового представления. Конечно, мы могли бы создать XML как двоичный протокол, если бы нам действительно нужно было сохранять каждый байт и создавать общие инструменты для визуализации и работы с данными.

Затем снова, иногда вы действительно делаете

Многие разработчики привыкли думать о многоядерных многоядерных компьютерах. Даже ваш обычный телефон в эти дни ставит мой первый IBM PC-XT в позор. Тем не менее, есть платформы, такие как встроенные устройства, которые имеют довольно строгие ограничения на вычислительную мощность и память. При работе с такими устройствами может потребоваться двоичный код.

Ответ 2

Параллель с языками программирования, вероятно, очень актуальна.

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

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

Кроме того, в отличие от языков программирования, где есть сильные стимулы "принять удар производительности" в обмен на добавленную простоту, скорость разработки и т.д., способность структурировать связь в слоях делает сложность и "двоичную" "более низкие уровни, достаточно прозрачные для уровня приложения. Например, пока сообщения SOAP, которые вы получили, одобрены, приложение не обязательно должно знать, что они были эффективно сжаты для передачи по проводу.

Ответ 4

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

Многие текстовые протоколы реализованы таким образом, что анализатор не имеет оснований для определения того, сколько данных требуется до того, как будет получен логический блок (XML и JSON могут предоставить минимально необходимые байты для завершения, но не могут дать значимых оценок). Это означает, что парсеру, возможно, придется периодически уступать коду приема сокетов, чтобы получить больше данных. Это нормально, если ваши сокеты находятся в режиме блокировки, не так просто, если это не так. Обычно это означает, что все состояние парсера должно храниться в куче, а не в стеке.

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

Ответ 5

В некоторых приложениях всегда будет необходимость бинарных протоколов, таких как связь с очень низкой пропускной способностью. Но есть огромные преимущества для текстовых протоколов. Например, я могу использовать Firebug, чтобы легко увидеть, что именно отправляется и получает от каждого HTTP-вызова, сделанного моим приложением. Удачи вам в бинарном протоколе:)

Другим преимуществом текстовых протоколов является то, что, хотя они менее эффективны по сравнению с двоичными, текстовые данные сжимаются очень хорошо, поэтому данные могут автоматически сжиматься, чтобы получить лучшее из обоих миров. См. HTTP-сжатие, например.

Ответ 6

Двоичные протоколы не мертвы. Во многих случаях гораздо эффективнее отправлять двоичные данные.

WCF поддерживает двоичное кодирование с использованием TCP. http://msdn.microsoft.com/en-us/library/ms730879.aspx

Ответ 7

Некоторые бинарные протоколы, которые я видел в дикой природе для интернет-приложений

  • Google Protocol Buffers, которые используются для внутренних сообщений, а также, например, Google Chrome Bookmark Syncing
  • Flash AMF, который используется для связи с приложениями Flash и Flex. Как Flash, так и Flex могут взаимодействовать через REST или SOAP, однако формат AMF намного эффективнее для Flex, чем некоторые тесты доказать

Ответ 8

Я очень рад, что вы подняли этот вопрос, поскольку не-двоичные протоколы умножились в использовании много раз с момента внедрения XML. Десять лет назад вы увидели бы практически всех, кто рекламировал их "соответствие" коммуникациям на основе XML. Однако этот подход, один из нескольких подходов к двоичным протоколам, имеет много недостатков.

Одно из значений, например, было читаемо. Но читаемость важна для отладки, когда люди должны читать транзакцию. Они очень неэффективны по сравнению с двоичными передачами. Это связано с тем, что сам XML является двоичным потоком, который должен быть переведен с использованием другого слоя в текстовые фрагменты ( "токены" ), а затем обратно в двоичный файл с содержащимися данными.

Другим важным показателем была расширяемость. Но расширяемость может быть легко поддержана, если номер версии протокола для двоичного потока используется в начале транзакции. Вместо отправки тегов XML можно было бы отправлять двоичные индикаторы. Если номер версии неизвестен, то принимающая сторона может загрузить "словарь" этой неизвестной версии. Этот словарь может, например, быть XML файлом. Но загрузка словаря - это одноразовая операция, а не каждая транзакция!

Таким образом, эффективность может быть сохранена вместе с расширяемостью и очень легко! Существует большое количество "скомпилированных XML" протоколов, которые делают именно это.

И последнее, но не менее важное: я даже слышал, как люди говорят, что XML - это хороший способ преодолеть двоичные системы типа little-endian и big-endian. Например, компьютеры Sun и Intel. Но это неверно: если обе стороны могут правильно принять XML (ASCII), обе стороны могут принять двоичный код правильным образом, поскольку XML и ASCII также передаются двоично.

Надеюсь, вы найдете это интересное чтение!

Ответ 9

Бинарные протоколы будут продолжать жить везде, где требуется эффективность. В основном, они будут жить на более низких уровнях, где аппаратная реализация более распространена, чем программные реализации. Скорость - не единственный фактор - простота реализации также важна. Создание двоичных сообщений данных чипа намного проще, чем синтаксический анализ текстовых сообщений.

Ответ 10

Пока все ответы сосредоточены на эффективности пространства и времени. Никто не упомянул, что я считаю причиной номер один так много текстовых протоколов: обмен информацией. Это целая точка в Интернете, и это гораздо проще делать с текстовыми, удобочитаемыми для человека протоколами, которые также легко обрабатываются машинами. Вы избавляетесь от зависимого от языка, специфичного для приложения, программирования с привязкой к платформе с обменом текстовыми данными.

Ссылка в любой библиотеке разбора XML/JSON/* -, которую вы хотите использовать, узнать структуру информации и вырезать фрагменты данных, которые вас интересуют.

Ответ 11

Конечно, это полностью зависит от приложения? До сих пор было два общих типа примера: связанные с xml/html ответы и видео/аудио. Один из них призван быть "общим", как отметил Джонатан, а другой эффективен в передаче данных (и без видения Матрицы, "чтение" фильма никогда не будет полезно, как чтение HTML-документа).

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

Поэтому, конечно, я бы сказал, что они не мертвы.

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

Ответ 12

Они не мертвы, потому что они являются основными слоями каждой системы связи. Каждая главная система связи ссылка для передачи данных и network слои основанный на каком-то "двоичном протоколе".

Возьмите интернет, например, теперь вы, вероятно, используете Ethernet в своей локальной сети, PPPoE для связи с вашим провайдером, IP, чтобы просматривать веб-страницы и, возможно, FTP, чтобы загрузить файл. Все это "двоичные протоколы".

Мы видим этот переход к текстовым протоколам в верхних слоях, потому что их гораздо легче разрабатывать и понимать по сравнению с "бинарными протоколами", а также потому, что большинство приложений не имеют строгих требований к пропускной способности.

Ответ 13

зависит от приложения... Я думаю, что в режиме реального времени (firewire, usb, field busses...) всегда будет необходимость в бинарных протоколах

Ответ 14

Являются ли бинарные протоколы мертвыми?

Два ответа:

  • Будем надеяться.
  • Нет.

По крайней мере, двоичный протокол лучше, чем XML, который обеспечивает всю удобочитаемость двоичного протокола в сочетании с всей эффективностью меньше эффективности, чем хорошо разработанный протокол ASCII.

Ответ 15

Эрик Дж ответ в значительной степени говорит об этом, но здесь еще немного пищи для размышлений и фактов. Обратите внимание, что ниже приведен материал не о медиа-протоколах (видео, изображениях). Некоторые предметы могут быть понятны вам, но я постоянно слышу мифы, поэтому вы идете...

  • Нет никакой разницы в выразительности между двоичным протоколом и текстовым протоколом. Вы можете передавать ту же информацию с такой же надежностью.

  • Для каждого оптимального бинарного протокола вы можете создать оптимальный текстовый протокол, который занимает примерно на 15% больше места и этот протокол вы можете ввести на клавиатуре.

  • На практике (практические протоколы видны каждый день), разница часто даже менее значительна из-за статической природы многих двоичных протоколов.

Например, возьмите число, которое может стать очень большим (например, в 32-битном диапазоне), но часто очень мало. В двоичном режиме люди моделируют это обычно как четыре байта. В тексте это часто делается как печатный номер, за которым следует двоеточие. В этом случае цифры ниже десяти становятся двумя байтами и цифрами ниже 100 трех байтов. (Разумеется, вы можете утверждать, что двоичное кодирование плохое, и что вы можете использовать некоторые биты размера, чтобы сделать его более эффективным с точки зрения пространства, но это еще одна вещь, которую вы должны документировать, реализовывать с обеих сторон и иметь возможность устранять неполадки, когда она приходит по вашей проводке.)

Например, сообщения в двоичных протоколах часто формируются по полям длины и/или терминаторам, тогда как в текстовых протоколах вы просто используете CRC.

  • На практике разница часто менее значительна из-за требуемой избыточности.

Вы хотите некоторый уровень избыточности, независимо от того, является ли он двоичным или текстовым. Бинарные протоколы часто не оставляют места для ошибок. Вы должны на 100% правильно документировать каждый бит, который вы отправляете, и поскольку большинство из нас - люди, это случается редко, и вы не можете прочитать его достаточно хорошо, чтобы сделать правильный вывод о том, что правильно.

Итак, в резюме: Бинарные протоколы теоретически больше пространства и вычисляют эффективность, но разница на практике часто меньше, чем вы думаете, и сделка часто не стоит. Я работаю в Интернете в Things area и занимаюсь практически ежедневной базой с настраиваемыми, плохо разработанными бинарными протоколами, которые действительно сложно устранить, раздражать для реализации и не использовать больше пространства. Если вам не нужно полностью настраивать последнюю миллиамперу из вашей батареи и вычислять с помощью микроконтроллерных циклов (или передающих носителей), подумайте дважды.