======
基于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、服务实现相关代码,测试数据在服务器端不做任何处理原样返回:
View Code
五、单线程测试
=======
1、测试仅记录rpc调用时间,测试数据的读取组装以及首次建立连接等相关耗时时间不作统计,循环执行100次取平均值。
2、服务消费方测试代码
View Code
3、测试数据耗时记录
A、dubbo 协议、netty 传输、hessian2 序列化
<dubbo:protocol name=“dubbo” server=“netty” port=“30001” serialization=“hessian2” />
单个POJO | 0.958毫秒 |
POJO集合 (100) | 1.438毫秒 |
1K String | 0.68毫秒 |
100K String | 4.262毫秒 |
1M String | 32.473毫秒 |
B、dubbo 协议、netty 传输、dubbo 序列化
<dubbo:protocol name=“dubbo” server=“netty” port=“30001” serialization=“dubbo” />
单个POJO | 1.45毫秒 |
POJO集合 (100) | 3.42毫秒 |
1K String | 0.94毫秒 |
100K String | 4.35毫秒 |
1M String | 27.92毫秒 |
C、dubbo 协议、netty 传输、java 序列化
<dubbo:protocol name=“dubbo” server=“netty” port=“30001” serialization=“java” />
单个POJO | 1.91毫秒 |
POJO集合 (100) | 4.48毫秒 |
1K String | 1.0毫秒 |
100K String | 3.3毫秒 |
1M String | 18.09毫秒 |
D、RMI 协议、netty 传输、java 序列化
<dubbo:protocol name=“rmi” server=“netty” port=“1099” serialization=“java” />
单个POJO | 1.63毫秒 |
POJO集合 (100) | 5.15毫秒 |
1K String | 0.77毫秒 |
100K String | 2.15毫秒 |
1M String | 15.21毫秒 |
E、RMI 协议、netty 传输、hessian2 序列化
<dubbo:protocol name=“rmi” server=“netty” port=“1099” serialization=“hessian2” />
单个POJO | 1.63毫秒 |
POJO集合 (100) | 5.12毫秒 |
1K String | 0.76毫秒 |
100K String | 2.13毫秒 |
1M String | 15.11毫秒 |
F、Hessian协议、servlet(tomcat容器)、hessian2 序列化
<dubbo:protocol name=“hessian” port=“8080” server=“servlet” serialization=“hessian2” />
单个POJO | 1.6毫秒 |
POJO集合 (100) | 5.98毫秒 |
1K String | 1.88毫秒 |
100K String | 5.52毫秒 |
1M String | 39.87毫秒 |
G、WebService协议、servlet(tomcat容器)、SOAP序列化
<dubbo:protocol name=“webservice” port=“8080” server=“servlet” />
单个POJO | 7.4毫秒 |
POJO集合 (100) | 34.39毫秒 |
1K String | 6.0毫秒 |
100K String | 7.43毫秒 |
1M String | 34.61毫秒 |
4、性能对比
六、线程测试
1、由于测试机器配置较低,为了避免达到CPU瓶颈,测试设定服务消费方Consumer并发10个线程,每个线程连续对远程方法执行5次调用,服务提供方设置允许最大连接数100个,同时5个连接并行执行,超时时间设置为5000ms, 要求所有事务都能正确返回没有异常,统计包含首次建立连接的消耗时间。
2、服务消费方测试代码
2、测试数据耗时记录
A、dubbo 协议、netty 传输、hessian2 序列化
<dubbo:protocol name=“dubbo” server=“netty” port=“30001” serialization=“hessian2” />
单个POJO | 1165毫秒 |
POJO集合 (100) | 1311毫秒 |
1K String | 1149毫秒 |
100K String | 1273毫秒 |
1M String | 2141毫秒 |
B、dubbo 协议、netty 传输、dubbo 序列化
<dubbo:protocol name=“dubbo” server=“netty” port=“30001” serialization=“dubbo” />
单个POJO | 1220毫秒 |
POJO集合 (100) | 1437毫秒 |
1K String | 1145毫秒 |
100K String | 1253毫秒 |
1M String | 2065毫秒 |
C、dubbo 协议、netty 传输、java 序列化
<dubbo:protocol name=“dubbo” server=“netty” port=“30001” serialization=“java” />
最近我根据上述的技术体系图搜集了几十套腾讯、头条、阿里、美团等公司21年的面试题,把技术点整理成了视频(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分
bbo" server=“netty” port=“30001” serialization=“java” />
[外链图片转存中…(img-FNiwudvP-1718915273147)]
最近我根据上述的技术体系图搜集了几十套腾讯、头条、阿里、美团等公司21年的面试题,把技术点整理成了视频(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分
[外链图片转存中…(img-xs64gm9k-1718915273147)]