Самые большие различия в Thrift vs Protocol Buffers?

Каковы самые большие плюсы и минусы Apache Thrift vs Протокол Google Буферы?

+252
16 сент. '08 в 4:07
источник поделиться
14 ответов

Оба они предлагают многие из тех же функций; однако есть некоторые отличия:

  • Thrift поддерживает 'исключения'
  • Буферы протокола имеют гораздо лучшую документацию/примеры
  • Thrift имеет встроенный Set тип
  • Буферы протоколов позволяют "расширения" - вы можете расширить внешний протокол, чтобы добавить дополнительные поля, но при этом позволяя внешнему коду работать с значениями. В Thrift нет возможности сделать это
  • Я считаю, что протокольные буферы гораздо легче читать

В принципе, они довольно эквивалентны (с буферами протокола немного более эффективными из того, что я прочитал).

+143
16 сент. '08 в 4:25
источник

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

  • Буферы протоколов: Java, Android Java, С++, Python, Ruby, С#, Go, Objective-C, Node.js
  • Thrift: Java, С++, Python, Ruby, С#, Go, Objective-C, JavaScript, Node.js, Erlang, PHP, Perl, Haskell, Smalltalk, OCaml, Delphi, D, Haxe

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

+76
03 авг. '09 в 16:08
источник

RPC - еще одно ключевое различие. Thrift генерирует код для реализации клиентов и серверов RPC, где протокольные буферы, по-видимому, в основном разработаны как формат обмена данными.

+68
28 мар. '10 в 7:43
источник
  • Серийные объекты Protobuf на 30% меньше, чем Thrift.
  • Большинство действий, которые вы можете делать с объектами protobuf (создание, сериализация, десериализация), намного медленнее, чем бережливость, если вы не включите option optimize_for = SPEED.
  • Thrift имеет более богатые структуры данных (Map, Set)
  • API Protobuf выглядит более чистым, хотя сгенерированные классы все упакованы как внутренние классы, что не так приятно.
  • Перечисления Thrift - это не настоящие Java-перечисления, т.е. они просто ints. Protobuf имеет реальные перечисления Java.

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

+56
17 нояб. '08 в 18:00
источник

Как я уже сказал, "Thrift vs Protocol buffers" тема:

Ссылаясь на Сравнение Thrift vs Protobuf vs JSON:

Кроме того, для этих решений доступно множество интересных дополнительных инструментов, которые могут решить. Вот примеры для Protobuf: Protobuf-wireshark, protobufeditor.

+53
27 авг. '11 в 18:25
источник

Мне удалось повысить производительность с помощью текстового протокола по сравнению с protobuff на python. Тем не менее, никакая проверка типа или другое причудливое преобразование utf8 и т.д.... которые предлагает protobuff.

Итак, если сериализация/десериализация - это все, что вам нужно, то вы, вероятно, можете использовать что-то еще.

http://dhruvbird.blogspot.com/2010/05/protocol-buffers-vs-http.html

+8
03 мая '10 в 19:09
источник

Буферы протокола, похоже, имеют более компактное представление, но это только впечатление, которое я получаю от чтения технической документации Thrift. По их собственным словам:

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

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

+7
16 сент. '08 в 4:23
источник

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

Кроме того, обе версии имеют меньшую поддержку инструмента, чем стандартные форматы, такие как xml (и, возможно, даже json).

(EDIT) Здесь Интересное сравнение, в котором рассматриваются как различия в размере, так и производительности, и включает номера для некоторых других форматов (xml, json) как хорошо.

+7
11 мар. '09 в 1:19
источник

И согласно wiki, время выполнения Thrift не запускается в Windows.

+6
27 сент. '09 в 0:11
источник

ПротоколBuffers является ОСНОВНЫМ.
Здесь есть хороший ориентир:
http://code.google.com/p/thrift-protobuf-compare/wiki/Benchmarking

Вы также можете посмотреть в Avro, поскольку Avro еще быстрее.
У Microsoft есть пакет:
http://www.nuget.org/packages/Microsoft.Hadoop.Avro

Кстати, самый быстрый из всех, что я когда-либо видел, Cap'nProto;
Реализация С# можно найти в Github-хранилище Marc Gravell.

+6
29 авг. '14 в 7:21
источник

Я думаю, что большинство из этих пунктов упустило тот факт, что Thrift - это инфраструктура RPC, которая, как оказалось, имеет возможность сериализовать данные с помощью различных методов (двоичный, XML и т.д.).

Буферы протоколов предназначены исключительно для сериализации, а не для платформы, такой как Thrift.

+3
14 апр. '17 в 14:47
источник

Во-первых, protobuf не является полноценной реализацией RPC. Для этого требуется что-то вроде gRPC.

gPRC очень медленный по сравнению с Thrift:

http://szelei.me/rpc-benchmark-part1/

+2
28 янв. '18 в 3:33
источник

Здесь есть несколько отличных моментов, и я собираюсь добавить еще один вариант, если здесь пересекаются пути someones.

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

PS: см. этот отличный тестовый проект thekvs, который сравнивает многие сериализаторы, включая бережливость, двоичный, экономный и protobuf: https://github.com/thekvs/cpp-serializers

PS: Существует еще один сериализатор с именем YAS, который также предоставляет эту опцию, но он не имеет схемы, см. ссылку выше.

0
03 сент. '17 в 8:10
источник

Также важно отметить, что не все поддерживаемые языки совместимы с Thrift или Protobuf. На данный момент речь идет о реализации модулей в дополнение к базовой сериализации. Позаботьтесь о том, чтобы проверить контрольные показатели для любого языка, который вы планируете использовать.

0
08 дек. '18 в 17:28
источник

Посмотрите другие вопросы по меткам или Задайте вопрос