memcache初步探索

 

                                       Memcache

一、         Memcache. 2

二、         SpyMemcache客户端.. 2

1.     Spymemcahe的实现大致原理图.. 2

2.     Spymemcache默认的配置.. 3

3      算法.. 3

三、         关于memcache链接问题.. 7

四、         Spymemcache的算法测试.. 8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

一、      Memcache

Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。这是一套开放源代码软件,以BSD license授权发布。

Memcache分布式本身不提供分布式,提供分布式的是memcache的客户端如spymemche,xmemcache等.(xmemcache不做分析)

 

二、      SpyMemcache客户端

1.      Spymemcahe的实现大致原理图

                                                           

(线有部分不对。)

          

 

 

2.      Spymemcache默认的配置

失败默认模式:Redistribute(即如果当前的根据key算出的memcache服务进程如果出现问题,如挂掉,级查找离这个key最近的一个mem服务进程,根据顺时针,其他有RetryCancel

Hash算法默认:native_hash(就是stringhash算法,其他有CRC_HASHFNV1_64_HASHFNV1A_64_HASHFNV1_32_HASHKETAMA_HASH)

默认队列操作队列大小:16384

默认读缓存大小:16384

Memcache服务定位默认算法:ARRAY_MOD(其他有CONSISTENTVBUCKET

默认对象转换策略:SerializingTranscoder

3      算法

a)    Array_Mod算法

按照目前默认情况配置。源码如下,这种模式下。(key值)字符串前缀相同的情况下,数据会集中在一起。这样数据就不是很均匀的分布到不同的服务器。

  优点:简单,实用

   缺点:一旦需要增加memcache服务器,以前的数据就会出现大量不会击中的情况,Memcache服务器array_mod算法源码(如下图)

Key的默认native_hash算法(即string算法)

 

 


 

b)    2.2CONSISTENT算法

CONSISTENT算法四个虚拟结点为一组,以getKeyForNode方法得到这组虚拟节点的name,Md5编码后,每个虚拟结点对应Md5码16个字节中的4个,组成一个long型数值,做为这个虚拟结点在环中的惟一key。每次需要查找memcahe服务节点时,如果当前hash不包含在此环上面,则是查找最近的一个节点根据顺时针。

优点:

                                             i.         1:一致性hash算法只是帮我们减少cache集群中的机器数量增减的时候,cache的数据能进行最少重建。只要cache集群的server数量有变化,必然产生数据命中的问题

                                            ii.         对于数据的分布均衡问题,通过虚拟节点的思想来达到均衡分配。当然,我们cache server节点越少就越需要虚拟节点这个方式来均衡负载。

                                           iii.         3、一旦其中memcache进程挂掉。对整体的数据缓存影响会随着memcache的增多而降低

缺点:

                                             i.         查找memcache的效率没有array_mod高




 

c)     目前对这个2个算法写了一个测试类,查看数据是否均匀分布,memcache进程挂掉之后的一个数据击中概率。

测试表明随着,memcache服务器节点的增加,一致hash算法(KetamaNodeLocator)数据击中的概率会逐渐缓慢降低,而取摸算法ArrayModLocator,则基本上数据90%会查找不到。如果采取KetamaNodeLocator算法,则key的hash算法见过测试如果采取native_hash算法,数据会出现分布不均匀,如果采取KETAMA_HASH,则会分布均匀。

 

 

 

三、      关于memcache链接问题

 

           Spymemcache链接是有memcacheClient创建一个tcp链接(即一个memcacheClient创建一个tcp链接)

           如果一旦出现链接超时,有一下几个原因

           1:网络问题

           2:linux的限制 如每个用户进程最大可以创建的链接个数(ulimit -a)

           3:memcache的链接限制  ,在memcache启动的是有个参数-c是指定链接个数,默认1024

           4:l Linux网络内核对本地端口号范围有限制

           5:……

      具体创建多少链接,可以根据用户情况,目前服务器的tcp链接情况来对待(telnet)

 

四、      Spymemcache的算法测试

1.      Array_mod(hash取模算法)+native_HASH(key的hash算法即string的hash算法)下面4图测试结果

测试开始有4个mem服务器进程192.168.11.79:11711 192.168.11.79:11811  42.121.192.49:1171142.121.192.49:11811    当4个mem进程都存在把数据缓存,之后,假如42.121.192.49:11811挂掉,即不可用,这时获取原来缓存的数据。其中下图的get_misses表示缓存的没有击中的丢失率。(其中一共缓存数据10000个随机字符串1-9和a-z随机组成20-30个字符串组成的key的数据)。

一共做10000set操作(添加数据)和20000get操作(获取数据),这时get的命中概率为60.725%.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 测试大致源码

 

 

 

 1






2.      CONSISTENT(hash一致算法)+KETAMA_HASH(key的hash算法))下面4图测试结果

测试开始有4个mem服务器进程192.168.11.79:11711 192.168.11.79:11811  42.121.192.49:1171142.121.192.49:11811    当4个mem进程都存在把数据缓存,之后,假如42.121.192.49:11811挂掉,即不可用,这时获取原来缓存的数据。其中下图的get_misses表示缓存的没有击中的丢失率。(其中一共缓存数据10000个随机字符串1-9和a-z随机组成20-30个字符串组成的key的数据)。

一共做10000set操作(添加数据)和20000get操作(获取数据),这时get的命中概率为92.7%,随着memcache增多,这种memcache挂掉影响的数据比逐渐减少。









 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值