后面介绍的不同方式都有测试数据,这些测试数据都是在同一的测试环境下得出的测试结果:
测试机器的配置如下:
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左右
分享到:
相关推荐
当我们谈论“Spring + Ehcache + Redis”两级缓存时,我们实际上是在讨论如何在Java环境中利用Spring框架来集成Ehcache作为本地缓存,并利用Redis作为分布式二级缓存,构建一个高效且可扩展的缓存解决方案。...
常用缓存的对比。 主要分析ehcache radis tair间的对比。
对比这三种缓存系统,Ehcache更适合Java环境,尤其是需要本地缓存和持久化的场景;Memcached因其简单、高性能而适用于快速读取大量数据的场景;而Redis由于其丰富的数据结构和持久化功能,更适用于复杂的应用场景,...
1、springboot 整合ehcache+redis 通过配置文件application.yml切换缓存类型 2、ehcache 、redis 通过缓存管理器管理 3、可分别设置缓存的过期时间 ehcache :添加依赖 pom.xml 2、添加配置文件ehcache.xml 3、添加...
Ehcache,Redis的上课知识点整理。由上课老师编写的每一个知识点与整合的概要。非常好的整体复习方案, 需要的赶紧下载
两级缓存在redis的方案上做一步优化,在缓存到远程redis的同时,缓存一份到本地进程ehcache(此处的ehcache不用做集群,避免组播带来的开销),取缓存的时候会先取本地,没有会向redis请求,这样会减少应用服务器<–...
5. **性能对比** - 对比这三种缓存技术在吞吐量、响应时间、内存利用率等方面的性能差异。 6. **使用场景** - 分析每种缓存适合的应用场景,例如Memcached适用于简单快速的键值存储,Ehcache更适合Java应用,而...
《memcache、redis、tair性能对比测试报告》详述了在分布缓存技术领域,对这三种主流缓存服务器的性能评估。测试主要目的是在相同功能特性的基础上,对比它们在不同场景下的表现,因此排除了ehcache(组件级缓存)和...
Java 两级缓存框架的设计与实现是为了解决在高并发场景下,...通过合理的缓存设计和使用 Java 两级缓存框架,如 Ehcache+Caffeine 和 Redis,可以显著提高应用程序的响应速度,减少数据库负载,从而提升整体系统性能。
本文将主要探讨本地缓存的几个常见实现,包括Ehcache、JCS(Java Caching System)和Cache4j,并进行性能测试,同时分析它们各自适用的使用场景。 首先,Ehcache是一个广泛使用的开源Java缓存解决方案,它提供了...
第一级缓存使用内存(同时支持 Ehcache 2.x、Ehcache 3.x 和 Caffeine),第二级缓存使用 Redis(推荐)/Memcached 。 由于大量的缓存读取会导致 L2 的网络成为整个系统的瓶颈,因此 L1 的目标是降低对 L2 的读取次数。 ...
《memcache、redis、tair性能对比测试报告》 该测试报告主要对比分析了三种流行的分布式缓存系统——memcache、redis和tair在不同条件下的性能表现,以供选择适合特定需求的缓存解决方案。测试场景涵盖了单机环境和...
在实现二级缓存时,我们可以选择EhCache作为缓存实现,EhCache是一款广泛使用的Java缓存库,具有良好的性能和可扩展性。 然而,当系统负载高或者需要跨应用共享缓存时,内存缓存(如EhCache)可能无法满足需求,...
Redis则是一个开源的高性能键值存储系统,常用于缓存和消息中间件。它的高速读写能力使其成为缓存的理想选择,尤其是在处理大量数据时。 二级缓存是ORM框架(如Hibernate)中的一个重要特性,它可以在数据库和应用...
Ehcache是一个流行的Java缓存库,用于在应用程序中存储数据,以提高性能并减少对数据库的访问。它被广泛应用于各种系统,特别是在处理大量数据和需要快速响应时间的应用中。下面将详细介绍Ehcache的核心概念、配置...
Java 两级缓存框架,可以让应用支持两级缓存框架 ehcache(Caffeine) + redis 。避免完全使用独立缓存系统所带来的网络IO开销问题
这份报告详细对比了三种常用的内存数据库——memcache、redis以及tair的性能表现。测试目的是为了评估这些缓存工具在不同场景下的处理能力,特别是在并发操作和不同大小的数据存储上的效率。测试环境包含了单机环境...
在传统的Web应用中,一级缓存通常是应用程序内部的缓存,如Java中的EHCache或Guava Cache,而二级缓存则是使用外部服务,如Redis,存储那些不能立即在一级缓存中找到的数据。Redis因其快速、灵活且支持多种数据结构...
在一些要求高一致性(任何数据变化都能及时的被查询到)的系统和应用中,就不能再使用EhCache来解决了,这个时候使用集中式缓存是个不错的选择,因此本文将介绍如何在Spring Boot的缓存支持中使用Redis进行数据缓存...