一致性hash算法.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一致性hash算法

一致性Hash算法(KetamaHash)的c#实现 ?????? 最近在研究一致性HASH算法(Consistent Hashing),用于解决memcached集群中当服务器出现增减变动时对散列值的影响。后来?在JAVAEYE上的一篇文章中,找到了其中的 KetamaHash 算法的JAVA实现(一种基于虚拟结点的HASH算法),于是为了加深理解,对照?JAVA版本,用C#重写了一个。放到这里,如果大家感兴趣的话, 可以下载测试一下,如果发现写法有问题请及时告之我,以便我及时修正。? ? ????? 下面是对Ketama的介绍:? ?Ketama?is?an?implementation?of?a?consistent?hashing?algorithm,?meaning?you?can?add?or?remove?servers?from?the?memcached?pool?without?causing?a?complete?remap?of?all?keys.? ?Here’s?how?it?works:? ?*?Take?your?list?of?servers?(eg:?:11211,?:11211,?:11211)? ?*?Hash?each?server?string?to?several?(100-200)?unsigned?ints? ?*?Conceptually,?these?numbers?are?placed?on?a?circle?called?the?continuum.?(imagine?a?clock?face?that?goes?from?0?to?2^32)? ?*?Each?number?links?to?the?server?it?was?hashed?from,?so?servers?appear?at?several?points?on?the?continuum,?by?each?of?the?numbers?they?hashed?to.? ?*?To?map?a?key-server,?hash?your?key?to?a?single?unsigned?int,?and?find?the?next?biggest?number?on?the?continuum.?The?server?linked?to?that?number?is?the?correct?server?for?that?key.? ?*?If?you?hash?your?key?to?a?value?near?2^32?and?there?are?no?points?on?the?continuum?greater?than?your?hash,?return?the?first?server?in?the?continuum.? ?If?you?then?add?or?remove?a?server?from?the?list,?only?a?small?proportion?of?keys?end?up?mapping?to?different?servers. ? ????? ???? ?我的理解,这类方法其实有点像大学里的微积分的思想(通 过连续函数的取值区间来计算图形面积)。通过把已知的实结点(memcached服务IP端口)列表结成一个圆,然后在两两实结点之间“放置”尽可能多的 虚拟节点(上面文中的unsigned ints), 假设用户数据映射在虚拟节点上(用户数据真正存储位置是在该虚拟节点代表的实际物理服务器上),这样就能抑制分布不均匀,最大限度地减小服务器增减时的缓 存重新分布。如下图: ??? ???????? ???? 下面是添加结点时: ???? ???? ???? ????????? ??? ????? 如这篇文章所说(总结一致性哈希(Consistent Hashing) ): ??? ???? ?Consistent Hashing最大限度地抑制了hash键的重新分布。另外要取得比较好的负载均衡的效果,往往在服务器数量比较少的时候需要增加虚拟节点来保证服务器能 均匀的分布在圆环上。因为使用一般的hash方法,服务器的映射地点的分布非常不均匀。使用虚拟节点的思想,为每个物理节点(服务器)在圆上分配 100~200个点。这样就能抑制分布不均匀,最大限度地减小服务器增减时的缓存重新分布。用户数据映射在虚拟节点上,就表示用户数据真正存储位置是在该 虚拟节点代表的实际物理服务器上。 ?????? 了解了原理,下面看一下具体实现。 ?????? JAVA实现代码取自Spy Memcached client中的类,原文的作者也尽可能的对代码进行注释说明,所以让我剩了不少时间。

文档评论(0)

qwd513620855 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档