Quels sont les principaux avantages et inconvénients de Apache Thrift vs Les tampons de protocole de Google ?
Réponses
Trop de publicités?Ils offrent tous deux les mêmes caractéristiques, mais il existe quelques différences :
- Le Thrift soutient les "exceptions".
- Les tampons de protocole disposent d'une bien meilleure documentation/exemples.
- Thrift possède une fonction intégrée
Set
type - Les tampons de protocole permettent des "extensions" - vous pouvez étendre un proto externe pour ajouter des champs supplémentaires, tout en permettant au code externe d'opérer sur les valeurs. Il n'y a aucun moyen de faire cela dans Thrift.
- Je trouve les tampons de protocole beaucoup plus faciles à lire
Fondamentalement, ils sont assez équivalents (avec des tampons de protocole légèrement plus efficaces d'après ce que j'ai lu).
Une autre différence importante concerne les langues prises en charge par défaut.
- Tampons de protocole : Java, Android Java, C++, Python, Ruby, C#, Go, Objective-C, Node.js
- La friperie : Java, C++, Python, Ruby, C#, Go, Objective-C, JavaScript, Node.js, Erlang, PHP, Perl, Haskell, Smalltalk, OCaml, Delphi, D, Haxe
Les deux pourraient être étendus à d'autres plates-formes, mais il s'agit là des liaisons de langues disponibles immédiatement.
- Les objets sérialisés Protobuf sont environ 30% plus petits que Thrift.
- La plupart des actions que vous pouvez vouloir effectuer avec des objets protobuf (créer, sérialiser, désérialiser) sont les suivantes beaucoup plus lent que l'économie à moins que vous n'activiez
option optimize_for = SPEED
. - Thrift dispose de structures de données plus riches (Map, Set)
- L'API de Protobuf semble plus propre, bien que les classes générées soient toutes emballées comme des classes internes, ce qui n'est pas si agréable.
- Les enums Thrift ne sont pas de vrais enums Java, c'est-à-dire qu'ils sont juste des ints. Protobuf a de vrais enums Java.
Pour un examen plus approfondi des différences, consultez les différences de code source à l'adresse suivante ce projet open source .
Comme je l'ai dit "Buffers Thrift vs Protocol" sujet :
Se référant à Comparaison entre Thrift, Protobuf et JSON :
- Les supports d'économie d'énergie hors des sentiers battus AS3, C++, C#, D, Delphi, Go, Graphviz, Haxe, Haskell, Java, Javascript, Node.js, OCaml, Smalltalk, Typescript, Perl, PHP, Python, Ruby, ...
- C++, Python, Java - support in-box dans Protobuf
- Le support de Protobuf pour d'autres langages (dont Lua, Matlab, Ruby, Perl, R, Php, OCaml, Mercury, Erlang, Go, D, Lisp) est disponible sous forme de modules complémentaires tiers. (Au fait. Voici le support SWI-Prolog ).
- Protobuf a une bien meilleure documentation et de nombreux exemples.
- La friperie vient avec un bon tutoriel
- Les objets Protobuf sont plus petits
- Protobuf est plus rapide lorsqu'on utilise la configuration "optimize_for = SPEED".
- Thrift a une implémentation RPC intégrée, tandis que pour Les solutions Protobuf RPC sont séparées, mais disponibles (comme Zeroc ICE ).
- Protobuf est publié sous une licence de type BSD.
- Thrift est publié sous la licence Apache 2.
En outre, il existe de nombreux outils supplémentaires intéressants pour ces solutions, qui pourraient être déterminants. Voici des exemples pour Protobuf : Protobuf-wireshark , moniteur de protobufe .
- Réponses précédentes
- Plus de réponses
4 votes
À titre d'information, Marc Gravell maintient une bibliothèque pour travailler avec le protobuf de Google, appelée protobuf.net, à l'adresse suivante code.google.com/p/protobuf-net
6 votes
Cette question et certaines des réponses suivantes datent d'environ 6 ans. Beaucoup de choses ont sans doute changé depuis.