分布式应用系统中,系统之间的通讯的质量决定了系统的可用性,当然很多可以选择的技术:XML-RPC,RMI,SOAP,CORBA,JMS,EJB,NIO等。在传输数据的过程中,数据包越小,占用的带宽就越少,同等条件下资源利用就会越小。目前基于SOA的ESB系统中,很多采用NIO来传输数据,就涉及到对象的序列化的问题。

    本文主要讨论jdk自带序列化,hessian,Google的protobuf之间的性能比较,主要指标有以下三个:(执行序列化测试1次;1个数据对象,100个,1000个)

  1. 序列化文件大小
  2. 序列化的读取读取性能
  3. 序列化的平均写入性能

    性能指标结果(纵坐标为耗时)

    文件大小:hessian最小,传输带宽方面占有优势。

    写操作:写操作在大批量的时候,protobuf比hessian和jdk有优势。

    读操作:读取方面protobuf仍然占有优势,但是总体上来书,hessian和protobuf差距不大。

    性能外的问题:

1:易用性:hessian比protobuf使用起来要简单的多,google需要预先生成一个*.proto文件,使用的时候需要依赖它的build接口,和GAE中的web.py的模板文件一样,预处理真是方便的框架,并没有让用户觉得爽。这方面hessian占优势。

2:学习成本:老牌hessian在java平台上广结良缘,文档和FAQ相当齐全,学习成本相对较低。google搜索protobuf google显示21.1W条,而hessian java却有54.4W条。

3:跨平台:hessian支持的语言:java,c++,python,php,erlang,ruby等,主要是针对java平台的,C++版本是05年的和python版本是07年的,更新都较慢;protobuf这块做的就比较好,如果系统中需要不同语言的就选择protobuf了,单java语言的还是选择hessian比较好。

    其他方面的知识:

    二进制协议比基于xml协议(Burlap和apache XML-RPC)的效率要高的多(ORMI的HTTP隧道启用除外),XML-RPC经过测试无论是文件大小和速度都没有优势。