2015-12-19 4 views
5

Я недавно прочитал статью о protocol buffers,Буферы протокола, где их использовать?

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

что я хочу знаете, где их использовать? Есть ли реальные примеры, а не простые примеры адресной книги? Используется ли это, например, для предварительного кэширования результатов запроса из баз данных?

+0

[Официальная документация] (https://developers.google.com/protocol-buffers/), вероятно, лучше начать, чем чья-то вилка Python. – dimo414

+1

Черенковский телескоп-массив, скорее всего, будет использовать ProtoBufs над ZMQ для отправки данных телескопа: http://arxiv.org/pdf/1508.06473v1.pdf – MaxNoe

+0

OpenStreetMap переключился с XML на буфер протокола, чтобы уменьшить размер файла и увеличить скорость синтаксического анализа: http://wiki.openstreetmap.org/wiki/PBF_Format – jpa

ответ

2

Буферы протоколов представляют собой формат хранения и обмена данными, особенно используемый для RPC - связь между программами или компьютерами.

Альтернативы включают конкретный язык сериализацию (Java сериализацию, Python pickles и т.д.), табличные форматы, такие как CSV и TSV, структурированные текстовые форматы, такие как XML и JSON, и другие двоичные форматы, такие как Apache Thrift. Концептуально это всего лишь разные способы представления структурированных данных, но на практике у них разные плюсы и минусы.

Протокол буферы:

  • Space эффективно, опираясь на custom format для представления данных компактно.
  • Обеспечьте безопасный кросс-язык безопасности (в частности, на сильно типизированных языках, таких как Java, но даже в Python он по-прежнему весьма полезен).
  • Предназначен для совместимости в обратном направлении и вперёд. Легко внести структурные изменения в буферы протокола (обычно добавляя новые поля или устаревшие старые), не требуя, чтобы все приложения, использующие протокол, обновлялись одновременно.
  • Немного утомительно работать с вручную. Хотя есть текстовый формат, он в основном полезен для ручного осмотра, а не хранения, протос. Например, JSON намного проще писать и редактировать человека. Поэтому protos обычно записываются и читаются программами.
  • Зависит от .proto компилятор. Отделяя структуру от протокола данных, буферы могут быть скудными и средними, но это означает, что без связанного с ним файла .proto и инструмента, такого как protoc, для генерации кода для его анализа, произвольные данные в прото-формате непригодны для использования. Это делает протосы плохим выбором для отправки данных другим людям, у которых может отсутствовать файл .proto.

Чтобы сделать некоторые широкие обобщения о различных форматах:

  • CSV/TSV/и т.д.. полезны для данных, построенных человеком, которые никогда не должны передаваться между людьми или программами. Его легко построить и легко разобрать, но кошмар для синхронизации и не может легко представлять сложные структуры.
  • Сериализация, специфичная для языка, такая как соленые огурцы, может быть полезна для короткоживущей сериализации, но быстро переходит в проблемы обратной совместимости и, очевидно, ограничивает вас одним языком. За исключением некоторых очень конкретных случаев, protobufs выполняют все те же цели с большей безопасностью и лучшей защитой будущего.
  • JSON идеально подходит для отправки данных между различными сторонами (например, публичными API). Поскольку структура и контент передаются вместе, каждый может понять это, и его легко разобрать на всех основных языках. В настоящее время нет оснований использовать другие структурированные форматы, такие как XML.
  • Бинарные форматы, такие как протокольные буферы, идеально подходят практически для всех других случаев использования сериализации данных; длительное и краткосрочное хранение, межпроцессное взаимодействие, внутрипроцессное и прикладное кэширование и многое другое.

Google famously uses protocol buffers for practically everything they do. Если вы можете представить себе причину необходимости хранить или передавать данные, Google, вероятно, делает это с буферами протоколов.

2

Я использовал их для создания финансовой торговой системы. Вот причины:

  • Есть библиотеки для многих языков. Некоторые вещи должны быть в C++, другие - в C#. И он был открыт для распространения на Python или Java и т. Д.
  • Необходимо было быстро выполнить сериализацию/десериализацию и компактность. Это связано с требованиями к скорости в финансовой торговой системе. Сообщения были намного короче сопоставимых сообщений типа текста, что означало, что у вас никогда не возникало проблем с их установкой в ​​одном сетевом пакете.
  • Не нужно было читать с провода. Раньше система имела XML, который хорош для отладки, но вы можете получать отладочные выходы другими способами и отключать их в процессе производства.
  • Это дает вашему сообщению естественную структуру и API для получения необходимых вам частей. Написание чего-то обычного потребовало бы размышления обо всех вспомогательных функциях, чтобы вытащить числа из двоичного кода, с угловыми шкафами и всем этим.
Смежные вопросы