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