it-swarm-tr.com

Thrift vs Protocol Buffers arasındaki en büyük farklar?

Apache Thrift vs Google’ın Protokolü Tamponları ’nın en büyük avantajları ve dezavantajları nelerdir?

256
Bob

Her ikisi de aynı özelliklerin çoğunu sunar; Ancak, bazı farklılıklar vardır:

  • Thrift 'istisnaları' destekliyor
  • Protokol Tamponları daha iyi dokümantasyon/örneklere sahiptir
  • Thrift yerleşik bir Set tipine sahip
  • Protokol Tamponları "uzantılara" izin verir - harici kodun değerler üzerinde çalışmasına izin verirken, ilave alanlar eklemek için harici bir protokolü genişletebilirsiniz. Bunu Thrift'te yapmanın yolu yok
  • Protokol Tamponlarını okumayı daha kolay buluyorum

Temel olarak, oldukça eşdeğerdirler (Protokol Tamponları ile okuduklarımdan biraz daha verimli).

145
hazzen

Diğer bir önemli fark, varsayılan olarak desteklenen dillerdir.

  • Protokol Tamponları: Java, Android Java, C++, Python, Yakut, C #, Git, Objective-C, Node.js
  • Tasarruf: Java, C++, Python, Ruby, C #, Git, Amaç-C, JavaScript, Node.js, Erlang, PHP, Perl, Haskell, Smalltalk, OCaml, Delphi, D, Haxe

Her ikisi de diğer platformlara genişletilebilir, ancak bunlar kullanıma hazır diller.

78
Mike Gray

RPC başka bir önemli farktır. Thrift, Protokol Tamponlarının çoğunlukla tek başına veri değişim formatı olarak tasarlandığı durumlarda RPC istemcilerini ve sunucularını uygulamak için kod oluşturur.

68
saidimu apale
  • Protobuf serileştirilmiş nesneler Thrift'ten yaklaşık% 30 daha küçüktür.
  • Protobuf nesnelerle (oluşturmak, serileştirmek, seri hale getirmek) yapmak isteyebileceğiniz çoğu işlem thrift'ten çok daha yavaş açmazsanız option optimize_for = SPEED .
  • Thrift daha zengin veri yapılarına sahiptir (Harita, Set)
  • Protobuf API daha temiz görünüyor, ancak oluşturulan sınıfların hepsi çok hoş olmayan iç sınıflar olarak doluydu.
  • Tasarruf numaralar gerçek değil Java Enums, yani sadece ints. Protobuf gerçekte Java enums.

Farklılıklara daha yakından bakmak için, kaynak kodunun bu açık kaynaklı proje 'e eşit olduğuna dikkat edin.

57
eishay

Dediğim gibi "Thrift vs Protocol buffers" topic:

Thrift vs Protobuf vs JSON karşılaştırması referansı :

Ek olarak, bu çözümler için karar verebilecek çok sayıda ilginç ek araç vardır. Protobuf için örnekler: Protobuf-wireshark , protobufeditor .

54

Python üzerinde protobuff ile karşılaştırıldığında metin tabanlı bir protokol ile daha iyi performans elde başardı. Ancak, protobuff'un sunduğu hiçbir tür kontrolü veya başka bir fantezi utf8 dönüşümü vb.

Yani, seri hale getirme/seri kaldırma işlemi, ihtiyacınız olan tek şeyse, muhtemelen başka bir şey kullanabilirsiniz.

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

8
dhruvbird

Henüz belirtilmeyen bir açık şey, hem profesyonel hem de con (ve her ikisi için de aynı olabilir) ikili protokoller olmalarıdır. Bu, daha kompakt gösterime ve muhtemelen daha fazla performansa (artı) olanak tanır, ancak okunabilirliği (veya daha doğrusu hata ayıklama) azalır.

Ayrıca, her ikisi de xml (ve hatta belki json) gibi standart biçimlerden biraz daha az araç desteğine sahiptir.

(EDIT) İşte size İlginç bir karşılaştırma hem boyut hem de performans farklılıklarını ele alan ve diğer bazı formatlar (xml, json) için rakamlar da içeren.

7
StaxMan

Protocol Buffers daha kompakt bir tasviri var gibi gözüküyor, ancak bu sadece Thrift tanıtım broşürünü okumaktan aldığım izlenim. Kendi sözleriyle:

Bazı aşırı depolama optimizasyonlarına karşı karar verdik (ör. ASCII içine ya da 7 bitlik bir devam formatı kullanarak). Koddaki basitlik ve açıklık adına. Bu değişiklikler. Kritik bir performansla karşılaştığımızda ve ne zaman karşılaştığımızda kolayca yapılabilir. Onları talep eden dava kullanın.

Ayrıca, sadece benim izlenimim olabilir, ancak Protocol Buffers yapısal sürüm hakkında daha kalın soyutlamalar yapmış gibi görünüyor. Thrift'in bazı versiyonlama desteği var, ancak bunun gerçekleşmesi için biraz çaba gerekiyor.

7
Daniel Spiewak

ProtocolBuffers HIZLI.
Burada güzel bir kriter var:
http://code.google.com/p/thrift-protobuf-compare/wiki/Benchmarking

Avro daha hızlı olduğu için Avro'ya da bakmak isteyebilirsiniz.
Microsoft'un bir paketi var:
http://www.nuget.org/packages/Microsoft.Hadoop.Avro

Bu arada, gördüğüm en hızlı Cap'nProto ;
Marc Gravell'in Github deposu adresinde bir C # uygulaması bulunabilir.

6
Stefan Steiger

Ve wiki'ye göre Thrift çalışma zamanı Windows'ta çalışmıyor.

6
hplbsh

Bence bu noktaların çoğu Thrift'in çeşitli yöntemler kullanarak (ikili, XML, vb.) Verileri seri hale getirme kabiliyetine sahip olan bir RPC çerçevesi olduğu gerçeğini kaçırdı.

Protokol Tamponları tamamen serileştirme için tasarlanmıştır, Thrift gibi bir çerçeve değildir. 

3
Babra Cunningham

Birincisi, protobuf tam bir RPC uygulaması değil. Onunla gitmek için gRPC gibi bir şey gerektirir. 

gPRC, Thrift'e kıyasla çok yavaş:

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

2
trilogy

Desteklenen tüm dillerin tasarruf veya protobufla tutarlı olmadığına dikkat etmek önemlidir. Bu noktada, temel serileştirmeye ek olarak modüllerin uygulanması ile ilgili bir sorun var. Hangi dili kullanacağınızı öğrenmek için ölçütleri kontrol etmeye özen gösterin.

0
JSON

Burada bazı mükemmel noktalar var ve birinin yolunun buraya geçmesi durumunda başka bir tane daha ekleyeceğim.

Thrift, size thrift-binary ve thrift-compact (de) seri hale getirici arasında seçim yapma seçeneği sunar, thrift-binary mükemmel bir performansa sahip olur ancak daha büyük paket boyutu olurken, thrift-compact iyi bir sıkıştırma sağlar ancak daha fazla işlem gücü gerektirir. Bu kullanışlıdır, çünkü bu iki mod arasında her zaman bir kod satırını değiştirmek kadar kolay bir şekilde geçiş yapabilirsiniz (heck, hatta yapılandırılabilir hale getirin). Bu nedenle, uygulamanızın paket boyutuna veya işlem gücüne ne kadar optimize edilmesi gerektiğinden emin değilseniz, tasarruf ilginç bir seçenek olabilir.

Not: Thrift-binary, thrift-compact ve protobuf dahil birçok serileştiriciyi karşılaştıran thekvs ile bu mükemmel kıyaslama projesini görün: https://github.com/thekvs/cpp-serializers

Not: Bu seçeneği de veren YAS adında başka bir seri hale getirici var ama yukarıdaki bağlantıyı şemadan daha az görüyoruz.

0
Sinapse