转自: http://blog.sina.com.cn/s/blog_4e6b346e0100eokj.html
一致性哈希是最近在看MEMCACHE在分布式应用时听到的概念,了解了一下,以下用个我喜欢的方式解释一下:
黑帮抢地盘
四个黑帮想抢一块圆环型的地盘(像halo里的空间站)怎么分呢?大球长说这样,咱们把这个地分成12等分(像时钟),你们把你们的名字笔画模12,得到一个数,你们就住在这个数的区域里,从你的区域按顺时针向前数直到前一个老大的区域都属于你们。于是4位老大算了算,各自占了自己的域名
1 2 3 4 5 6 7 8 9 10 11 12
| 一 | 老大一| 二 | 二 | 三 | 三 | 三 | 三 | 老大三 | 四 | 老大四 |一| ->回到1
---------顺时针----------> ---------顺时针----------> ---------顺时针---------->
四位老大看了看,分是分了,但不平均啊。大球长又说,你们各找三个老二(加上老大一共12个人),咱们再分一次,于是,12个区域被平均分配给了4位老大。新来到此地的居民,也按自己的名字被分别分配到了12个区域,很平均,也算过得踏实
时间不久,又来了两位老大(5不能被12整除,所以加了两个老大)也要抢地盘,这怎么办,还按之前的规则,前面的四位相当于每人分出2块区域给新的老大,而他们之前的区域不变。这样,12块地,又被平分了。而且,四位老大之前点的区域,由于居民已经适应,一切都很平安,跟了新老大的居民也渐渐习惯了新的老大。
以上就是一致性哈希,
老大就是memcache,居民就是数据,就算再加MC,原来的分配表可以得到最大的保持,所以分配是相对稳定的。
各老二就是所谓虚节点,它们实际还是指向各自的老大,即mc节点。它们的作用有两个:
一是提高分配的平均,虚节点越多,越平均,直到多到一个数据一个区域,多平均。但老二越多,维持越困难,运算效率就越低。
二是,如果一个老大很牛B,比别人厉害,,就多找点老二,他分到的地就更多(当然权力越大责任越大)。比如一个MC的容量是2G,其他都是1G(忽略CPU等其他消耗),它理应比别人扛的数据更多。
名字笔画模十二就是用来分配资源的哈希算法,我们估且称其为SUB_HASH
最常见的一致性哈希算法是LASM.FM网站员工写的ketama算法(克他妈,这儿子真丧)它使用的SUB_HASH是MD5。
分布式应用在PHP中的应用:
PHP中主要的MC操作工具有两个
memcache 这个比较常用,功能相对比较简单,是纯粹为PHP应用编写的扩展
Memcached 注意,这个不是memcache daemon!!!是对libmemcache包的封装,内部提供了一致性哈希的封装。使用起来也比较简单
//开启一致性哈希 取模(默认)/一致性
$mc->setOption(Memcached::OPT_DISTRIBUTION , Memcached::DISTRIBUTION_CONSISTENT );
//开启ketama算法兼容,注意,打开本算法时,sub_hash会使用KETAMA默认的MD5
$mc->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE , true);
//设置哈希算法,当不使用KETAMA算法时,这个设置才生效,有几种可选择,不过如果启用ketama,这个选项是没用的
//$mc->setOption(Memcached::OPT_HASH , Memcached::HASH_MD5 );
参考:
日本人(MIXI员工)写对于分布式MC应用的说明
http://tech.idv2.com/2008/07/24/memcached-004/
last.fm的工作写人员写的ketama(磕他妈)算法,是一致性算法比较常用的版本
http://cn.last.fm/user/RJ/journal/2007/04/10/rz_libketama_-_a_consistent_hashing_algo_for_memcache_clients
一个哥们对几种字符HASH在一致性中的使用效率统计
http://www.blogjava.net/killme2008/archive/2009/03/10/258838.html
PHP版本的一致性哈希,我就是看这个才明白的。不过算法这东西,用PHP写可能效率还是差点,学习一下就好了。
分享到:
相关推荐
c++easyx 黑帮大战++的小游戏源码基于easyx和c++的小游戏源码基于easyx和c++的小游戏源
canzoni preferite(《JOJO的奇妙冒险 第五部 黄金之风》黑帮摇)钢琴曲谱.pdf
基于easyx和c++的小游戏源码基于easyx和c++的小游戏源码基于easyx和c++的小游戏源码基于easyx和c++的小游戏源码
大战黑帮
黑帮电影叙事管理论文.doc
本项目是一款以CSS、HTML、JavaScript为核心的浴血黑帮宣传网站设计源码,总计包含65个文件,涵盖31个JPG图片文件、15个CSS样式文件、10个PNG图片文件、6个HTML页面文件、2个Markdown文档文件以及1个JavaScript脚本...
黑帮IP手游上市推广整合营销及媒体采买借势营销事件营销方案.pptx
Mini Gangstar City迷你黑帮城市Unity闲置赚钱超休闲游戏项目源码C# 支持Unity版本2021.3.4f1及以上 描述 Mini Gangstar City 是一个完整的项目模板,将帮助您创建闲置赚钱的超休闲游戏。您只需要更改图形、模型、...
黑帮用户
黑帮 要说黑帮吗? 这个机器人会钩住你。 在观看视频 依存关系: 要求 xml文件 美丽的汤4 你:嘿! 这是怎么回事? Bot:天哪! 太好了吗? 用法: 创建一个电报机器人并获取API令牌,然后将其粘贴到config.cfg ...
PayPal自2002年以15亿美元出售给eBay之后,大部分重要员工纷纷离职创业,PayPal也因此一举成为硅谷史上创造创业者群体最多的一家公司,这些人被誉为PayPal黑帮,今天就让我们一窥黑帮成员令世界称奇的创业故事。...
洛嘉Logga - 最黑帮的 Android 记录器 :)如何美国Logga.i("some infa"); Logga.e("oh no :("); 输出a: I/MainActivity﹕ #17 some infa E/MainActivity﹕ #19 ERRA!!1 oh no :( 打开和关闭调试: private static ...
Somekinda未定React应用将这个full子堆满,成为酷的React黑帮。 :smiling_face_with_sunglasses: 除非一切都好但是woon是同性恋WoonTech 晕了,但是是的
JGoL 当前版本:3.1 文档(Javadoc): :
【知识点详解】 1. 文化差异与教育习惯:在不同国家和地区,教育环境中的行为规范可能存在显著差异。例如,中国的教育传统中,学生通常会主动为老师擦黑板,这被视为尊重老师的体现。而在巴西,老师承担起擦黑板的...
【知识点详解】 1. 文化差异与教育习惯:在不同国家和地区,教育环境中的行为规范可能存在显著差异。例如,中国的教育传统中,学生通常会主动帮忙擦黑板,这是一种表达尊重和礼貌的方式。而在巴西,擦黑板是教师的...
这是Peaky Blinders壁纸New Tab Background的扩展 长期以来最好的犯罪电视节目 这是Peaky Blinders壁纸New Tab背景的扩展,获取您最喜欢的顽皮男孩的一些壁纸获取此Peaky Blinders壁纸New Tab背景扩展,并使用您喜欢...
最新的热播电视剧《狂飙》当然不用介绍了,还有一个特别火爆的聊天GPT,目前在科技圈依然很受欢迎。这几天有幸体验到了聊天GPT。...3)在黑帮的压力下,小宇的父亲只好通过不正当手段发展生意,并逐渐掌握了经营技巧。
《支付战争》的作者是“PayPal黑帮”成员之一,他真实还原了这个伟大产品是如何诞生的,以及在后来的发展壮大之路上,如何应对融资紧张、突破增长瓶颈,在竞争者凶猛围剿与平台商霸王条款的夹击下,逆境求生,改变...
《支付战争》的作者是“PayPal黑帮”成员之一,他真实还原了这个伟大产品是如何诞生的,以及在后来的发展壮大之路上,如何应对融资紧张、突破增长瓶颈,在竞争者凶猛围剿与平台商霸王条款的夹击下,逆境求生,改变...