文档章节

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

xpbug
 xpbug
发布于 2016/09/07 17:49
字数 1608
阅读 488
收藏 0

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

测试用例

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

© 著作权归作者所有

xpbug
粉丝 304
博文 101
码字总数 124566
作品 0
浦东
程序员
私信 提问
12306:分布式内存数据技术为查询提速75倍

  背景和需求   中国铁路客户服务中心网站(www.12306.cn)是世界规模最大的实时交易系统之一,媲美Amazon.com,节假日尤其是春节的访问 高峰,网站压力巨大。据统计, 在2012年初的春运高...

自由的开源
2013/12/30
11.1K
173
[转]12306:分布式内存数据技术为查询提速75倍

背景和需求   中国铁路客户服务中心网站(www.12306.cn)是世界规模最大的实时交易系统之一,媲美Amazon.com,节假日尤其是春节的访问高峰,网站压力巨大。据统计, 在2012年初的春运高峰期间...

自由的开源
2013/12/30
216
0
Apache Geode 毕业为 Apache 顶级项目

2016年11月21日,Apache软件基金会(the Apache Software Foundation,ASF)宣布 Apache Geode已从Apache孵化器毕业成为顶级项目(Top-Level Project),表明该项目的社区和产品已根据ASF的精...

局长
2017/02/08
4.5K
10
支撑上万并发毫秒级事务响应!银行大型机负载下移至GemFire+HBase大数据平台的创新(一)

1MainFrame大型机行业应用介绍 大型机(mainframe)这个词,最初是指装在非常大的带框铁盒子里的大型计算机系统,以用来同小一些的迷你机和微型机有所区别。虽然这个词已经通过不同方式被使用...

杨旭钧
2016/06/15
0
0
Spring GemFire For Java 1.1.0.RC1

Spring GemFire 1.1 发布了首个候选发行版本,该项目旨在简化 Spring 应用使用 Gemfire 构建高可伸缩性的数据管理平台。 该版本主要更新有: Aligned Maven naming to Spring Data conventi...

红薯
2011/11/15
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

Redis面试题详解:哨兵+复制+事务+集群+持久化等

Redis主要有哪些功能? 1.哨兵(Sentinel)和复制(Replication) Redis服务器毫无征兆的罢工是个麻烦事,如何保证备份的机器是原始服务器的完整备份呢?这时候就需要哨兵和复制。 Sentinel...

Java阿七
2分钟前
0
0
响应国家号召 1+X 证书 Web 前端开发考试模拟题

官方QQ群:736413913 1+x证书Web前端开发初级理论考试样题2019 http://blog.zh66.club/index.php/archives/149/ 1+x证书Web前端开发初级实操考试样题2019 http://blog.zh66.club/index.php/...

张帅个人博客
6分钟前
2
0
如何检查一个字符串在Objective-C中是否包含另一个字符串?

如何检查字符串( NSString )是否包含另一个较小的字符串? 我希望有这样的东西: NSString *string = @"hello bla bla";NSLog(@"%d",[string containsSubstring:@"hello"]); 但是我能找到......

javail
23分钟前
2
0
.NET Core开发的iNeuOS工业互联网平台,发布 iNeuDA 数据分析展示组件,快捷开发图形报表和数据大屏

目 录 1. 概述... 2 2. 演示信息... 2 3. 简单介绍... 3 4. 产品特点... 4 5. 价值体现... 5 1. 概述 经过一段时间的努力,iNeuDA产品组件已经开发和测试完成,现在正式上线。现在iNeuOS工业...

wxzz
25分钟前
2
0
在每个GROUP BY组中选择第一行?

顾名思义,我想选择以GROUP BY分组的每组行的第一行。 具体来说,如果我有一个如下的purchases表: SELECT * FROM purchases; 我的输出: id | customer | total---+----------+------ 1...

技术盛宴
39分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部