Dubbo RPC服务框架支持丰富的传输协议、序列化方式等通讯相关的配置和扩展。dubbo执行一次RPC请求的过程大致如下:消费者(Consumer)向注册中心(Registry)执行RPC请求,注册中心分配服务URL并路由到具体服务提供方(Provider),消费者和服务提供方建立网络连接,服务提供方在本地创建连接池对象并提供远程服务,对于长连接类型协议(如dubbo协议)将保持连接,减少握手认证,调用过程中可以避免频繁建立和断开连接导致的性能开销,保持长连接需要有心跳包的发送,所以对于非频繁调用的服务保持连接同样会有消耗。更多关于dubbo详细介绍请参照官方文档(http://alibaba.github.io/dubbo-doc-static/Home-zh.htm)。

  1、支持常见的传输协议:RMI、Dubbo、Hessain、WebService、Http等,其中Dubbo和RMI协议基于TCP实现,Hessian和WebService基于HTTP实现。

  2、传输框架:Netty、Mina、以及基于servlet等方式。

  3、序列化方式:Hessian2、dubbo、JSON(fastjson 实现)、JAVA、SOAP 等。

  本文主要基于dubbo框架下的通讯协议进行性能测试对比。

 

二、测试方案

  基于dubbo 2.5.3框架,使用zookeeper作为dubbo服务注册中心,分别以单线程和多线程的方式测试以下方案:

  Protocol       Transporter       Serialization     Remark
A  dubbo 协议  netty  hessian2  
B  dubbo 协议  netty  dubbo  
C  dubbo 协议  netty  java  
D  RMI 协议  netty  java  
E  RMI 协议  netty  hessian2  
F  Hessian 协议  servlet  hessian2  Hessian,基于tomcat容器     
G  WebService 协议    servlet  SOAP  CXF,基于tomcat容器  

 

三、传输测试数据

1、单POJO对象,嵌套复杂集合类型

2、POJO集合,包含100个单POJO对象

3、1K字符串

4、100K字符串

5、1M字符串 

 

四、服务接口和实现

  1、服务接口相关代码: 

 1 package ibusiness;
 2 
 3 import java.util.List;
 4 
 5 import model.*;
 6 
 7 public interface IBusinessOrder { 
 8     public String SendStr(String str); 
 9 
10     public List<OrderInfo> LoadOrders(List<OrderInfo> orders); 
11 
12     public OrderInfo LoadOrder(OrderInfo order);
13 }

  2、服务实现相关代码,测试数据在服务器端不做任何处理原样返回:

 1 package business;
 2 
 3 import ibusiness.IBusinessOrder;
 4 
 5 import java.util.List;
 6 
 7 import model.*;
 8 
 9 public class BusinessOrder implements IBusinessOrder {
10     public String SendStr(String str) {
11         return str;
12     }
13 
14     public List<OrderInfo> LoadOrders(List<OrderInfo> orders) {
15         return orders;
16     }
17 
18     public OrderInfo LoadOrder(OrderInfo order) {
19         return order;
20     }
21 }
View Code

相关文章: