一致性哈希算法以及其PHP实现详细解析
一致性哈希算法以及其 现详细解析在做服务器负载均衡时候可供选择的负载均衡的算法有很多,包括:轮循算法(、哈希算法(、最少连接算法( 、响应速度算法(、加权法(等。其中哈希算法是最为常用的算法 . 典型的应用场景是:有 N 台服务器提供缓存服务,需要对服务器进行负载均衡,将请求平均分发到每台服务器上,每台机器负责 1/N 的服务。 常用的算法是对 果取余数 ( 对机器编号从 0 到 照自定义的算法,对每个请求的 值按 N 取模,得到余数 i,然后将请求分发到编号为 i 的机器。但这样的算法方法存在致命问题,如果某一台机器宕机,那么应该落在该机器的请求就无法得到正确的处理,这时需要将当掉的服务器从算法从去除,此时候会有(N 的服务器的缓存数据需要重新进行计算;如果新增一台机器,会有 N /(N+1)的服务器的缓存数据需要进行重新计算。对于系统而言,这通常是不可接受的颠簸(因为这意味着大量缓存的失效或者数据需要转移) 。那么,如何设计一个负载均衡策略,使得受到影响的请求尽可能的少呢? 在 都采用了 法,可以说 分布式系统负载均衡的首选算法。 1、 法描述下面以 的 法为例说明。 由于 法结果一般为 ,因此对于 数的结果应该均匀分布在[0,232,如果我们把一个圆环用 232 个点来进行均匀切割,首先按照 数算出服务器(节点)的哈希值, 并将其分布到 0~232 的圆上。 用同样的 数求出需要存储数据的键的哈希值,并映射到圆上。然后从数据映射到的位置开始顺时针查找,将数据保存到找到的第一个服务器(节点)上。 理示意图 新增一个节点的时候,只有在圆环上新增节点逆时针方向的第一个节点的数据会受到影响。删除一个节点的时候,只有在圆环上原来删除节点顺时针方向的第一个节点的数据会受到影响,因此通过 好地解决了负载均衡中由于新增节点、删除节点引起的 颠簸问题。 加服务器示意图 虚拟节点(之所以要引进虚拟节点是因为在服务器(节点)数较少的情况下(例如只有 3 台服务器) ,通过 出节点的哈希值在圆环上并不是均匀分布的(稀疏的) ,仍然会出现各节点负载不均衡的问题。虚拟节点可以认为是实际节点的复制品(,本质上与实际节点实际上是一样的(不相同) 。引入虚拟节点后,通过将每个实际的服务器(节点)数按照一定的比例(例如 200 倍) 扩大后并计算其 以均匀分布到圆环上。在进行负载均衡时候,落到虚拟节点的哈希值实际就落到了实际的节点上。由于所有的实际节点是按照相同的比例复制成虚拟节点的,因此解决了节点数较少的情况下哈希值在圆环上均匀分布的问题。 虚拟节点对 果的影响 从上图可以看出,在节点数为 10 个的情况下,每个实际节点的虚拟节点数为实际节点的100的时候,结果还是很均衡的。 第 3 段中有这些文字:“ 但这样的算法方法存在致命问题,如果某一台机器宕机,那么应该落在该机器的请求就无法得到正确的处理,这时需要将当掉的服务器从算法从去除,此时候会有(N 的服务器的缓存数据需要重新进行计算;” 为何是(N 呢?解释如下: 比如有 3 台机器, 1这 3 台上的分布就是: :14 :25 : 3 6 如果挂掉一台,只剩两台,模数取 2 ,那么分布情况就变成: :13 5 :24 6 可以看到,还在数据位置不变的只有 2 个:1 ,2,位置发生改变的有 4 个,占共 6 个数据的比率是 4/6 = 2/3 这样的话,受影响的数据太多了,势必太多的数据需要重新从 载到 ,严重影响性能 【办法】 上面提到的 模,模数取的比较小,一般是负载的数量,而 本质是将模数取的比较大,为 2 的 32 次方减 1,即一个最大的 32 位整数。然后,就可以从容的安排数据导向了,那个图还是挺直观的。 以下部分为一致性哈希算法的一种 现。点击下载 您可能感兴趣的文章:c# 哈希算法的实现方法及思路 希算法实现(希算法) 间 新浪微博 腾讯微博 搜狐微博 人人网 开心网 百度搜藏更多 致性哈希算法 复制链接收藏本文打印本文关闭本文返回首页 上一篇:何利用 现跨域 下一篇:限级分类,超级简单的无限级分类,支持输出树状图 相关文章 2011于 接 速上手及简单应用说明 2007 持页面回退的两种方法 [转]2010类商品秒杀计时实现代码 2013 显示 的统计图方法 2010007 装配置方法 2013让上传的文件大小在上传前就受限制的两种解决方法 2007 置步骤详解 2013析 的设计 文章评论 最 近 更 新 示今天、今月、上月、今年的起点/终 用函数和常见疑难问题解答 现多服务器 享之 享的方 函数语法及使用代码 件去掉释空格的函数分析( 取字符函数 缩编码和解码代码如何使用 “彩蛋进行敏感信息获取 几个常用数字判断函数代码 取网页内容方法总结 热 点 排 行 数使用方法 面跳转到另一个页面的多种 符串截取问题置文件详解 (配置)火车头采集器 集图文教程 现 详细的 明安装教程 和 和(换使用与 ,,