设为首页 收藏本站
查看: 1832|回复: 0

[经验分享] Ehcache/Redis/Tair缓存性能对比

[复制链接]

尚未签到

发表于 2016-12-20 07:16:05 | 显示全部楼层 |阅读模式
后面介绍的不同方式都有测试数据,这些测试数据都是在同一的测试环境下得出的测试结果:

测试机器的配置如下:



64位5核CPU, E5620 @ 2.40GHz,内存8G




CDN端缓存
由于计数器的价值并不在,具体的值是多少,尤其是对一些大访问量的商品来说个位或者十位的数据并没有什么意义,所以对这些热门商品的计数器访问可以采用定时更新的办法,可以将计数器的值直接缓存在CDN上或者后端Nginx的缓存中,定时再到数据库服务器上获取最新的计数器的值,这样能够大量减少对后端服务器的访问请求,而且计数器的数据量很小对缓存服务器的空间需求也不大。

改进的结构图如下:



直接在Nginx中利用Cache策略缓存住热门计数器的值,利用http协议的cache+max age来失效缓存的方式更新计数器的值。



优点:
实现方式简单,改动小,能够挡住热门商品的计数器访问请求,采用这种方式对查询请求来说,能达到类似于静态服务器的性能,如Nginx能达到2w的QPS



缺点:没有解决同一商品的计数器合并请求的问题,数据量会增大一倍对更新请求没有办法缓存,只能减少查询请求的压力



基于Java的存储方式
由于目前采用Nginx模块的方法开发,每次修改要重新编译Nginx服务器,所以想采用基于Java的方式,使得维护要容易一些。

选用Ehcache作为数据存储服务器,Ehcache也是基于内存存储,支持定时持久化功能,非常适合存储像计数器这种小数据类型。处理Http请求使用Tomcat容器,结构图如下:



处理逻辑采用一个servlet实现,并且在这个servlet中通过一致性Hash从Ehcache中获取计数器值。



在实际的部署结构中,可以将Tomcat和Ehcache部署在同一台机器上。

基于这种模式的测试结果如下:



Qps能达到1.3w左右,性能瓶颈是在Tomcat处理Http连接的请求上,Tomcat较Apache和Nginx处理请求性能较差。



优点:业务逻辑和存储服务器都采用Java开发,利于维护,也能能解决数据合并的问题。



缺点:Java服务器在处理Http短连接请求时要比Nginx等服务器性能稍差,与目前的2W的qps有些差距



基于Nginx+Redis
上次参加Velocity大会了解到新浪、百度这些公司,内部的计数器都是采用Redis作为存储服务器,性能非常好,官方给出的测试结果是,回来后测试了Redis的性能,性能果然不错,单台redis机器能支持将近6w的QPS

测试结果如下:

写:



读:





读写性能基本能达到6w(8G,5核的虚拟机)左右,5核cpu只会把一个cpu用满。如下图所示:



全内存操作情况下要好于tair的5w(24G,8核的实体机)。



Redis目前支持多种客户端连接,我分别测试了基于Apache的PHP客户端,和直接基于Nginx的c客户端



基于Nginx的C客户端测试
和叔度了解到一个ab压不倒Nginx的性能瓶颈,所以采用两个ab压Nginx,结果如下:







两个加起来能达到1.7w左右的QPS,如果采用线上的8核CPU的话,达到2W以上的QPS肯定是没有问题的。

基于Apache的PHP客户端测试结果如下:






两个ab压测apache能达到1.1w左右的QPS,要比基于Nginx的c客户端差。



上面这两种情况,他们的结构图都是如下



Nginx可以直接采用一致性Hash的方式将相同的商品ID或者用户ID映射到同一台Redis服务器上,在Nginx上开发一个C的模块来简单的出来对计数器的操作。



优点:性能非常好,前端处理请求采用Nginx服务器,处理短连接性能非常好,后端采用Redis存储,性能也要好于tair,而且支持将数据分组,可以做到基于商品ID和用户ID数据合并。



缺点:同样要开发基于一个c模块的Nginx模块,以后维护也要麻烦一点。





Tair ldb和redis的对别测试




1.做了下Tair的ldb版本和Redis的vm形式的持久化对比测试,感谢宗岱给配置了tair的ldb版本的配置了参数
2.测试机器是相同配置的64位5核CPU, E5620  @ 2.40GHz,内存8G的
虚拟机

3.测试数据:造了1亿(0~100000000整数)条不同key的数据
4.测试方式:分别测试tair和redis的两个方法:incr和get的写读接口
5.数据读写范围是:在0~1亿条数据中,随机读写。
6.测试结果如下:


1.CPU资源对比
Tair:



Redis:





■Tair的5个核基本都使用了,load的得到4左右
■Redis只使用了一个核,其他4个核基本没有,而且load维持在1以下,所以在多核情况下可以部署多个Redis实例,性能会更好
1.写情况的TPS对比:


■Tair的写平均TPS在1.2w左右
■Redis的写平均TPS在5.4w左右




1.读情况对比:




■Tair的读平均TPS在2.5w左右
■Redis的写平均TPS在5.5w左右

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-316572-1-1.html 上篇帖子: Redis数据库基础与应用 下篇帖子: 征服 Redis + Jedis + Spring (三)—— 列表操作
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表