问题
DUBBO 2.5.3版本使用分组group进行注册存在bug,在使用zk注册或者注销的时候,dubbo是依据接口全称创建zk节点,并未设置分组节点和版本节点,在集群较大,分组较多的情况下,一旦项目注册或者注销的服务较多,dubbo会频繁的读取相同的节点(仅以接口为路径),这就造成了zk会有大量重复输出流量,导致提供服务的能力急速下降。
解决方案
修复的方法就是注册和查找服务的时候,有分组的加上一个分组zk节点,这样就能准确找到具体的服务而不是找这个接口下面所有服务。以下是在测试环境测试的结果
压测验证数据
测试材料如下
实例
|
接口个数
|
分组个数
|
dubbo服务数
|
服务端4台
|
1
|
60
|
单台注册60个服务
|
消费端4台
|
1
|
60
|
单台消费60个服务
|
修复前后测试结果对比(ps:流量监控使用nload):
初次启动:
同时启动服务器个数
|
zk流量(修复前)
|
zk流量(修复后)
|
流量 持续时间(修复前)
|
流量 持续时间(修复后)
|
1台提供者
|
12Mbit/s
|
0.3Mbit/s
|
5s
|
5s
|
2台提供者
|
25Mbit/s
|
0.3Mbit/s
|
5s
|
5s
|
1台消费者
|
7Mbit/s
|
0.4Mbit/s
|
8s
|
5s
|
2台消费者
|
9Mbit/s
|
0.4Mbit/s
|
10s
|
10s
|
重启服务端:
同时启动服务个数
|
注销服务时zk流量(修复前)
|
注销服务时zk流量(修复后)
|
注销服务时流量持续时间(前)
|
注销服务时流量持续时间(后)
|
注册服务时流量(前)
|
注册服务时流量(后)
|
注册服务时流量 持续时间(前)
|
注册服务时流量 持续时间(后)
|
1台服务端
|
19Mbit/s
|
1.1Mbit/s
|
4s
|
1s
|
82Mbit/s
|
1.1Mbit/s
|
30s
|
1s
|
2台服务端
|
34Mbit/s
|
1.5Mbit/s
|
6s
|
1s
|
110Mbit/s
|
1.2Mbit/s
|
180s
|
1s
|