当前位置: 首页 > 工具软件 > GemFire > 使用案例 >

Java读写Gemfire,内存数据库Gemfire写入性能报告

太叔飞翰
2023-12-01

测试用例

使用消息大小约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

 类似资料: