Her ikisi de aynı özelliklerin çoğunu sunar; Ancak, bazı farklılıklar vardır:
Settipine sahip
Temel olarak, oldukça eşdeğerdirler (Protokol Tamponları ile okuduklarımdan biraz daha verimli).
Diğer bir önemli fark, varsayılan olarak desteklenen dillerdir.
Her ikisi de diğer platformlara genişletilebilir, ancak bunlar kullanıma hazır diller.
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.
option optimize_for = SPEED.
Farklılıklara daha yakından bakmak için, kaynak kodunun bu açık kaynaklı proje 'e eşit olduğuna dikkat edin.
Dediğim gibi "Thrift vs Protocol buffers" topic:
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.
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.
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.
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
Ve wiki'ye göre Thrift çalışma zamanı Windows'ta çalışmıyor.
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.
Birincisi, protobuf tam bir RPC uygulaması değil. Onunla gitmek için gRPC gibi bir şey gerektirir.
gPRC, Thrift'e kıyasla çok yavaş:
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.
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.