MemCache缓存multiget hole详解

来源:互联网 发布:樱桃初夏网络剧 编辑:程序博客网 时间:2024/06/04 00:20

multiget 是什么

multiget 指的是从 memcache(或其他分布式缓存) 一次性获得多个键值,一般由memcached client 自行实现。

multiget hole是什么

  该问题由 facebook的工作人员提出的, facebook2010年左右,memcached节点就已经达3000.缓存数千G 内容.他们发现了一个问题---memcached连接频率,效率下降了,于是加memcached 节点,添加了后,发现因为连接频率导致的问题,仍然存在,并没有好转,称之为”multiget hole现象

实例说明

  我们使用 Multiget一次性获取100个键对应的数据。系统最初只有一台Memcached 服务器,随着访问量的增加,系统负载捉襟见肘,于是我们又增加了一台Memcached 服务器,数据散列到两台服务器上。开始那100个键在两台服务器上各有50个。问题就在这里:原本只要访问一台服务器就能获取的数据,现在要访问两台服务器才能获取;服务器加的越多,需要访问的服务器就越多,所以问题不会改善,甚至还会恶化。

解决方法

  请求多台服务器并不是问题的症结,真正的原因在于客户端在请求多台服务器时是并行的还是串行的!问题是很多客户端,包括Libmemcached在内,在处理Multiget多服务器请求时,使用的是串行的方式!也就是说,先请求一台服务器,然后等待响应结果,接着请求另一台,结果导致客户端操作时间累加,请求堆积,性能下降。如何解决这个棘手的问题呢?只要保证Multiget 中的键只出现在一台服务器上即可!

  把某一组 key,按其共同前缀,来分布.比如user-133-age, user-133-name,user-133-height3 key,在用分布式算法求其节点时,应该以‘user-133’来计算,而不是以user-133-age/name/height 来计算.这样,3个关于个人信息的 key,都落在同1 个节点上,访问个人主页时,只需要连接1 个节点。

 

原文链接:http://www.maiziedu.com/wiki/memcache/multiget/

0 0