论坛首页 Java企业应用论坛

支持多序列化的RPC框架——avro-rpc性能测试

浏览 16188 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-10-11   最后修改:2012-10-11

1:介绍

avro-rpc是一个支持多序列化方式的RPC框架,目前支持Avro,Protocol Buffers ,Json,Hessian,Java序列化方式。网络传输层使用Netty的NIO实现,协议层可扩展,用户可以自定义协议格式及注册新的序列化方式。


基本特点

        1:跨语言,可作为跨语言系统之间的分布式服务框架。

        2:简洁高效易扩展,代码简洁,性能较好,结构清晰,方便扩展。

        3:基本功能完善。同步调用,异步调用,连接复用,自动重连,超时管理,异步发送流量控制等;

        4:支持多序列化方式,可以根据不同的平台和场景选择合适的序列化方式了;



项目地址:http://code.google.com/p/avro-rpc/

SVN地址:https://avro-rpc.googlecode.com/svn/



2:性能测试

  •      测试环境:两台PC,一台运行服务端,一台运行客户端端。配置:CPU: E5645 @ 2.40GHz 2 core Memory: 2G Network: 1000Mb。
  •      测试方法:客户端异步发送一个POJO对象(10个属性字段),服务端直接返回该对象。成功调用5千万次,统计TPS;
  •      测试结果


  •  Protocol Buffers 序列化方式性能最佳,但是 Protocol Buffers需要根据IDL生成代码,具有一定的侵入性,作为POJO的数据传输对象(DTO)是不适合代码生成的,Protocol Buffers 适合比较静态化的数据结构;
  • FastJson是阿里开源的一个JSON框架,性能确实不错,如果是Java平台完全可以使用 FastJson;
  •  这里测试Avro使用的是Generic模式,如果使用静态模式性能会更好, Avro 最大的优点在于数据序列化不需要生成代码,支持动态模式,而且编码后的数据非常小,非常适合跨平台的数据交换方式;
  • Java自带的序列化方式吞吐量很低;
  • Hessian表现一般。

 

  • 大小: 20.9 KB
   发表时间:2012-10-12  
好像出现很久了,但是用的好像很少...
0 请登录后投票
   发表时间:2012-10-13   最后修改:2012-10-13
finallygo 写道
好像出现很久了,但是用的好像很少...

avro-rpc是最近才完成的一个开源项目。是从我们公司现有的“分布式服务框架”中重构,剥离出来的一个基本的RPC框架。
0 请登录后投票
   发表时间:2012-10-14  
taohuifei 写道
finallygo 写道
好像出现很久了,但是用的好像很少...

avro-rpc是最近才完成的一个开源项目。是从我们公司现有的“分布式服务框架”中重构,剥离出来的一个基本的RPC框架。

哦??能不能发个简单的例子呢??
0 请登录后投票
   发表时间:2012-10-15  
在那个例子里面,为什么还要在 netty的NettyExecutionHandler里面还要开个线程池来处理请求?
0 请登录后投票
   发表时间:2012-10-15  
性能测试例子
1:启动服务 code.google.dsf.test.StartServerTest
2:运行客户端性能测试 code.google.dsf.test.performance.RPSTest
0 请登录后投票
   发表时间:2012-10-15  
char1st 写道
在那个例子里面,为什么还要在 netty的NettyExecutionHandler里面还要开个线程池来处理请求?

Netty的work io线程应该只需要负责IO的读写操作,实际方法的处理应该交给业务线程池来处理,NettyExecutionHandler就是一个业务处理线程池,使用线程池是为了提高系统的并发能力。
0 请登录后投票
   发表时间:2012-10-16  
赞一个,
rpc过程除了serialize,还有deserialize和数据传输。

可以再对比下数据量大小,反序列化性能。
整体的rpc效率。
0 请登录后投票
   发表时间:2012-10-16   最后修改:2012-10-16
kimmking 写道
赞一个,
rpc过程除了serialize,还有deserialize和数据传输。

可以再对比下数据量大小,反序列化性能。
整体的rpc效率。

这个性能测试是本身一个完整RPC过程测试,包括:客户端将数据序列化,然后将数据传输到服务端,服务端接收到数据后,将数据反序列化,然后由业务线程池来执行这个方法调用,然后将结果序列化,并发送给客户端,客户端将接收到的数据反序列化,回调
0 请登录后投票
   发表时间:2012-10-16  
LZ能写个跨语言的例子么? 如果是单纯的java对java的话只用netty就可以实现了。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics