Memcached客户端性能评测报告
1. Memcached客户端简介
本次memcached客户端评测以JAVA开源客户项目为评测对象,分别选择Memcached-Java-Client、spymemcached、xmemcached、alisoftxplatform asf cache四个项目,其中分别由两个产品基于堵塞式IO和NOI实现的客户端、两个国内开源项目或两个国外开源项目。
选择的客户端简介如下:
n Memcached-Java-Client
Memcached-Java-Client是官方提供的基于传统阻塞io客户端。官方网址为http://www.whalin.com/memcached/。
n alisoft xplatform asfcache
alisoftxplatform asf cache是阿里开源的memcached集群的客户端,它是基于Memcached-Java-Client的衍生版本。配置简单,使用也简单,有很详细的中文文档。官方网址为http://code.google.com/p/memcache-client-forjava/。
n spymemcached
spymemcached是基于Java NOI、单线程、异步处理的高性能memcached客户端,spymemcached对数据的操作采用异步处理方式,对于相同的缓存数据查询操作可以自动进行归并,避免多次服务器请求。spymemcached官网网址为:http://code.google.com/p/spymemcached/。
n xmemcached
Xmemcached是基于Java NOI、线程安全、同步处理的高性能memcached客户端,支持memcached所有的二进制协议(从1.2.0开始)和文本协议,并且支持对Kestrel(一个scala写的MQ)的兼容访问。官方网址为http://code.google.com/p/xmemcached/,基本入门指南见http://code.google.com/p/xmemcached/wiki/User_Guide_zh。
2. 测试场景说明
2.1. 测试环境说明
n 测试机环境
CPU:双核2.53G
MEM:2G
OS:Linux Ubuntu 11.10 3.0.0-16-generic
n Memcached
Memcached版本为1.4.13。
n JDK
JDK版本为1.7。
n 客户端
所有客户端均采用最新版本,具体版本如下:
u Memcached-Java-Client 2.6.3
u Spymemcached 2.8.0
u Xmemcached 1.3.5
u alisoft xplatform asf cache 2.5.1
2.2. 测试用例
Memcached在测试机启动两个服务端口11211和11212。客户端同时连接两个memcached服务。
性能测试采用三种不同的测试用例。
用例1:随机生成100个32位长度的字符串,使用UUID作为key值,分别进行数据写入、数据读取、数据删除操作。
用例2:随机生成长度为50的HashMap对象(约4k数据量),使用UUID作为key值,分别进行数据写入、数据读取、数据删除操作。
用例3:在100并发线程下,对数据进行新增、获取、删除操作,数据的字节数从64Byte依次累加到51200字节(500k),具体测试数据包括,64、128、256、512、1024、2048、5120、10240、20480、51200、102400、204800、512000。
针对两个测试用例,使用nanobench进行压力测试,使用不同的线程数共进行1000次请求(针对Memcached-Java-Client客户端在实际测试过程中,如使用1000次请求,系统出现too many openfiles错误,最后降低为500次请求)。
3. 测试结果分析
3.1. 写入性能分析
数据写入性能分析情况如下:
简单对象写入TPS分析
复杂对象写入TPS分析
简单对象写入内存占用分析
复杂对象写入内存占用分析
在较高并发情况下,xmemcached性能优于Spymemcached,在低并发情况下,Spymemcached略优于xmemcached。
在数据写入方面,总体性能排名如下:xmemcachedàspymemcachedà alisoft xplatform asf cacheàMemcached-Java-Client;内存占用方面:xmemcachedàMemcached-Java-Client à alisoftxplatform asf cacheàspymemcached。
3.2. 读取性能分析
数据读取性能分析情况如下:
简单对象读取TPS分析
复杂对象读取TPS分析
简单对象读取内存占用分析
复杂对象读取内存占用分析
在数据读取方面,总体性能排名如下:xmemcachedàspymemcachedàMemcached-Java-Client à alisoftxplatform asf cache;在内存占用方面: xmemcachedàspymemcachedà Memcached-Java-Client à alisoft xplatform asf cache。
3.3. 删除性能分析
数据输出性能分析情况如下:
简单对象删除TPS分析
复杂对象删除TPS分析
简单对象删除内存占用分析
复杂对象删除内存占用分析
在数据删除方面,总体性能排名如下:spymemcachedàxmemcachedà alisoft xplatform asf cache à Memcached-Java-Client;在内存占用方面:xmemcachedàspymemcachedà Memcached-Java-Client à alisoft xplatform asf cache。
备注:从数据上来看在较低线程数的情况下,spymemcached性能明显优于xmemcached,在高负载的情况下,spymemcached性能略优于xmemcached,但spymemcached由于采用异步调用模式(即删除指令发出后,数据并没有被真正删除,后台采用异步提交的方式进行处理),实际数据删除操作并没有处理完成。
3.4. 数据长度变化性能分析
在测试过程中,考虑alisoft xplatform asf cache、Memcached-Java-Client表现性能差强人意,不在对数据长度变化进行测试。调整测试内容为:spymemcached、xmemcached分别在二进制和ASCII协议下的性能变化情况。
数据长度变化TPS影响分析
数据长度变化内存占用影响分析
在传输协议的对比结果上有些出乎意料,二进制协议并没有表现出优势,在大多数情况下,ASCII协议具备更好的性能。
对于缓存的数据内容上,数据的长度在10k以内具备较好的性能,对于超过50k的数据,不建议在memcached中进行存储。(结合DB2的4k、8k、16k、32k表空间,如不处理lob字段,数据均在可承受范围之内)
3.5. 总体评价
依据上述测试结果,基于堵塞式IO的memcached客户端alisoft xplatform asf cache和Memcached-Java-Client 在性能上与基于NIO的客户端xmemcached、spymemcached存在较大的差距,基于堵塞式IO的memcached客户端在测试过程中均不定期出现“打开文件数过多”的错误,需要占用更多网络读写资源。
xmemcached除在删除方面性能与spymemcached有一定的差距外,在数据写入、数据读取方面两者没有明显的差距。但在内存控制上,xmemcached具备较明显的优势(在测试过程中,spymemcached在对复杂对象操作过程中出现OOM的错误,有调整JVM的PermSize和内存进行解决);xmemcached本身是基于spymemcached改进而来,几乎具备spymemcached的功能。因此建议在系统应用中选用xmemcached作为memcached客户端。
4. 附录
4.1. 详细测试数据
n 简单对象压力测试结果
操作 | 线程数 | SpyMemcached | Xmemcached | jmc | asf | ||||
TPS | MEM | TPS | MEM | TPS | MEM | TPS | MEM | ||
写(set) | 10 | 510.51 | 88102 | 310.97 | 5258 | 120.25 | 59633 | 136.08 | 6020 |
20 | 478.6 | 81439 | 344.12 | 4917 | 106.97 | 53436 | 121.61 | 13328 | |
50 | 540.68 | 114517 | 388.45 | 9360 | 101.16 | 51011 | 116.76 | 3139 | |
100 | 462.62 | 82393 | 458.75 | 17255 | 99.87 | 55550 | 100.87 | 11762 | |
200 | 631.51 | 102839 | 590.35 | 11751 | 89.42 | 18940 | 97.19 | 91386 | |
300 | 519.25 | 81165 | 637.52 | 13310 | 93.65 | 105222 | 135.91 | 78627 | |
400 | 541.38 | 65699 | 724.8 | 25330 | 95.48 | 91411 | 115.31 | 242422 | |
500 | 619.05 | 148441 | 948.45 | 26502 | 94.37 | 46319 | 96.63 | 45344 | |
读(get) | 10 | 210 | 21539 | 364.7 | 6724 | 242.15 | 131399 | 141.4 | 15082 |
20 | 256.77 | 74909 | 453.64 | 3483 | 190.03 | 132258 | 137.42 | 7285 | |
50 | 360.22 | 45428 | 522.57 | 8901 | 139.78 | 29540 | 142.23 | 12445 | |
100 | 489.43 | 76244 | 540.31 | 21706 | 115.72 | 17710 | 149.68 | 16728 | |
200 | 600.58 | 47630 | 686.78 | 8022 | 135.21 | 89817 | 129.89 | 44619 | |
300 | 748.08 | 63623 | 916.77 | 11510 | 154.5 | 119221 | 136.83 | 47124 | |
400 | 1068.16 | 51982 | 1081.32 | 55875 | 182.78 | 130141 | 105.33 | 148399 | |
500 | 1252.92 | 67872 | 1210.39 | 55683 | 211.66 | 113543 | 94.25 | 156141 | |
删除(delete) | 10 | 1920 | 60949 | 452.55 | 3302 | 257.21 | 44434 | 327.27 | 5213 |
20 | 2014.29 | 64557 | 512.64 | 6456 | 226.46 | 42114 | 287.08 | 8106 | |
50 | 1532.33 | 79291 | 604.34 | 9010 | 231.84 | 49590 | 280.05 | 3536 | |
100 | 1784 | 126154 | 618.21 | 7675 | 201.95 | 39735 | 229.65 | 38890 | |
200 | 1557.98 | 50025 | 781.64 | 82647 | 242.11 | 35557 | 234.2 | 122619 | |
300 | 1675.35 | 125495 | 835.51 | 7265 | 325.72 | 59770 | 262.08 | 100943 | |
400 | 1202.99 | 36298 | 899.95 | 23311 | 256.35 | 66451 | 241.43 | 191719 | |
500 | 1261.06 | 56263 | 1075.2 | 23440 | 161.15 | 63833 | 146.83 | 197955 |
n 大对象压力测试结果
操作 | 线程数 | SpyMemcached | Xmemcached | jmc | asf | ||||
TPS | MEM | TPS | MEM | TPS | MEM | TPS | MEM | ||
写(set) | 10 | 259.24 | 467583 | 222.18 | 255304 | 144.48 | 20764 | 162.02 | 246856 |
20 | 235.75 | 497143 | 235.54 | 15381 | 133.58 | 85895 | 154.8 | 26305 | |
50 | 237.82 | 482584 | 276.87 | 91160 | 142.85 | 74635 | 140.88 | 257407 | |
100 | 232.69 | 442517 | 291.82 | 103691 | 118.41 | 15813 | 137.34 | 77771 | |
200 | 232.1 | 391364 | 335.66 | 17936 | 132.09 | 79607 | 152.05 | 243591 | |
300 | 250.66 | 392310 | 404.91 | 63163 | 141.37 | 79068 | 152.17 | 174972 | |
400 | 259.27 | 342082 | 486.08 | 96368 | 120.97 | 97293 | 143.89 | 189039 | |
500 | 246.1 | 273606 | 449.88 | 155568 | 131.08 | 78614 | 150.08 | 25611 | |
读(get) | 10 | 178.64 | 174495 | 224.47 | 249417 | 171.26 | 32600 | 160.03 | 246387 |
20 | 183.59 | 140674 | 245.79 | 167597 | 161.99 | 160280 | 138.22 | 253770 | |
50 | 226.32 | 12239 | 256 | 87253 | 152.9 | 145711 | 80.36 | 255730 | |
100 | 261.46 | 82222 | 300.66 | 43833 | 157.5 | 159957 | 69.26 | 75928 | |
200 | 346.15 | 105795 | 307.76 | 52438 | 164.14 | 147615 | 147.08 | 91865 | |
300 | 349.61 | 53670 | 383.89 | 80387 | 182.28 | 147911 | 124.45 | 93083 | |
400 | 430.09 | 28327 | 496.69 | 77513 | 177.31 | 145364 | 148.15 | 127157 | |
500 | 572.84 | 53478 | 487.23 | 94533 | 180.33 | 148534 | 151.33 | 145180 | |
删除(delete) | 10 | 3174.86 | 64150 | 827.66 | 47583 | 506.36 | 98913 | 663.43 | 223488 |
20 | 3004.99 | 66000 | 923.66 | 60185 | 470.39 | 115510 | 667.98 | 228045 | |
50 | 4450.18 | 63606 | 950.02 | 54976 | 345 | 104234 | 542.52 | 230123 | |
100 | 3904.91 | 60183 | 862.95 | 67825 | 426.18 | 110897 | 498.82 | 247312 | |
200 | 3175.47 | 65761 | 1094.5 | 63657 | 374.3 | 112631 | 531.68 | 238339 | |
300 | 2046.76 | 71115 | 1289.17 | 59543 | 500.16 | 92836 | 526.47 | 242203 | |
400 | 1897.26 | 75532 | 1399.28 | 50389 | 418.81 | 107433 | 519.47 | 243653 | |
500 | 2071.35 | 67690 | 1159.58 | 48333 | 497.9 | 149904 | 513.8 | 243406 |
n 字节数变化压力测试结果
字节数 | SpyMemcached-bin | SpyMemcached-txt | Xmemcached-bin | Xmemcached-txt | ||||
TPS | MEM | TPS | MEM | TPS | MEM | TPS | MEM | |
64 | 2917.58 | 5108 | 2810.18 | 13032 | 3262.03 | 8945 | 4199.25 | 9171 |
128 | 4292.9 | 12312 | 2895.1 | 14109 | 4531.3 | 10094 | 4133.94 | 10406 |
256 | 3592.17 | 14588 | 3196.91 | 16812 | 3038.37 | 11091 | 6550.86 | 11841 |
512 | 3233.89 | 5017 | 4160.2 | 21820 | 7860.32 | 13821 | 7131.74 | 14266 |
1024 | 7361.02 | 30589 | 2470.53 | 8164 | 5109.72 | 17938 | 5703.03 | 3614 |
2048 | 3233.6 | 46527 | 7798.11 | 51387 | 7222.36 | 29494 | 8547.69 | 28575 |
5120 | 3358.58 | 43874 | 5514.08 | 108159 | 5406.71 | 26134 | 6850.01 | 57482 |
10240 | 4440.62 | 84220 | 4117.94 | 23733 | 4584.6 | 37675 | 5092.56 | 110802 |
20480 | 660.46 | 151707 | 778.49 | 139424 | 755.55 | 17418 | 850.55 | 136711 |
51200 | 274.85 | 136410 | 271.22 | 118354 | 289.41 | 113544 | 285.84 | 112371 |
102400 | 118.4 | 80257 | 123.24 | 123402 | 138.35 | 96368 | 139.74 | 155225 |
204800 | 57.59 | 168415 | 58.11 | 125883 | 64.68 | 140794 | 64.86 | 164982 |
512000 | 20.91 | 323064 | 21.76 | 378767 | 24 | 226116 | 24.78 | 113326 |
TPS:每秒通过率
MEM:内存占用情况(单位K)
jmc:Memcached-Java-Client
asf:alisoft xplatform asf cache
4.2. 第三方评测结果
n Memcached-Java-Client官方评测报告
https://github.com/gwhalin/Memcached-Java-Client/wiki/PERFORMANCE
n XMemcached官方评测报告
http://xmemcached.googlecode.com/svn/trunk/benchmark/benchmark.html