Thrift vs Protocol buffers [duplicate]

2019-01-21 00:44发布

问题:

This question already has an answer here:

  • Biggest differences of Thrift vs Protocol Buffers? 14 answers

I've been using PB for quite a while now, but, Thrift has constantly been at the back of my mind.

The primary advantages of thrift, as I see it are:

  1. Native collections (i.e, vector, set etc) vs PBs repeated providing functionality similar to, but not quite like (no iterators unless you dig into RepeatedField which the documentation states "shouldn't be required in most cases").
  2. A decent RPC implementation provided, instead of just hooks to plug your own in.
  3. More officially supported languages (PB offers "official" support for Java, C++, Python)

The cons of Thrift:

  1. The RPC implementation means I can't plug in my own (for example) encryption/authentication layer on top.
  2. Windows support doesn't seem to be great.
  3. PB definitely seems to have, if not better, more accessible documentation.

Neutral:

  • Unknown size of .lib/.dll on Windows (Thrift).
  • Large size of .lib on Windows (PB, but it does offer a -lite which is significantly smaller).
  • Speed wise, they both seem to be similar.

I'm not quite ready to take the plunge and switch to Thrift yet, can anyone offer me more pros/cons, or reasons to go one way or the other?

Thanks!

回答1:

As I've said as "Biggest differences of Thrift vs Protocol Buffers?" topic :

Referring to Thrift vs Protobuf vs JSON comparison :

  • C++, Python, Java - in-box support in Protobuf and Thrift.
  • Protobuf support for other languages (including Lua, Matlab, Ruby, Perl, R, Php, OCaml, Mercury, Erlang, Go, D, Lisp) is available as Third Party Addons (btw. Here is SWI-Prolog support).
  • Protobuf has much better documentation and plenty of examples.
  • Protobuf objects are smaller
  • Protobuf is faster when unsing "optimize_for = SPEED"
  • Thrift has integrated RPC implementation, while for Protobuf RPC solutions are separated, but available (like Zeroc ICE ).
  • Protobuf is released under BSD-style license
  • Thrift is released under Apache license

Additionally, there are plenty of interesting additional tools available for those solutions, which might decide. Here are examples for Protobuf: Protobuf-wireshark , protobufeditor.



回答2:

You might want to analyse your need first:

Do you need a protocol-agnostic format? For example, do you want to implement a custom protocol or need 100% portability? In such a case use PB.

If you are fine with the default protocol of Thrift, and you need a protocol to begin with, by all means, go with Thrift.

Hope this helps.



回答3:

Our project's main reason to stick with Thrift over protocol buffers was that protocol buffers don't auto-generate a complete RPC server, and existing solutions for PB seemed to all be fairly unstable. Just my $0.02.



回答4:

You need to specify your use case(s) in detail. Else this is a "Which is better, a car or a truck?" question.