文档章节

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

旁观者-郑昀
 旁观者-郑昀
发布于 2013/02/08 22:47
字数 667
阅读 128
收藏 0

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

© 著作权归作者所有

旁观者-郑昀
粉丝 101
博文 77
码字总数 162785
作品 0
朝阳
私信 提问
PHP框架 Yii 1.0.8 发布

该版本修正了大量的bug,增加超过20个新的特性。重构了 yiic 命令脚本使之更容易被扩展。改进缓存组件以支持 multiget ;CCaptcha、CCompareValidator、CActiveRecord 等也得到了改进。 详细...

红薯
2009/08/10
256
0
MultiGet 很久不更新了吧

MultiGet 很久不更新了吧 不知道那个高手可以继续这个项目啊

李永波
2010/09/07
1K
4
缓存系列文章--7.无底洞问题(multiget hole)

转载请注明出处哈:http://carlosfu.iteye.com/blog/2269678 最近有点忙,一直没更新博客,继续坚持下去。 一、背景 1. 什么是缓存无底洞问题: 他们发现一个问题--memcached的连接效率下降了...

付磊-起扬
2015/12/14
0
0
memcache client缓存节点分配机制和连接读取缓存机制

//mc client//hashingAlg 默认是0private final long getHash(String key, Integer hashCode) { if (hashCode != null) { if (hashingAlg == CONSISTENT_HASH) return hashCode.longValue() ......

aduan
2014/04/25
691
0
memcached 1.4.37 发布,集中式缓存系统

memcached 1.4.37 发布了,带来了很多小修复和一个新的脚本 (scripts/memcached-automove) 。 memcached 是一套高性能、分布式内存对象缓存系统,通用性质,旨在用于通过减轻数据库负载加快动...

淡漠悠然
2017/06/06
1.7K
10

没有更多内容

加载失败,请刷新页面

加载更多

ActiveMQ学习之SpringBoot整合ActiveMQ------>主题生产者和消费者

一、pom <!--聚合工程集成关系--> <!--统一整合第三方框架依赖信息--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</a......

冥焱
11分钟前
20
0
两周自制脚本语言-第11天 优化变量读写性能

第11天 优化变量读写性能 以变量值的读写为例,向读者介绍基于这种理念的语言处理器性能优化方式。 11.1 通过简单数组来实现环境 假如函数包含局部变量x与y,程序可以事先将x设为数组的第0个...

果汁分你一半
15分钟前
13
0
自定义grub主题

1 概述 自定义grub引导菜单的主题,笔者的linux是deepin,感觉默认的grub主题不太好看,嗯,没办法,就是想改了。 这篇文章主要是修改/boot/grub/grub.cfg以及/boot/grub/themes/.../theme.t...

Blueeeeeee
17分钟前
15
0
微服务(spring cloud配置中心)

Spring cloud配置中心 用于集中配置数据管理,简化微服务集群环境下大量配置的更新工作。 1:理解bootstrap.yaml 它会在application之前加载,如果和application有同名属性,先启动的会被覆盖...

这很耳东先生
29分钟前
58
0
Xcode 4 - “存档”是灰色的吗?

我想存档我的应用程序,但存档选项是灰色的。 什么可能导致这个? #1楼 看到图片。 但我必须输入足够的字符才能发布图片。:) #2楼 当其他答案陈述时,您需要选择一个非活动方案,而不是模拟器...

技术盛宴
31分钟前
25
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部