thrift和google protobuffer各有什么优劣
3个回答
展开全部
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 广告
2023-07-25 广告
StormProxies是一家可靠的代理服务提供商,提供原生IP(住宅原生IP)和高匿名代理服务。以下是关于StormProxies的原生IP服务的一些信息:1. 住宅原生IP:StormProxies提供的住宅原生IP是指从真实的家庭或企...
点击进入详情页
本回答由Storm代理提供
展开全部
数据类型
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产生代码的复杂性,编写的测试代码为了适应其接口,在调用堆栈上可能有一些额外开销。
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产生代码的复杂性,编写的测试代码为了适应其接口,在调用堆栈上可能有一些额外开销。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 这些编程语言间无缝结合的、高效的服务。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询