avro-rpc

转自:https://code.google.com/p/avro-rpc/

avro-rpc 是一个支持跨语言实现的RPC服务框架。非常轻量级,实现简洁,使用方面,同时也方便使用者进行二次开发,逻辑上该框架分为两层:

1:网络传输层使用Netty的Nio实现。

2:协议层可扩展,目前支持的数据序列化方式有Avro,Protocol Buffers ,Json, Hessian,Java序列化。 使用者可以注册自己的协议格式及序列化方式。

主要特点:

1:客户端传输层与应用层逻辑分离,传输层主要职责包括创建连接,连接查找与复用,传输数据,接收服务端回复后回调应用层;

2:客户端支持同步调用和异步调用。服务异步化能很好的提高系统吞吐量,建议使用异步调用。为防止异步发送请求过快,客户端增加了“请求流量限制”功能;

3:服务端有一个协议注册工厂和序列化注册工厂。这样方便针对不同的应用场景来定制服务方式。RPC应该只是服务方式的一种。在分布式的系统架构中,分布式节点之间的通信会存在多种方式,比如MQ的TOP消息,一个消息可以有多个订阅者。因此avro-rpc不仅仅是一个RPC服务框架,还是一个分布式通信的一个基础骨架,提供了很好的扩展性;

4:Avro序列化框架是Hadoop下的一个子项目,其特点是数据序列化不带标签,因此序列化后的数据非常小。支持动态解析, 不像Thrift 与 Protocol Buffers必须根据IDL来生成代码,这样侵入性有点强。性能很好,基本上和 Protocol Buffers差不多;

运行性能测试实例

1. 启动服务端 code.google.dsf.test.StartServerTest

2. 运行客户端 code.google.dsf.test.performance.RPSTest

测试对象,客户端采用异步方式发送一个POJO(10个属性字段)对象 两台,一台运行客户端,一台运行服务端,配置如下: • CPU: E5645 @ 2.40GHz 2 core • Memory: 2G • Network: 1000Mb

JVM Options: -server -XX:+UseParallelGC -XX:+AggressiveOpts -XX:+UseFastAccessorMethods -Xms512M -Xmx1024M

最新测试TPS: avro:100937 Protocol Buffers: 122299

最新测试:http://www.iteye.com/topic/1127125

作者:[email protected] http://taohuifei.iteye.com/blog/1685160

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;
  •      测试结果

  • avro-rpc_第1张图片

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

你可能感兴趣的:(json,rpc,hessian,pro)