Экономия против протокольных буферов
Я уже давно пользуюсь PB, но Thrift всегда был в глубине души.
Основными преимуществами экономии, на мой взгляд, являются:
- Собственные коллекции (т. Е. Векторные, множественные и т. Д.) И повторяющиеся PB, обеспечивающие функциональность, аналогичную, но не совсем похожую (без итераторов, если вы не копаетесь в RepeatedField, который в документации гласит, что "в большинстве случаев не требуется").
- Обеспечена достойная реализация RPC, а не просто хуки для подключения вашей собственной.
- Более официально поддерживаемые языки (PB предлагает "официальную" поддержку Java, C++, Python)
Минусы Thrift:
- Реализация RPC означает, что я не могу подключить свой собственный (например) уровень шифрования / аутентификации сверху.
- Поддержка Windows не кажется хорошей.
- У PB определенно есть, если не лучше, более доступная документация.
Нейтральные:
- Неизвестный размер.lib/.dll в Windows (Thrift).
- Большой размер.lib в Windows (PB, но он предлагает -lite, который значительно меньше).
- По скорости они оба похожи.
Я еще не совсем готов сделать решающий шаг и переключиться на Thrift, кто-нибудь может предложить мне больше плюсов / минусов или причин пойти тем или иным путем?
Спасибо!
4 ответа
Как я уже сказал, "Самые большие различия между Thrift и Protocol Buffers?" тема:
Ссылаясь на сравнение Thrift против Protobuf против JSON:
- C++, Python, Java - встроенная поддержка в Protobuf и Thrift.
- Поддержка Protobuf для других языков (включая Lua, Matlab, Ruby, Perl, R, Php, OCaml, Mercury, Erlang, Go, D, Lisp) доступна как сторонние дополнения (кстати, вот поддержка SWI-Prolog).
- Protobuf имеет гораздо лучшую документацию и множество примеров.
- Протобуф объекты меньше
- Protobuf работает быстрее, когда используется "optimize_for = SPEED"
- Thrift имеет встроенную реализацию RPC, в то время как для Protobuf решения RPC разделены, но доступны (как Zeroc ICE).
- Protobuf выпущен под лицензией в стиле BSD
- Thrift выпущен под лицензией Apache
Кроме того, существует множество интересных дополнительных инструментов, доступных для этих решений, которые могут решить. Вот примеры для Protobuf: Protobuf-wireshark, protobufeditor.
Вы можете сначала проанализировать свои потребности:
Вам нужен протокол-независимый формат? Например, вы хотите реализовать собственный протокол или вам нужна 100% переносимость? В таком случае используйте PB.
Если у вас все в порядке с протоколом Thrift по умолчанию, и для начала вам нужен протокол, во что бы то ни стало, используйте Thrift.
Надеюсь это поможет.
Основная причина, по которой наш проект придерживался Thrift поверх протокольных буферов, заключалась в том, что протокольные буферы не генерируют полностью RPC-сервер автоматически, а существующие решения для PB кажутся довольно нестабильными. Просто мои 0,02 доллара.
Вам необходимо подробно указать ваши варианты использования. Еще это "Что лучше, машина или грузовик?" вопрос.