数据平台缓存技术方案Memcached-Redis.docx
《数据平台缓存技术方案Memcached-Redis.docx》由会员分享,可在线阅读,更多相关《数据平台缓存技术方案Memcached-Redis.docx(21页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据平台前端缓存技术方案(M/R)version: vl. 0缓存 Memcached (M)M的概念M是高性能的分布式内存缓存服务器,协议简单。通过缓存数据 库的查询结果,减少数据库访问次数,提高动态Web应用的速度和扩 展性。M支持下述语言 C/C+ +- libmemcached- libmemcache- apr_memcache一 memcaheclient- libketama PHP- PECiymemcached- PECL/memcache- PHP libmemcached Java- spymemcached- Java memcached dient/danga- me
2、mcache-dient-forjava/taobao Python Ruby Perl .NET MySQL PostgreSQL Erlang Lua LispM的设计现了问题,系统会去B获取数据,当A正常以后,如果应用在A中没有拿到数据可以去B获取数据,并且复制到A上。Spring+XMemcached 实现M的Java客户端中,XMemcached支持所有的文本协议和二进制 协议。支持动态添加和删除M节点。支持客户端统计。支持节点的权 重设置,支持nio的连接池,网路实现层是长连接形式,无需重复创 建多个Client对象,在高负载环境下提高吞吐量。利用Spring框架可以直接配置客户端
3、集群,按照规定算法(Ketama等),自动Build出客户端对象,具体如下图。Builder c I d$s . rubyeye.KfKachedCl Ider * Listbo所 cl.ssLjovo. rwt. rrwtSodwtAddrtf&sM constructorva lueloculhos/val11211l - locdlho2t constructorH2U/constructor-ar|ll- 2 -集群服务配置图estfconnect lonPoo/ S/zra vaI uesaX/propertyproperty bca* cli35-*Het.ruyeyc,yjRpr
4、operty 加8个SerialeX4lntSu客户端对象配置图缓存 Redis (R)R的简介redis是一个key-value存储系统。和Memcached类似,它 支持存储的value类型相对更多,包括string(字符串)、list(链表)、 set(集合)和zset(有序集合)。这些数据类型都支持push/pop. add/remove及取交集并集和差集及更丰富的操作,而且这些操作 都是原子性的。在此基础上,redis支持各种不同方式的排序。与 memcached 一样,为了保证效率,数据都是缓存在内存中。区别 的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入 追加的记
5、录文件,并且在此基础上实现了 master-slave(主从)同步。R的master-slave(主从)架构图 2.1 master-slave 模式当设置好slave服务器后,slave会建立和master的连接,然 后发送sync命令。无论是第一次同步建立的连接还是连接断开后的 重新连接,master都会启动一个后台进程,将数据库快照保存到文 件中,同时master主进程会开始采集新的写命令并缓存起来。后台 进程完成写文件后,master就发送文件给slave, slave将文件保 存到磁盘上,然后加载到内存恢复数据库快照到slave上。接着 master就会把缓存的命令转发给slave。
6、而且后续master收到的 写命令都会通过开始建立的连接发送给slave。从master到slave 的同步数据的命令和从client发送的命令使用相同的协议格式。当 master和slave的连接断开时slave可以自动重新建立连接。如果 master同时收到多个slave发来的同步连接命令,只会使用启动一 个进程来写数据库镜像,然后发送给所有slaveo流程如下图所示:SlaveSlaveMasterRedis复制机制的缺陷从上面的流程可以看出,Slave从库在连接Master主库时, Master会进行内存快照,然后把整个快照文件发给Slave,也就是 没有象MySQL那样有复制位置的概
7、念,即无增量复制,这会给整个 集群搭建带来非常多的问题。比如一台线上正在运行的Master主库配置了一台从库进行简单 读写分离,这时Slave由于网络或者其它原因与Master断开了连接, 那末当Slave进行重新连接时,需要重新获取整个Master的内存快 照,Slave所有数据跟着全部清除,然后重新建立整个内存表,一方 面Slave恢复的时间会非常慢,另一方面也会给主库带来压力。所以基于上述原因,如果你的Redis集群需要主从复制,那末 最好事先配置好所有的从库,避免中途再去增加从库。edis的master/slave模式下,master提供数据读写服务, 而slave只提供读服务。客服端
8、通过Consistent Hashing算法选择要访问的slave缓存服务节点,运行图如下图所示:Client读取写,Linux服务器Slave192.168.3.90:6379读取ClientClient图2.2 redis运行图R的特性今可以将缓存数据持久化到磁盘今不支持集群,但支持主从模式今value支持数据类型:string (字符串)、list (列表)、sets (集 合)或者是ordered sets (被排序的集合)和hash(哈希)。今基于客服端来实现分布式(通过Consistent Hashing算法选择服务器节点,算法详情请参考1.4节)今 事务支持(MULTI,EXEC
9、及DISCARD三个命令让Redis的使 用者可以将Redis命令打包进行原子性的操作)今支持Publish/subscribe(使用该功能可以很容易实现一个实时 消息平台)R的Java客户端实现redis主页上 列出的java客 户端有Jedis、JRedis详情请参考:详情请参考:和JDBC-Redis三种,面分别介绍三种客户端的优缺点。支持redis版本性能维护推荐Jedis2.0.0 releasefastactively developed推荐JRedis1.2.n release尚未release版本fastJDBC-Redisnot goodhttp:/redis.io/clie
10、nts(1) jedis 实现jedis是Redis官方首选的Java客户端开辟包,推荐使用jedis, 所有对redis操作类的结构非常明确,都通过jedis获取其他的类, 且jedis支持和spring集成。以下是jedis+spring集成步骤:首先,在项目中引入jeids的jar包:redis.clients jedis其次,*总能0吼配er遣泊文件中添加配置:其次,在spring配置文件中添加配置:最后,应用程序调用:ShardedJedisjedis= shardedJedisPool.getResourcef);jedis.get(key);从redis服务器获取值jedis.s
11、etfkey, value); 将值保存到redis 服务器(2)、jredis 实现实现比较复杂,且版本比较旧,不支持redis的不少新特性。(3)、jdbc-redis 实现jdbc-redis是用于redis这个NoSQL数据库的jdbc驱动,也 就是说你可以使用你所熟悉的jdbc的方法来访问Redis数据。但是 jdbc-redis性能较差,不推荐使用。R的最新版本2.4改进今 对小数据量的sorted sets结构的内存使用做很大的优化今RDB文件的持久化速度也将会大大提高今 对目前的一些写操作命令进行了改进,支持批量写入功能今 启用新的内存分配模式jemalloc今通过对copy
12、on write机制使用的优化,数据持久化保存的 子进程的内存占用将大大减少今INFO内容更加丰富今 新的OBJECT命令,提供对Redis存储value结构描述今 新的CLIENT命令,提供对Redis客户端连接的信息描述今彻底将Slave对Master的连接改成非阻塞,之前 connect(2)系统调用是会阻塞的今Redis-benchmark Redis-cli都进行了几个方面的改进今Make改为彩色输出,更易读今2.0版本中提供的VM机制被废弃今 总的来说2.4版本会在各方面有性能上的提升Redis测试框架也有非常大的提升详情请参考: 11017/305875.htmlR的性能:根据R
13、edis官方的测试结果:在50个并发的情况下请求10w 次,写的速度是110000次/s,读的速度是81000次/s测试环境:1.50个并发,请求100000次2 .读和写大小为256bytes的字符串3 .Linux2.6 Xeon X3320 2.5GHz 的服务器上4 .通过本机的loopback interface接口上执行详情请参考: R的短期发展规划Lua脚本支持Redis集群功能Replication功能的改进持久化方案的改进提供更精确的过期时间长数据的读写操作性能改进进行一些内部改造其它小功能详尚寺参考 http: /blog. nosqlfan. com/html/3405
14、.htmlM和R的比较网络io模型Main ThreadListen将accept返向的向封灰成CQI hM放入对电税权的CQ队列向该线Flpipc。数也.触发libevent JI 件Worker TlireadCQ队列UTEM注册 6事件AcceptConnectionK Round轮i句.班libevent处到该迂楂的M是多线程,非阻塞10复用的网络模型,分为监听主线程和 worker子线程,监听线程监听网络连接,接受请求后,将连接描述 字pipe传递给worker线程,进行读写TO,网络层使用libevent封 装的事件库,多线程模型可以发挥多核作用,但是引入了 cache coher
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据 平台 缓存 技术 方案 Memcached Redis
限制150内