测试用例
使用消息大小约200+bytes,每5个消息一个batch写入。分别尝试用1到15个线程来写入,每个线程顺序提交10万次。分别测试了三种数据库拓扑结构:
单节点, 落硬盘。
两个节点(互备)分布在同一台物理机,不写硬盘。
两个节点(互备)分布在不同物理机,不写硬盘。
物理机配置
Ubuntu 12.04 64bit
CPU: 伪32核, Intel(R) Xeon(R) CPU E5-2450 0 @ 2.10GHz 2路8核,每核2物理线程。
内存: 64G
1.2W转 HDD硬盘
单节点落盘
SUN JDK1.8
region type=LOCAL_PERSISTENT
每个线程顺序提交10万次,每个提交产生消息大小1KB。
线程数
消息总量(w)
吞吐(w/s)
总费时(s)
最大延时(ms)
最小延时(ms)
平均延时(ms)
延迟<0.2ms(%)
0.2~0.3ms(%)
0.3~0.4ms(%)
0.4~0.5ms(%)
0.5~0.6ms(%)
0.6~0.7ms(%)
0.7~0.8ms(%)
0.8~0.9ms(%)
0.9~1ms(%)
1~2ms(%)
2~3ms(%)
>3ms(%)
1
10
0.710
14.09
34ms
0.111ms
0.140ms
96.282
1.391
0.509
0.528
0.646
0.204
0.13
0.069
0.042
0.152
0.026
0.021
2
20
1.083
18.46
50ms
0.122ms
0.184ms
69.859
28.392
0.952
0.217
0.177
0.223
0.084
0.017
0.008
0.04
0.013
0.014
3
30
1.084
27.67
14ms
0.127
0.275
10.094
60.910
27.109
1.158
0.226
0.175
0.170
0.083
0.013
0.037
0.005
0.016
4
40
0.938
42.59
16
0.127
0.424
1.052
21.926
43.426
26.830
4.008
0.841
0.447
0.318
0.195
0.371
0.153
0.427
5
50
1.052
47.52
16
0.134
0.474
0.392
2.045
34.254
31.273
16.125
10.665
4.137
0.683
0.199
0.182
0.010
0.029
6
60
0.896
66.90
24
0.127
0.667
0.588
0.978
4.461
32.536
28.472
11.170
8.029
6.539
4.079
2.415
0.119
0.609
7
70
0.892
78.40
23
0.129
0.781
0.651
0.652
2.215
6.607
29.696
26.275
11.817
6.054
5.021
10.237
0.129
0.641
8
80
0.882
90.64
21
0.127
0.904
0.776
0.592
1.028
2.732
6.413
27.144
25.384
12.989
6.913
14.869
0.249
0.905
9
90
0.879
102.36
30
0.125
1.023
0.811
0.554
0.605
2.129
3.413
8.049
24.635
21.603
13.297
23.43
0.513
0.956
10
100
0.773
129.30
31
0.127
1.289
1
2
3
8
22
19
38
1
2
11
110
0.831
132.32
31
0.132
1.293
2
3
3
11
19
52
3
2
12
120
0.708
169.29
33
0.128
1.689
1
2
3
4
9
67
6
4
13
130
0.742
175.08
35
0.122
1.747
1
2
3
3
72
9
5
14
140
0.655
213.73
63
0.127
2.130
1
1
2
3
3
67
13
7
15
150
0.695
215.77
74
0.127
2.145
1
2
3
59
23
7
随着线程的增加,延迟越来越高。
延迟最低为单线程。吞吐最大为2个线程。
2个节点同一台物理机
SUN JDK1.8
节点之间的ping值很低
PING 10.21.234.50 (10.21.234.50) 56(84) bytes of data.
64 bytes from 10.21.234.50: icmp_req=1 ttl=64 time=0.029 ms
64 bytes from 10.21.234.50: icmp_req=2 ttl=64 time=0.010 ms
64 bytes from 10.21.234.50: icmp_req=3 ttl=64 time=0.013 ms
region type=REPLICATE
线程数
消息总量(w)
吞吐(w/s)
总费时(s)
最大延时(ms)
最小延时(ms)
平均延时(ms)
延迟<0.2ms(%)
0.2~0.3ms(%)
0.3~0.4ms(%)
0.4~0.5ms(%)
0.5~0.6ms(%)
0.6~0.7ms(%)
0.7~0.8ms(%)
0.8~0.9ms(%)
0.9~1ms(%)
1~2ms(%)
2~3ms(%)
>3ms(%)
1
10
0.453
22
24
0.167
0.22
28.602
68.758
1.209
0.358
0.182
0.275
0.43
0.037
0.021
0.105
0.011
0.012
2
20
0.883
23
20
0.172
0.223
18.531
79.606
1.109
0.2555
0.087
0.151
0.160
0.02
0.01
0.040
0.006
0.009
3
30
1.250
24
15
0.171
0.238
6.157
91.079
1.995
0.336
0.134
0.097
0.088
0.053
0.017
0.024
0.003
0.011
4
40
1.531
26
35
0.176
0.260
0.613
93.030
5.536
0.358
0.147
0.073
0.102
0.078
0.016
0.027
0.002
0.014
5
50
1.795
27
35
0.182
0.276
0.170
78.992
19.721
0.608
0.173
0.082
0.094
0.082
0.026
0.029
0.003
0.016
6
60
1.957
30
43
0.183
0.305
0.074
60.491
37.097
1.675
0.205
0.078
0.098
0.141
0.057
0.053
0.005
0.018
7
70
2.271
30
121
0.183
0.306
0.042
55.004
42.294
1.954
0.237
0.090
0.117
0.127
0.059
0.042
0.005
0.025
8
80
2.288
35
402
0.172
0.347
0.093
34.439
45.428
18.563
0.736
0.109
0.132
0.230
0.152
0.086
0.004
0.022
9
90
2.337
38
127
0.187
0.383
0.023
29.023
25.185
40.247
4.540
0.322
0.135
0.145
0.205
0.134
0.006
0.029
10
100
2.333
42
114
0.179
0.427
0.052
33.568
11.220
13.234
36.726
4.533
0.276
0.095
0.081
0.175
0.009
0.025
11
110
2.349
47
120
0.175
0.467
0.033
28.684
13.9
5.566
28.193
20.889
2.059
0.217
0.086
0.331
0.009
0.028
12
120
2.082
57
125
0.176
0.574
0.042
29.845
4.956
0.249
2.066
26.614
25.364
9.081
1.265
0.476
0.007
0.030
13
130
2.522
51
136
0.189
0.513
0.002
0.261
6.783
43.324
40.229
8.363
0.611
0.106
0.091
0.186
0.009
0.031
14
140
2.572
54
157
0.183
0.542
0.007
0.136
1.758
26.624
60.827
9.147
0.666
0.265
0.186
0.335
0.009
0.034
15
150
2.499
60
156
0.186
0.597
0.011
18.640
27.529
2.222
0.324
2.615
13.214
24.578
8.468
2.333
0.020
0.041
吞吐跟随线程数量成线性增长,达到一定的线程数时,开始饱和。延迟随线程数量稳定增加。
单线程最大处理能力为4000ops每秒。
最优线程数为7,吞吐达2.27w/s,平均延迟300ms,大部分延迟低于400ms。
2个节点不同物理机
SUN JDK1.7
节点之间的ping值比同一物理机内两节点ping值高10倍。
PING 10.20.205.62 (10.20.205.62) 56(84) bytes of data.
64 bytes from 10.20.205.62: icmp_seq=1 ttl=64 time=0.149 ms
64 bytes from 10.20.205.62: icmp_seq=2 ttl=64 time=0.189 ms
64 bytes from 10.20.205.62: icmp_seq=3 ttl=64 time=0.194 ms
64 bytes from 10.20.205.62: icmp_seq=4 ttl=64 time=0.193 ms
线程数
消息总量(w)
吞吐(w/s)
总费时(s)
最大延时(ms)
最小延时(ms)
平均延时(ms)
延迟<0.2ms(%)
0.2~0.3ms(%)
0.3~0.4ms(%)
0.4~0.5ms(%)
0.5~0.6ms(%)
0.6~0.7ms(%)
0.7~0.8ms(%)
0.8~0.9ms(%)
0.9~1ms(%)
1~2ms(%)
2~3ms(%)
>3ms(%)
1
10
0.125
79
52
0.502
0.796
0
0
0
0
0.764
3.785
84.824
0.803
3.067
5.282
1.259
0.216
2
20
0.319
62
49
0.305
0.624
0
0
1.314
17.7
36.438
8.561
30.812
3.88
0.513
0.692
0.037
0.046
3
30
0.429
69
58
0.307
0.681
0
0
0.457
15.852
24.048
9.224
28.752
17.911
2.861
0.807
0.033
0.051
4
40
0.662
60
60
0.296
0.583
0
0.001
7.109
40.368
12.053
17.930
14.579
6.522
0.942
0.417
0.026
0.049
5
50
0.754
66
89
0.291
0.639
0
0
8.157
34.158
9.326
10.693
12.932
15.839
7.483
1.323
0.026
0.059
6
60
1.078
55
126
0.290
0.546
0
0.001
10.511
43.738
22.532
11.536
7.279
2.928
0.881
0.510
0.016
0.063
7
70
0.821
85
202
0.288
0.838
0
0.001
5.394
16.772
3.608
5.499
8.761
14.181
15.320
30.367
0.032
0.060
8
80
1.507
53
191
0.292
0.525
0
0
7.776
46.092
34.822
8.124
2.021
0.607
0.261
0.229
0.014
0.048
9
90
1.443
62
202
0.291
0.614
0
0.001
5.517
33.818
24.636
9.186
10.279
8.919
4.516
3.067
0.020
0.036
10
100
1.408
71
588
0.286
0.701
0
0.004
6.433
30.369
16.782
6.391
6.769
9.503
11.484
12.193
0.021
0.046
11
110
1.378
79
336
0.284
0.790
0
0.006
8.776
23.965
10.037
5.196
4.941
7.044
9.656
30.270
0.043
0.063
12
120
1.937
62
500
0.309
0.613
0
0
0.728
20.040
45.487
19.507
7.794
3.479
1.559
1.337
0.023
0.042
13
130
1.372
94
859
0.282
0.930
0
0.01
10.919
14.995
4.562
3.164
4.865
7.884
9.536
43.790
0.219
0.052
14
140
2.048
68
1016
0.310
0.678
0
0
0.055
0.771
22.515
59.320
13.530
1.639
0.700
1.408
0.018
0.039
15
150
2.164
69
261
0.302
0.683
0
0
1.219
21.152
32.328
13.072
7.312
7.402
7.084
10.342
0.042
0.042
跨物理机的节点,会因为网络导致延迟增加。这跟冗余节点的工作原理相关。每一个写,会先写一个节点,然后发散给其它节点,并收到成功的Ack才算完成。
吞吐跟线程按照线性增长,延迟都太大。
总结
两个冗余节点互备,不写磁盘。这样既有性能,也有可用性。但这对两个节点之间的网络要求很高。
按照ping值0.02ms来测试,最优场景是开7个线程,总吞吐2.27万个消息(每个消息中包含5个子消息)每秒,每个消息的延迟平均在0.3ms