关于 Multiget hole:spymemcached对此的实现方法

Multiget的无底洞问题

Facebook在Memcached的实际应用中,发现了Multiget无底洞问 题,具体表现为:出于效率的考虑,很多Memcached应用都已Multiget操作为主,随着访问量的增加,系统负载捉襟见肘,遇到此类问题,直觉通 常都是通过增加服务器来提升系统性能,但是在实际操作中却发现问题并不简单,新加的服务器好像被扔到了无底洞里一样毫无效果。

……

问题是很多客户端,包括Libmemcached在内,在处理Multiget多服务器请求时,使用的是串行的方式!也就是说,先请求一台服务器,然后等待响应结果,接着请求另一台,结果导致客户端操作时间累加,请求堆积,性能下降。

那么,spymemcached 是如何实现 Multiget(即getBulk)的?
  1. 给一组 key,[1,2,3,4,5]
  2. 先算一下这些key都落在哪些节点上(通过 KetamaNodeLocator 的 public Iterator<MemcachedNode> getSequence(String k)。Now that we know how many servers it breaks down into.);
  3. 此时,得到一个map:<Node1,[1,3]>;<Node2,[2,4]>;<Node3,[5]>
  4. 遍历这个map,从每一个 mc node 读出对应的 keys(即单节点的multiget操作);一个Node一个Node串行的;
  5. 拼成一个大map<key,value>返回。
 
如火丁所言,此处不好优化,只能:
选择特殊键值进行散列,『保证相关的键只出现在一台服务器上』。

spymemcached 相关文章:

2)电商课题V:分布式锁 (2012-11-17 22:16)
3)电商课题:cookie防篡改 (2012-11-17 22:24)
4)电商课题VI:分布式Session (2012-11-17 22:30)
5)电商课题:RBAC权限控制 (2012-11-17 22:47)
6)电商课题:幂等性 (2012-11-22 23:52)
7)电商课题:客户端的IP地址伪造、CDN、反向代理、获取的那些事儿 (2012-09-19 01:17) 9)电商课题VII:支付交易一般性准则 (2012-12-14 01:38)

赠图一枚
http://ww1.sinaimg.cn/bmiddle/62a92ba0jw1e0hflmtsjnj.jpg
posted @   老兵笔记  阅读(3099)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
历史上的今天:
2010-01-05 才知道系列:先退卡、再吐钞
点击右上角即可分享
微信分享提示