本篇文章主要介绍了" dubbo典型协议、传输组件、序列化方式组合性能对比测试",主要涉及到方面的内容,对于其他编程jrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播感兴趣的同学可以参考一下:
一、前言Dubbo作为一个扩展能力极强的分布式服务框架,在实现rpc特性的时候,给传输协议、传输框架和序列化方式提供了多种扩展实现,供开发者根据实际场景进行选择...
1package ibusiness;
23import java.util.List;
45import model.*;
67publicinterfaceIBusinessOrder {8public String SendStr(String str);
910public List LoadOrders(List orders);
1112public OrderInfo LoadOrder(OrderInfo order);
13 }
2、服务实现相关代码,测试数据在服务器端不做任何处理原样返回:
1package business;
23import ibusiness.IBusinessOrder;
45import java.util.List;
67import model.*;
89publicclass BusinessOrder implementsIBusinessOrder {10public String SendStr(String str) {
11return str;
12 }
1314public List LoadOrders(List orders) {
15return orders;
16 }
1718public OrderInfo LoadOrder(OrderInfo order) {
19return order;
20 }
21 }
View Code
五、单线程测试
1、测试仅记录rpc调用时间,测试数据的读取组装以及首次建立连接等相关耗时时间不作统计,循环执行100次取平均值。
2、服务消费方测试代码
1import java.util.List;
23import org.springframework.context.ApplicationContext;
4import org.springframework.context.support.FileSystemXmlApplicationContext;
56import com.alibaba.dubbo.rpc.service.EchoService;
7import common.Common;
89import ibusiness.*;
10import model.*;
1112publicclass Program {
13publicstaticvoid main(String[] args) throws Exception {
1415 ApplicationContext ctx = new FileSystemXmlApplicationContext("src//applicationContext.xml");
16 IBusinessOrder orderBusiness = (IBusinessOrder) ctx.getBean("orderBusiness");
1718// EchoService echoService = (EchoService) orderBusiness;19// String status = echoService.$echo("OK").toString();20// if (!status.equals("OK")) {21// System.out.println("orderBusiness out of service!");22// return;23// } else {24// System.out.println("orderBusiness in service !");25// }2627long startMili, endMili;
28int loop = 100;
2930// 单个pojo31try {
32 OrderInfo order = Common.BuildOrder();
33 orderBusiness.LoadOrder(order); // 防止首次连接的开销3435 startMili = System.currentTimeMillis();
36 OrderInfo returnOrder = null;
37for (int i = 0; i < loop; i++) {
38 returnOrder = orderBusiness.LoadOrder(order);
39 }
40 endMili = System.currentTimeMillis();
41 System.out.println("单个pojo 平均传输耗时为:" + ((endMili - startMili) / (float) loop) + "毫秒 ,返回对象BillNumber:" + returnOrder.getBillNumber());
42 } catch (Exception ex) {
43 System.out.println("单个pojo 测试失败!");
44//ex.printStackTrace();45 }
4647// pojo集合 (100)48try {
49 List orderList = Common.BuildOrderList();
50 startMili = System.currentTimeMillis();
51 List returnOrderList = null;
52for (int i = 0; i < loop; i++) {
53 returnOrderList = orderBusiness.LoadOrders(orderList);
54 }
55 endMili = System.currentTimeMillis();
56 System.out.println("pojo集合 (100) 平均传输耗时为:" + ((endMili - startMili) / (float) loop) + "毫秒 ,返回记录数:" + returnOrderList.size());
57 } catch (Exception ex) {
58 System.out.println("pojo集合 (100) 测试失败!");
59 }
6061// 1K String62try {
63 String str1k = Common.Build1KString();
64 startMili = System.currentTimeMillis();
65 String returnStr1k = null;
66for (int i = 0; i < loop; i++) {
67 returnStr1k = orderBusiness.SendStr(str1k);
68 }
69 endMili = System.currentTimeMillis();
70 System.out.println("1K String 平均传输耗时为:" + ((endMili - startMili) / (float) loop) + "毫秒,返回字符长度:" + returnStr1k.length());
71 } catch (Exception ex) {
72 System.out.println("1K String 测试失败!");
73 }
7475// 100K String76try {
77 String str100K = Common.Build100KString();
78 startMili = System.currentTimeMillis();
79 String returnStr100k = null;
80for (int i = 0; i < loop; i++) {
81 returnStr100k = orderBusiness.SendStr(str100K);
82 }
83 endMili = System.currentTimeMillis();
84 System.out.println("100K String 平均传输耗时为:" + ((endMili - startMili) / (float) loop) + "毫秒,返回字符长度:" + returnStr100k.length());
85 } catch (Exception ex) {
86 System.out.println("100K String 测试失败!");
87 }
8889// 1M String90try {
91 String str1M = Common.Build1MString();
92 startMili = System.currentTimeMillis();
93 String returnStr1M = null;
94for (int i = 0; i < loop; i++) {
95 returnStr1M = orderBusiness.SendStr(str1M);
96 }
97 endMili = System.currentTimeMillis();
98 System.out.println("1M String 平均传输耗时为:" + ((endMili - startMili) / (float) loop) + "毫秒,返回字符长度:" + returnStr1M.length());
99 } catch (Exception ex) {
100 System.out.println("1M String 测试失败!");
101 }
102103 System.out.println("all test done!");
104 }
105 }
View Code
3、测试数据耗时记录
A、dubbo 协议、netty 传输、hessian2 序列化
单个POJO | 0.958毫秒 |
POJO集合 (100) | 1.438毫秒 |
1K String | 0.68毫秒 |
100K String | 4.262毫秒 |
1M String | 32.473毫秒 |
B、dubbo 协议、netty 传输、dubbo 序列化
单个POJO | 1.45毫秒 |
POJO集合 (100) | 3.42毫秒 |
1K String | 0.94毫秒 |
100K String | 4.35毫秒 |
1M String | 27.92毫秒 |
C、dubbo 协议、netty 传输、java 序列化