Google'ın Protokol Tamponlarına karşı Apache Thrift'in en büyük artıları ve eksileri nelerdir?
Google'ın Protokol Tamponlarına karşı Apache Thrift'in en büyük artıları ve eksileri nelerdir?
Yanıtlar:
Her ikisi de aynı özelliklerin çoğunu sunar; ancak, bazı farklılıklar vardır:
Set
tip varTemel olarak, oldukça eşdeğerdir (Protokol Tamponları ile okuduğumdan biraz daha verimli).
map
de
Bir diğer önemli fark, varsayılan olarak desteklenen dillerdir.
Her ikisi de diğer platformlara genişletilebilir, ancak bunlar kutunun dışında mevcut olan dil bağlamalarıdır.
RPC başka bir önemli farktır. Thrift, Protokol Tamponlarının çoğunlukla tek başına bir veri değişim formatı olarak tasarlandığı yerlerde RPC istemcilerini ve sunucularını uygulamak için kod üretir.
option optimize_for = SPEED
.Farklılıklara daha yakından bakmak için bu açık kaynak projesindeki kaynak kodu farklarına bakın .
Dediğim gibi "Thrift vs Protokol arabellekleri" konu:
Atfen JSON karşılaştırma v Protobuf vs Thrift :
Ek olarak, bu çözümler için karar verebilecek birçok ilginç ek araç vardır. Protobuf için örnekler: Protobuf-wireshark , protobufeditor .
Protokol Tamponları daha kompakt bir temsile sahip gibi görünüyor, ancak bu sadece Thrift teknik incelemesini okumaktan aldığım bir izlenim. Kendi sözleriyle:
Koddaki basitlik ve netlik amacıyla bazı aşırı depolama optimizasyonlarına (yani, küçük tam sayıları ASCII'ye paketleme veya 7 bitlik bir devam biçimi kullanma) karar verdik. Bu değişiklikler, bunları gerektiren performans açısından kritik bir kullanım durumu ile karşılaştığımızda ve karşılaştığımızda kolayca yapılabilir.
Ayrıca, sadece benim izlenimim olabilir, ancak Protokol Tamponları, yapısal sürüm oluşturma konusunda bazı daha kalın soyutlamalara sahip gibi görünüyor. Thrift'in bazı sürüm oluşturma desteği var, ancak bunun gerçekleşmesi biraz çaba gerektiriyor.
Python'daki protobuff'a kıyasla metin tabanlı bir protokolle daha iyi performans elde edebildim. Ancak, hiçbir tip kontrol veya diğer fantezi utf8 dönüşüm, vb ... hangi protobuff sunuyor.
Yani, serileştirme / serileştirme ihtiyacınız olan tek şeyse, muhtemelen başka bir şey kullanabilirsiniz.
http://dhruvbird.blogspot.com/2010/05/protocol-buffers-vs-http.html
Henüz belirtilmeyen bir şey, hem bir pro hem de con (ve her ikisi için de aynı olabilir) ikili protokoller olmasıdır. Bu, daha kompakt bir temsile ve muhtemelen daha fazla performansa (artılara) izin verir, ancak daha az okunabilirlik (veya daha çok hata ayıklama) ile bir con.
Ayrıca, her ikisi de xml (ve belki de json) gibi standart biçimlerden daha az araç desteğine sahiptir.
(EDIT) Hem boyut hem de performans farklılıklarını ele alan ve diğer bazı biçimler (xml, json) için de sayılar içeren İlginç bir karşılaştırma .
Ve wiki'ye göre Thrift çalışma zamanı Windows'ta çalışmaz.
ProtocolBuffers daha hızlıdır.
Burada güzel bir kriter var:
http://code.google.com/p/thrift-protobuf-compare/wiki/Benchmarking
Avro daha da hızlı olduğu için Avro'ya bakmak da isteyebilirsiniz.
Microsoft'un burada bir paketi var:
http://www.nuget.org/packages/Microsoft.Hadoop.Avro
Bu arada, gördüğüm en hızlısı Cap'nProto ;
AC # uygulaması Marc Gravell'in Github deposunda bulunabilir .
Bu noktaların çoğunun Thrift'in çeşitli yöntemler (ikili, XML, vb.) Kullanarak verileri serileştirme yeteneğine sahip olan bir RPC çerçevesi olduğu temel gerçeğini kaçırdığını düşünüyorum.
Protokol Tamponları tamamen serileştirme için tasarlanmıştır, Thrift gibi bir çerçeve değildir.
Birincisi, protobuf tam bir RPC uygulaması değildir. Onunla gitmek için gRPC gibi bir şey gerektirir.
gPRC Thrift'e kıyasla çok yavaş:
Burada bazı mükemmel noktalar var ve birinin yolunun kesişmesi durumunda bir tane daha ekleyeceğim.
Thrift size thrift-binary ve thrift-compact (de) serileştirici arasında seçim yapma seçeneği sunar, thrift-binary mükemmel bir performansa ancak daha büyük paket boyutuna sahipken, thrift compact size iyi sıkıştırma sağlar, ancak daha fazla işlem gücüne ihtiyaç duyar. Bu kullanışlıdır, çünkü bu iki mod arasında her zaman bir kod satırını değiştirmek kadar kolay geçiş yapabilirsiniz (heck, hatta yapılandırılabilir hale getirin). Dolayısıyla, uygulamanızın paket boyutu veya işlem gücü için ne kadar optimize edilmesi gerektiğinden emin değilseniz, tasarruf ilginç bir seçim olabilir.
Not: thekvs
Tasarruflu ikili, tasarruflu kompakt ve protobuf da dahil olmak üzere birçok serileştiriciyi karşılaştıran bu mükemmel kıyaslama projesine bakın : https://github.com/thekvs/cpp-serializers
Not: YAS
Bu seçeneği de veren başka bir serileştirici var, ancak şema olmadan yukarıdaki bağlantıya bakın.
Ayrıca, desteklenen tüm dillerin tasarruf veya protobuf ile tutarlı bir şekilde uyumlu olmadığına dikkat etmek de önemlidir. Bu noktada, altta yatan serileştirmeye ek olarak modüllerin uygulanmasıyla ilgilidir. Kullanmayı planladığınız dil için karşılaştırmaları kontrol etmeye özen gösterin.