本节我们来比较一下Json、FlatBuffers、Protocol Buffer在vertx中使用时的占用资源情况比较。
方式阐述
启动一个消费端进程和一个生产端进程,其中生产端发布一个web服务,方便使用ab测试工具进行测试(其中消费端和生产端分布在两台机器)。
ab调用生产端web -> 生产端通过bus传输消息 -> 消费端通过bus回复消息
消费端机器规格 4核 2.6G HZ 16G
生产端机器规格 6核 3.2G HZ 16G
Json序列化
生产端
JsonObject jsonObject = new JsonObject();
for (int i=0; i<500; i ++){
jsonObject.put("name_" + i,"wan_ke");
}
//通过eventbus发送请求
eventBus.request("com.xiaoniu.bus", jsonObject, msg -> {
if (msg.succeeded()) {
if (msg.result() != null){
String data = ((JsonObject) msg.result().body()).encodePrettily();
}
} else {
System.err.println(msg.cause().getMessage());
msg.cause().printStackTrace();
}
}
);
消费端
eventBus.consumer("com.xiaoniu.bus", msg -> {
System.out.println("收到消息");
if (msg != null && msg.body() instanceof JsonObject){
String receive_data = ((JsonObject) msg.body()).encodePrettily();
}
JsonObject jsonObject = new JsonObject();
for (int i=0;i<500;i++){
jsonObject.put("name_"+ i,"wan_ke_receive");
}
msg.reply(jsonObject);
});
生产端和消费端均启动后,进行三次,每次间隔2分钟。
第一次执行ab -n10000 -c10 http://192.168.2.112:7777/index
(并发度10,1万次请求)
第二次执行ab -n20000 -c20 http://192.168.2.112:7777/index
(并发度10,2万次请求)
第三次执行ab -n30000 -c20 http://192.168.2.112:7777/index
(并发度20,3万次请求)
资源 | cpu | 内存 |
---|---|---|
第一次 | 生产端(初值:12% 峰值:71% 末值:12%)消费端(初值:2% 峰值:16% 末值:4%) | 生产端(初值:50M 峰值:294M 末值:131M )消费端(初值:50M 峰值:150M 末值:150M) |
第二次 | 生产端(峰值:62% 末值:12%)消费端(峰值:10% 末值:8%) | 生产端(峰值:188M 末值:160M)消费端(峰值:120M 末值:120M) |
第三次 | 生产端(峰值:60% 末值:16%)消费端(峰值:10% 末值:3%) | 生产端(峰值:380M 末值:100M )消费端(峰值:230M 末值:110M) |
Proto序列化
生产端
ProtoCommonMsg protoCommonMsg = new ProtoCommonMsg();
for (int i =0; i<500 ; i ++){
protoCommonMsg.put("name_" + i,"wan_ke");
}
//通过eventbus发送请求
eventBus.request