thrift和google protobuffer各有什么优劣

 我来答
梅雪儿vA
2013-11-13 · 超过76用户采纳过TA的回答
知道答主
回答量:200
采纳率:50%
帮助的人:136万
展开全部
Google就是Google,就算是推白菜出来,也一样能让人侧目。其实protocol buffers也不是什么新鲜的概念,且不说传统的ASN.1, ICE这些有点类似的东西,facebook一年前就推出了thrift,应该说定位是非常的接近的。也有谣传说是先有了protocol buffers在google内部流行,然后google的人跳槽到facebook,就出了thrift这个东西……呵呵,停止八卦,言归正传。 观察法看到的优缺点 Thrift: 支持的语言更广泛一些c++, java, python,ruby, csharp, haskell, ocmal, erlang, cocoa, php, squeak(真够变态的) protobuf 目前还是只支持c++, java, python, 其他语言有待开发. Thrift提供的功能更丰富一些: Thrift提供了简单的RPC构架(其实不简单了, block, nonblock的都有了…..) protobuf好像一心一意做好自己的事情,只提供了序列化和反序列化的功能。 Thrift支持多种协议格式. Thrift的代码实现,有专门的TProtocol和TTransport抽象,相互配合,可以实现多种协议,方便集成各种传输方式。至少目前Thrift就能使用json作为序列化协议。 protobuf好像只安心一种协议,并下决心把这个格式做好。输入输出也是标准的stream. 认真的说也不完全这样,protobuf为了调试方便,也提供了Text_Fromat功能,这个也算一个nonbinary格式支持,这样看来完全新协议还是有可能的。 Thrift还提供了不少语言的C module(性能啊,都是性能啊) protobuf全部pure language实现, 反正现在已经都5到10倍速度了,不在乎了….. thrift目前不支持Windows平台,至少c++语言的runtime library和generated code是不不能在windows平台上使用的。(这真有点让人难以接受啊,现代科技这么发达,还有怪兽boost,支持windows有这么难吗?) protobuf没有这个问题,提供了visual studio的项目文件,可以很顺利的在windows平台下编译。(题外话: 如果不知道googletest怎么在windows平台上使用,可以参考protobuf的测试用例)。 The Thrift C++ runtime library does not currently work on Windows. This means that you’ll be able to compile ThriftIDL files to C++/Java/Python/etc., but you won’t be able to compile and run the generated C++ code under Windows. thrift wiki protobuf侧重点是语言表达,同时在存储效率上也下了不少功夫。用protobuf来直接读写数据结构相当的方便。 thrift侧重点是构建夸语言的可伸缩的服务,特点就是支持的语言多,同时提供了完整的rpc service framework,可以很方便的直接构建服务,不需要做太多其他的工作。 数据类型相对固定的情况下,不论是thrift还是protobuf都会比直接处理xml要方便很多。不管是dom还是类sax,总没有直接出数据结构访问来的方便啊。 提问者 的感言: 谢谢你帮了我大忙!
Storm代理
2023-07-25 广告
StormProxies是一家可靠的代理服务提供商,提供原生IP(住宅原生IP)和高匿名代理服务。以下是关于StormProxies的原生IP服务的一些信息:1. 住宅原生IP:StormProxies提供的住宅原生IP是指从真实的家庭或企... 点击进入详情页
本回答由Storm代理提供
似灵杉0Ey
2015-08-27 · TA获得超过313个赞
知道小有建树答主
回答量:341
采纳率:55%
帮助的人:145万
展开全部
数据类型

protobuf

thrift

protobuf

thrift

protobuf

thrift

protobuf

thrift

double

double

float

byte

i16

int32

i32

int64

i64

uint32

uint64

sint32

sint64

fixed32

fixed64

sfixed32

sfixed64

bool

bool

string

string

bytes

binary

message

struct

enum

enum

service

service

综合对比

protobuf

thrift

功能特性

主要是一种序列化机制

提供了全套RPC解决方案,包括序列化机制、传输层、并发处理框架等

支持语言

C++/Java/Python

C++, Java, Python, Ruby, Perl, PHP, C#, Erlang, Haskell

易用性

语法类似,使用方式等类似

生成代码的质量

可读性都还过得去,执行效率另测

升级时版本兼容性

均支持向后兼容和向前兼容

学习成本

功能单一,容易学习

功能丰富、学习成本高

文档&社区

官方文档较为丰富,google搜索protocol buffer有2000W+结果,google group被墙不能访问

官方文档较少,没有API文档,google搜索apache thrift仅40W结果,邮件列表不怎么活跃

性能对比
由于thrift功能较protobuf丰富,因此单从序列化机制上进行性能比较,按照序列化后字节数、序列化时间、反序列化时间三个指标进行,对thrift的二进制、压缩、protobuf三种格式进行对比。

测试方法:取了15000+条样本数据,分别写了三个指标的测试程序,在我自己的电脑上执行,其中时间测试循环1000次,总的序列化/反序列化次数1500W+。

平均字节数:

thrift二进制

535

thrift压缩

473

protobuf

477

序列化(1500W次)时间(ms):

thrift二进制

306034

thrift压缩

304256

protobuf

177652

反序列化(1500W次)时间(ms):

thrift二进制

287972

thrift压缩

315991

protobuf

157192

thrift的时间测试可能不是很准,由于thrift产生代码的复杂性,编写的测试代码为了适应其接口,在调用堆栈上可能有一些额外开销。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小花椒Daddy
2015-08-05 · 超过29用户采纳过TA的回答
知道答主
回答量:59
采纳率:50%
帮助的人:49.6万
展开全部
thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 这些编程语言间无缝结合的、高效的服务。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式