Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Thrift vs Protocol buffers [duplicate]

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!

like image 961
please delete me Avatar asked Nov 27 '10 19:11

please delete me


3 Answers

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.

like image 96
Grzegorz Wierzowiecki Avatar answered Sep 22 '22 01:09

Grzegorz Wierzowiecki


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.

like image 45
awdz9nld Avatar answered Sep 23 '22 01:09

awdz9nld


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.

like image 24
alexras Avatar answered Sep 22 '22 01:09

alexras