it-swarm-eu.dev

Největší rozdíly v Thrift vs Protocol Buffers?

Jaké jsou největší výhody a nevýhody Apache Thrift vs Google Buffers ?

256
Bob

Oba nabízejí mnoho stejných vlastností; existují však určité rozdíly:

  • Thrift podporuje 'výjimky'
  • Protokol Buffers mají mnohem lepší dokumentaci/příklady
  • Thrift má vestavěný typ Set
  • Protokol Buffers umožňuje "rozšíření" - můžete rozšířit externí proto přidat další pole, zatímco stále umožňuje externí kód pracovat na hodnoty. V Thriftu to není možné
  • Protokol Buffers je mnohem snadnější ke čtení

V podstatě jsou poměrně rovnocenné (s protokolem Buffers jsou o něco účinnější než to, co jsem četl).

145
hazzen

Další důležitý rozdíl jsou standardně podporované jazyky.

  • Protokol Buffers: Java, Android Java, C++, Python, Ruby, C #, Go, Objective-C, Node.js
  • Thrift: Java, C++, Python, Ruby, C #, Go, Object-C, JavaScript, Node.js, Erlang, PHP, Perl, Haskell, Smalltalk, OCaml, Delphi, D, Haxe

Oba by mohly být rozšířeny na další platformy, ale to jsou jazykové vazby, které jsou k dispozici.

78
Mike Gray

Další klíčový rozdíl je RPC. Thrift generuje kód pro implementaci RPC klientů a serverů, kde se zdá, že protokol Buffers je většinou navržen jako formát pro výměnu dat.

68
saidimu apale
  • Protobuf serializované objekty jsou o 30% menší než Thrift.
  • Většina akcí, které můžete chtít dělat s protobuf objekty (vytvořit, serializovat, deserialize) jsou mnohem pomalejší než šetrnost pokud nezapnete option optimize_for = SPEED
  • Šetrnost má bohatší datové struktury (Map, Set)
  • Protobuf API vypadá čistší, přestože generované třídy jsou všechny zabaleny jako vnitřní třídy, což není tak pěkné.
  • Thrift enums nejsou skutečné Java Enums, tj. Jsou to jen ints. Protobuf má skutečné Java enums.

Pro bližší informace o rozdílech, podívejte se na zdrojový kód diffs na tento open source projekt .

56
eishay

Jak jsem řekl jako "Thrift vs Protokol buffery" téma:

S odkazem na Thrift vs Protobuf vs. JSON srovnání :

Kromě toho je k dispozici mnoho zajímavých doplňkových nástrojů pro tato řešení, která by se mohla rozhodnout. Zde jsou příklady Protobuf: Protobuf-wireshark , protobufeditor .

54

Byl jsem schopen získat lepší výkon s textovým protokolem ve srovnání s protobuffem na pythonu. Nicméně, žádná kontrola typu nebo jiné luxusní utf8 konverze, atd. ... které protobuff nabízí.

Pokud je tedy serializace/deserializace vše, co potřebujete, můžete pravděpodobně použít něco jiného.

http://dhruvbird.blogspot.com/2010/05/protocol-buffers-vs-http.html

8
dhruvbird

Jedna zřejmá věc, která ještě není zmíněna, je to, že může být jak pro, tak con (a je to stejné pro oba), že jsou to binární protokoly. To umožňuje kompaktnější reprezentaci a možná i vyšší výkon (profesionálové), ale se sníženou čitelností (nebo spíše debuggability), kon.

Také oba mají trochu menší podporu nástrojů než standardní formáty, jako je xml (a možná i json).

(EDIT) Zde je Zajímavé srovnání , které řeší jak velikost a výkon rozdíly, a zahrnuje čísla pro některé jiné formáty (xml, json) stejně.

7
StaxMan

Zdá se, že protokol Buffers má kompaktnější reprezentaci, ale to je jen dojem, který dostávám z čtení knihy Thrift. Vlastními slovy:

Rozhodli jsme se proti některým extrémním optimalizacím ukládání (tj. Balení Malých celých čísel do ASCII nebo za použití 7-bitového formátu pokračování) Z důvodu jednoduchosti a jasnosti kódu. Tyto změny Mohou být snadno provedeny, když a kdy se setkáme s výkonem kritickým Případem použití, který je vyžaduje.

Také to může být jen můj dojem, ale zdá se, že protokol Buffers má nějaké tlustší abstrakce kolem struct versioning. Thrift má nějakou podporu pro verzování, ale vyžaduje to trochu úsilí, aby se to stalo.

7
Daniel Spiewak

ProtocolBuffers je rychlejší.
Zde je referenční hodnota Nice:
http://code.google.com/p/thrift-protobuf-compare/wiki/Benchmarking

Můžete se také podívat do Avra, protože Avro je ještě rychlejší.
Microsoft má balíček zde:
http://www.nuget.org/packages/Microsoft.Hadoop.Avro ​​

Mimochodem, nejrychlejší, co jsem kdy viděl, je Cap'nProto ;
Implementaci C # lze nalézt na Githubově úložišti Marca Gravella .

6
Stefan Steiger

A podle wiki běh programu Thrift není spuštěn na Windows.

6
hplbsh

Myslím, že většina z těchto bodů vynechala základní skutečnost, že Thrift je RPC framework, který má schopnost serializovat data pomocí různých metod (binární, XML, atd.).

Protokol Buffers jsou určeny výhradně pro serializaci, není to framework jako Thrift. 

3
Babra Cunningham

Pro jeden, protobuf není plná RPC implementace. Vyžaduje to něco jako gRPC jít s ním. 

gPRC je ve srovnání s Thriftem velmi pomalé:

http://szelei.me/rpc-benchmark-part1/

2
trilogy

Je také důležité poznamenat, že ne všechny podporované jazyky jsou konzistentní se šetrností nebo protobufem. V tomto okamžiku jde o implementaci modulů vedle základní serializace. Dbejte na to, abyste zkontrolovali kritéria pro jakýkoli jazyk, který chcete použít.

0
JSON

Tam jsou některé vynikající body a já budu přidávat další v případě, že někteří 'cesta kříží zde.

Thrift vám dává možnost vybrat si mezi thrift-binary a thrift-compact (de) serializer, thrift-binary bude mít vynikající výkon, ale větší velikost paketů, zatímco thrift-compact vám dá dobrou kompresi, ale potřebuje větší výkon. To je užitečné, protože můžete vždy přepínat mezi těmito dvěma režimy stejně snadno jako změna řádku kódu (sakra, dokonce i to konfigurovatelné). Takže pokud si nejste jisti, jak moc by měla být vaše aplikace optimalizována pro velikost paketů nebo výkon zpracování, může být šetrnost zajímavou volbou.

PS: Podívejte se na tento vynikající srovnávací projekt thekvs, který srovnává mnoho serializátorů včetně thrift-binary, thrift-compact a protobuf: https://github.com/thekvs/cpp-serializers

PS: Existuje další serializátor s názvem YAS, který dává tuto možnost taky, ale je to schéma-méně vidět odkaz výše.

0
Sinapse