background image

neutral, platform-neutral, extensible way of serializing structured data ,好吧,他只是一个序列
化格式,而和

 hessian , java 序列化有所不同的是, protocol buffers 可以用通过定义好数据

结构的

 proto ( IDL )文件产生目标语言代码,大大了减少了开发量,不过遗憾的是生成

的代码有很强的侵入性,并不能产生我们需要的

pojo java 对象。

不过即使是这样,我们也从

 google  protocol buffers 身上学到了很多东西。

1

编码的压缩,采用

 Base 128 Varints 序列化数字,减少网络传输开销。

2

非自描述数据,

 protocol buffers 将每个数据结构的描述信息嵌入到代码中,因此只

需要传输数据过来,就可以反序列化出来该数据结构的实例了。
3

Immutable object

 , protocol buffers 在生成的 java 代码中采用 builder&message 模式,

 message 是一个不能变的对象,即只有 getter ,没有 setter ,而每一个 message 的生成
由一个对应的

 builder 来完成,从这点可以看出, google 已经用上了函数式编程。

4

Rpc 异步话,虽然 protocol buffers 的 rpc 很简陋,但是一开始就只提供异步

 

callback 调用形式,可见 google 已经实现异步话,如果在互联网行业的人会知道,这点
是相当不容易。

Facebook thrift  4 月 1 号,呵呵,没错, thrift 是 Facebook 于 07 年愚人节开源出来的,
有点

 google 的作风。 Thrift 是 facebook 自己的一套跨语言实现。有人会问这个和 protocol 

buffers 有啥区别。 Ok ,先看看它的定义吧。

Thrift is a software framework for scalable cross-language services development. It combines a 
software stack with a code generation engine to build services that work efficiently and seamlessly 
between C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk, and OCaml.

说得很清楚是一个跨语言的服务开发框架。包括的功能有

 code generation (代码生成,

 

protocol buffers 也有), cross-language (跨语言, protocol buffers 也有), service 
development (好吧,这个 protocol buffers 也有)。晕倒,这样看起来,它和 google protocol 
buffers 完全是同一个领域的东西,而其有点重复发明轮子的味道。

刚开始,我们也有这样一个疑惑,好吧,接着往下看,

 here we go 。其实除了这些共同性以

外(都是解决跨语言问题嘛),

 thrift 还是和 protocol buffers 有很大不同的。不同点如下:

1)  提供一个完整的 service stack ,定义了一整套的 rpc 服务框架栈,这个 protocol buffers 
是没有,这个绝对是

 thrift 的利器,如果你想要开发一个服务, thrift 甚至有个栈层的实现,

我靠,爽。

2)  Ok ,在 thrift 论文有这样一句话。 Thrift enforces a certain messaging structure when 
transporting data, but it is agnostic to the protocol encoding in use. 嗯哼,我懂了,它是不会管,
你到底采用哪种序列化方式的,

hessian ,xml 甚至是 protocol buffers 。Oh ,my god 。

3)  接下来不得不膜拜一下 thrift 的 service 接口的强大了,多参,异常,同步,异步调用
的支持,这正是我们想要的

, 瞬间给 protocol buffers 比下去了。

4)  多集合的支持 map , set 都有,让你爽歪歪。 Protocol buffers 颤抖吧。

这时候我们亲爱的读者就会问了,那我们的问题不就解决了吗,就是

 thrift 。我笑而不语 ,