一致性哈希算法以及其PHP实现_深度Java的博客-CSDN博客_php一致性hash算法实现


本站和网页 https://blog.csdn.net/21aspnet/article/details/5780831 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

一致性哈希算法以及其PHP实现_深度Java的博客-CSDN博客_php一致性hash算法实现
一致性哈希算法以及其PHP实现
深度Java
于 2010-08-01 14:26:00 发布
17440
收藏
分类专栏:
算法和数据结构
负载均衡
Memcached
PHP基础
文章标签:
算法
php
服务器
负载均衡
memcached
cache
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/21aspnet/article/details/5780831
版权
算法和数据结构
同时被 3 个专栏收录
28 篇文章
6 订阅
订阅专栏
负载均衡
28 篇文章
0 订阅
订阅专栏
Memcached
16 篇文章
1 订阅
订阅专栏
 在做服务器负载均衡时候可供选择的负载均衡的算法有很多,包括:  轮循算法(Round Robin)、哈希算法(HASH)、最少连接算法(Least Connection)、响应速度算法(Response Time)、加权法(Weighted )等。其中哈希算法是最为常用的算法.
    典型的应用场景是: 有N台服务器提供缓存服务,需要对服务器进行负载均衡,将请求平均分发到每台服务器上,每台机器负责1/N的服务。
    常用的算法是对hash结果取余数 (hash() mod N):对机器编号从0到N-1,按照自定义的hash()算法,对每个请求的hash()值按N取模,得到余数i,然后将请求分发到编号为i的机器。但这样的算法方法存在致命问题,如果某一台机器宕机,那么应该落在该机器的请求就无法得到正确的处理,这时需要将当掉的服务器从算法从去除,此时候会有(N-1)/N的服务器的缓存数据需要重新进行计算;如果新增一台机器,会有N /(N+1)的服务器的缓存数据需要进行重新计算。对于系统而言,这通常是不可接受的颠簸(因为这意味着大量缓存的失效或者数据需要转移)。那么,如何设计一个负载均衡策略,使得受到影响的请求尽可能的少呢?     在Memcached、Key-Value Store、Bittorrent DHT、LVS中都采用了Consistent Hashing算法,可以说Consistent Hashing 是分布式系统负载均衡的首选算法。
1、Consistent Hashing算法描述
    下面以Memcached中的Consisten Hashing算法为例说明。
    由于hash算法结果一般为unsigned int型,因此对于hash函数的结果应该均匀分布在[0,232-1]间,如果我们把一个圆环用232 个点来进行均匀切割,首先按照hash(key)函数算出服务器(节点)的哈希值, 并将其分布到0~232的圆上。
    用同样的hash(key)函数求出需要存储数据的键的哈希值,并映射到圆上。然后从数据映射到的位置开始顺时针查找,将数据保存到找到的第一个服务器(节点)上。
 Consistent Hashing原理示意图
    新增一个节点的时候,只有在圆环上新增节点逆时针方向的第一个节点的数据会受到影响。删除一个节点的时候,只有在圆环上原来删除节点顺时针方向的第一个节点的数据会受到影响,因此通过Consistent Hashing很好地解决了负载均衡中由于新增节点、删除节点引起的hash值颠簸问题。
 Consistent Hashing添加服务器示意图
    虚拟节点(virtual nodes):之所以要引进虚拟节点是因为在服务器(节点)数较少的情况下(例如只有3台服务器),通过hash(key)算出节点的哈希值在圆环上并不是均匀分布的(稀疏的),仍然会出现各节点负载不均衡的问题。虚拟节点可以认为是实际节点的复制品(replicas),本质上与实际节点实际上是一样的(key并不相同)。引入虚拟节点后,通过将每个实际的服务器(节点)数按照一定的比例(例如200倍)扩大后并计算其hash(key)值以均匀分布到圆环上。在进行负载均衡时候,落到虚拟节点的哈希值实际就落到了实际的节点上。由于所有的实际节点是按照相同的比例复制成虚拟节点的,因此解决了节点数较少的情况下哈希值在圆环上均匀分布的问题。
虚拟节点对Consistent Hashing结果的影响
    从上图可以看出,在节点数为10个的情况下,每个实际节点的虚拟节点数为实际节点的100-200倍的时候,结果还是很均衡的。
第3段中有这些文字:“但这样的算法方法存在致命问题,如果某一台机器宕机,那么应该落在该机器的请求就无法得到正确的处理,这时需要将当掉的服务器从算法从去除,此时候会有(N-1)/N的服务器的缓存数据需要重新进行计算;”
为何是 (N-1)/N 呢?解释如下:
  比如有 3 台机器,hash值 1-6 在这3台上的分布就是:
  host 1: 1 4
  host 2: 2 5
  host 3: 3 6
  如果挂掉一台,只剩两台,模数取 2 ,那么分布情况就变成:
  host 1: 1 3 5
  host 2: 2 4 6
可以看到,还在数据位置不变的只有2个: 1,2,位置发生改变的有4个,占共6个数据的比率是 4/6 = 2/3
这样的话,受影响的数据太多了,势必太多的数据需要重新从 DB 加载到 cache 中,严重影响性能
【consistent hashing 的办法】
上面提到的 hash 取模,模数取的比较小,一般是负载的数量,而 consistent hashing 的本质是将模数取的比较大,为 2的32次方减1,即一个最大的 32 位整数。然后,就可以从容的安排数据导向了,那个图还是挺直观的
以下部分为一致性哈希算法的一种PHP实现。
下载地址 :http://zwzweb.googlecode.com/files/Consistent%20Hashing.php
深度Java
关注
关注
点赞
收藏
打赏
评论
一致性哈希算法以及其PHP实现
<br />一个好名字是成功的一半,我们希望好名子有如下标准:<br />      第一:要容易记忆朗朗上口<br />   第二:要标明网站的中心思想<br />  第三:要健康而寓意丰富<br />  针对以上三个方面的特点,我认为如果能站在以下五个方面给网站取名字会取得比
复制链接
扫一扫
专栏目录
一致性哈希算法以及其PHP实现详细解析
12-19
在做服务器负载均衡时候可供选择的负载均衡的算法有很多,包括: 轮循算法(Round Robin)、哈希算法(HASH)、最少连接算法(Least Connection)、响应速度算法(Response Time)、加权法(Weighted )等。其中哈希算法是最为常用的算法.
典型的应用场景是: 有N台服务器提供缓存服务,需要对服务器进行负载均衡,将请求平均分发到每台服务器上,每台机器负责1/N的服务。
常用的算法是对hash结果取余数 (hash() mod N):对机器编号从0到N-1,按照自定义的hash()算法,对每个请求的hash()值按N取模,得到余数i,然后将请求分发到编号为
牛牛算法java版,包含牛牛算法 结算配置自定义等,里面有测试类
12-31
包含牛牛算法 结算配置自定义等,里面有测试类,包含牛牛算法 结算配置自定义等,里面有测试类包含牛牛算法 结算配置自定义等,里面有测试类包含牛牛算法 结算配置自定义等,里面有测试类包含牛牛算法 结算配置自定义等,里面有测试类
评论 3
您还未登录,请先
登录
后发表或查看评论
【PHP】PHP实现Hash环/Hash一致性原理实现
最新发布
zhanglei7061的博客
09-08
169
PHP实现Hash环
一致性Hash算法php实现实例
To be a coder
07-28
603
下面使用php实现一致性Hash分布算法。
创建一个ConHash类,它有两个成员变量和三个成员方法。
变量:
serverList//保存服务器列表serverList //保存服务器列表
isSorted //记录服务器列表是否已经排过序。
方法:
addServer:添加一个服务器到服务器列表中
removeServer:从服务器列表中删除一个服务器
lookup:从当前服
PHP一致性hash实现
tpl_01
05-29
337
PHP 一致性hash实现
<?php
/**
* 分布式缓存部署方案
* 当有1台cache服务器不能满足我们的需求,我们需要布置多台来做分布式服务器,但是
* 有个问题,怎么确定一个数据应该保存到哪台服务器上呢?
* 有两种方案,第一种普通hash分布,第二种一致性哈希分布
* 普通hash分布
* 首先将key处理为一个32位字符串,取前8位,在经过hash计算处...
PHP实现的一致性HASH算法示例
10-18
主要介绍了PHP实现的一致性HASH算法,结合具体实例形式分析了hash算法的具体定义与使用技巧,需要的朋友可以参考下
全面了解一致性哈希算法及PHP代码实现
Jack, what else can you do besides holding your little darling?
12-08
195
全面了解一致性哈希算法及PHP代码实现
PHP实现的一致性Hash算法详解【分布式算法】
10-18
主要介绍了PHP实现的一致性Hash算法,结合实例形式详细分析了php一致性Hash算法的概念、原理及相关实现与使用技巧,需要的朋友可以参考下
PHP 之一致性 hash 算法
Able
10-29
199
基本场景
比如你有 N 个 cache 服务器(后面简称 cache ),那么如何将一个对象 object 映射到 N 个 cache 上呢,你很可能会采用类似下面的通用方法计算 object 的 hash 值,然后均匀的映射到到 N 个 cache ;
求余算法: hash (object)% N
一切都运行正常,再考虑如下的两种情况;
1 一个 cache 服务器 m down 掉了(在实际应用中必须要考虑这种情况),这样所有映射到 cache m 的对象都会失效,怎么办,需要把 cache m 从
PHP实现:一致性HASH算法
alexander_phper的博客
01-11
2394
<?php
// +----------------------------------------------------------------------
// | Perfect Is Shit
// +----------------------------------------------------------------------
// | PHP实现:一致性HASH算法
//
hash一致性算法 php,PHP实现的一致性HASH算法示例
weixin_30233335的博客
03-10
43
本文实例讲述了PHP实现的一致性HASH算法。分享给大家供大家参考,具体如下:// +----------------------------------------------------------------------// | Perfect Is Shit// +---------------------------------------------------------------...
hash一致性算法 php,PHP实现的一致性Hash算法详解【分布式算法】
weixin_34534456的博客
03-10
83
本文实例讲述了PHP实现的一致性Hash算法。分享给大家供大家参考,具体如下:一致性哈希算法是分布式系统中常用的算法,为什么要用这个算法?比如:一个分布式存储系统,要将数据存储到具体的节点(服务器)上, 在服务器数量不发生改变的情况下,如果采用普通的hash再对服务器总数量取模的方法(如key%服务器总数量),如果期间有服务器宕机了或者需要增加服务器,问题就出来了。 同一个key经过hash之后,...
PHP实现一致性hash
热门推荐
码农成长记
10-23
1万+
随着memcache、redis以及其它一些内存K/V数据库的流行,一致性哈希也越来越被开发者所了解。因为这些内存K/V数据库大多不提供分布式支持(本文以redis为例),所以如果要提供多台redis server来提供服务的话,就需要解决如何将数据分散到redis server,并且在增减redis server时如何最大化的不令数据重新分布,这将是本文讨论的范畴。
取模算法
取...
一致性hash算法-php-redis版本
光哥的空间
07-09
895
<?php
//抄过来的代码,改了一点点,
//实际来说,效率偏低,命中还算均匀
class RedisHash {
private $_node = array();
private $_nodeData = array();
private $_keyNode = 0;
private $_redis = null;
public $nodeCounter=[];
一致性hash算法原理和PHP实现
程序猿的世界
07-15
138
今天在看redis集群实现原理时,提到了一致性hash算法。已经不是第一次听到这个词了,今天特意了解了一下实现原理。
关于一致性hash算法的原理,主要是核心两点:
hash环:解决动态扩容大面积节点缓存失效问题
节点虚拟分区:用于保证hash环的平衡型
详细原理参考大佬博客:https://blog.csdn.net/sparkliang/article/details/5279393
<?php
/**
* 一致性哈希实现接口
* Interface ConsistentHa.
一致性哈希算法详解及PHP实现
07-29
753
在维基百科中,一致性哈希是这么定义的:
一致哈希是一种特殊的哈希算法。在使用一致哈希算法后,哈希表槽位数(大小)的改变平均只需要对 K/n个关键字重新映射,其中K是关键字的数量, n是槽位数量。然而在传统的哈希表中,添加或删除一个槽位的几乎需要对所有关键字进行重新映射。
我们从定义中看到一致性Hash算法的基本优势,我们看到了该算法主要解决的问题是:当slot数发生变化时,能够...
php 一致性哈希算法,PHP实现的一致性HASH算法示例
weixin_36123285的博客
03-10
51
本文实例讲述了PHP实现的一致性HASH算法。分享给大家供大家参考,具体如下:// +----------------------------------------------------------------------// | Perfect Is Shit// +---------------------------------------------------------------...
hash一致性算法 php,一致性哈希算法以及其PHP实现详细解析
weixin_33957089的博客
03-10
60
在做服务器负载均衡时候可供选择的负载均衡的算法有很多,包括: 轮循算法(Round Robin)、哈希算法(HASH)、最少连接算法(Least Connection)、响应速度算法(Response Time)、加权法(Weighted )等。其中哈希算法是最为常用的算法.典型的应用场景是: 有N台服务器提供缓存服务,需要对服务器进行负载均衡,将请求平均分发到每台服务器上,每台机器负责1/N的...
[php]对服务器进行一致性hash分布算法
flynetcn的专栏
07-09
2725
对服务器进行一致性hash分布算法
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
©️2022 CSDN
皮肤主题:深蓝海洋
设计师:CSDN官方博客
返回首页
深度Java
CSDN认证博客专家
CSDN认证企业博客
码龄18年
暂无认证
1669
原创
4831
周排名
26
总排名
1398万+
访问
等级
12万+
积分
1万+
粉丝
2855
获赞
4029
评论
6951
收藏
私信
关注
热门文章
C#精髓 第四讲 GridView 72般绝技
556475
.c和.h文件的区别
191009
C语言scanf函数详细解释
174816
C语言字节对齐
143343
C语言100个经典的算法
142267
分类专栏
线上排障
付费
16篇
数据库
2篇
基准测试
2篇
付费课程
2篇
工具集
2篇
书单
5篇
C基础
85篇
并发编程
15篇
IDEA
4篇
SpringBoot
11篇
Tomcat
1篇
JVM
5篇
mongodb
3篇
算法和数据结构
28篇
elasticsearch
K8S
1篇
PHP本质
59篇
PHP基础
133篇
PHP框架
11篇
Linux内核
27篇
Linux基础
110篇
Linux环境编程
62篇
汇编语言
8篇
通信和网络
13篇
计算机组成原理
3篇
TCP/IP协议
17篇
HTTP协议
42篇
CSS
7篇
Varish
10篇
Redis
8篇
Apache
32篇
Javascript
65篇
Jquery
14篇
MySQL
24篇
HTML
52篇
XHTML
7篇
Memcached
16篇
分布式文件系统
1篇
性能优化
23篇
JSON
8篇
Ajax
13篇
nginx
22篇
Squid
21篇
Lighttpd
4篇
thttpd
5篇
Haproxy
1篇
负载均衡
28篇
安全
13篇
架构
21篇
XML
16篇
Libevent
5篇
EXTjs
8篇
富文本编辑器
3篇
.NET C#字符串处理
34篇
ASP.NET精讲
30篇
.NET C#基础语法
86篇
正则表达式
10篇
C#语法
15篇
.NET Freamwork
12篇
IIS 6/7 配置
8篇
web.config配置
8篇
缩略图
6篇
URL重写
7篇
VSTO Office开发
17篇
验证码
6篇
图片
10篇
数据导入导出
7篇
安全与加密
28篇
菜单制作
5篇
打印
9篇
报表图表
12篇
Datagrid
52篇
DataList/Repeater
4篇
文件操作
31篇
GridView
21篇
文件上传下载
24篇
日历
9篇
生成静态页
2篇
应用--短信收发
7篇
网页抓取
6篇
网页状态/页面传值
32篇
邮件发送问题
16篇
音频视频多媒体播放
2篇
ADO.NET
37篇
GDI+
30篇
Windows服务
2篇
网络编程套接字
25篇
WMI
12篇
多线程技术
7篇
异常与调试
6篇
消息队列
9篇
编码解码转换
12篇
Win32 API
21篇
.NET Web基本控件
25篇
.NET 缓存
33篇
规范编码标准
4篇
设计模式
6篇
COM/COM+
5篇
SQLserver2008/2005/2000
8篇
SQL语句/存储过程
27篇
VMLweb画图技术
6篇
VisualStudio.NET2005/2008工具
10篇
服务器监控
3篇
测试
1篇
程序员必备
28篇
生活哲理
5篇
wordpress
1篇
CDN
1篇
NoSQL
10篇
数据检索
7篇
消息队列
1篇
ProtocolBuffer
1篇
Hadoop
5篇
分布式计算
2篇
shttpd
1篇
搜索引擎
1篇
存储
1篇
Smarty
6篇
NodeJS
1篇
ecshop
6篇
数据建模
1篇
Oracle
5篇
Java
71篇
Android
1篇
Spring
6篇
Ruby
1篇
持续集成与发布
1篇
大数据
5篇
分布式
4篇
HTML5
1篇
最新评论
通过Native Memory Tracking查JVM的线程内存使用(线上JVM排障之九)
不吃西红柿丶:
[code=ruby]很不错的分享[/code]
C#精髓 第四讲 GridView 72般绝技
李先森、603:
不能用烦死了
sizeof与strlen的区别
我的琉华子:
很详细,厉害
公钥,私钥和数字签名这样最好理解
影月~:
通俗易懂
浅析C语言的一个关键字——register
rain@dsf:
05年
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
通过Native Memory Tracking查JVM的线程内存使用(线上JVM排障之九)
利用阿里云ARMS排查Java大量文件处理场景堆外内存溢出(线上JVM排障之八)
MaxTenuringThreshold调优明显减少系统FGC次数(线上JVM排查之七)
2022年15篇
2021年16篇
2020年50篇
2019年56篇
2018年2篇
2017年3篇
2016年30篇
2015年16篇
2014年11篇
2013年9篇
2012年178篇
2011年383篇
2010年34篇
2009年11篇
2008年33篇
2007年523篇
2005年38篇
2004年412篇
目录
目录
分类专栏
线上排障
付费
16篇
数据库
2篇
基准测试
2篇
付费课程
2篇
工具集
2篇
书单
5篇
C基础
85篇
并发编程
15篇
IDEA
4篇
SpringBoot
11篇
Tomcat
1篇
JVM
5篇
mongodb
3篇
算法和数据结构
28篇
elasticsearch
K8S
1篇
PHP本质
59篇
PHP基础
133篇
PHP框架
11篇
Linux内核
27篇
Linux基础
110篇
Linux环境编程
62篇
汇编语言
8篇
通信和网络
13篇
计算机组成原理
3篇
TCP/IP协议
17篇
HTTP协议
42篇
CSS
7篇
Varish
10篇
Redis
8篇
Apache
32篇
Javascript
65篇
Jquery
14篇
MySQL
24篇
HTML
52篇
XHTML
7篇
Memcached
16篇
分布式文件系统
1篇
性能优化
23篇
JSON
8篇
Ajax
13篇
nginx
22篇
Squid
21篇
Lighttpd
4篇
thttpd
5篇
Haproxy
1篇
负载均衡
28篇
安全
13篇
架构
21篇
XML
16篇
Libevent
5篇
EXTjs
8篇
富文本编辑器
3篇
.NET C#字符串处理
34篇
ASP.NET精讲
30篇
.NET C#基础语法
86篇
正则表达式
10篇
C#语法
15篇
.NET Freamwork
12篇
IIS 6/7 配置
8篇
web.config配置
8篇
缩略图
6篇
URL重写
7篇
VSTO Office开发
17篇
验证码
6篇
图片
10篇
数据导入导出
7篇
安全与加密
28篇
菜单制作
5篇
打印
9篇
报表图表
12篇
Datagrid
52篇
DataList/Repeater
4篇
文件操作
31篇
GridView
21篇
文件上传下载
24篇
日历
9篇
生成静态页
2篇
应用--短信收发
7篇
网页抓取
6篇
网页状态/页面传值
32篇
邮件发送问题
16篇
音频视频多媒体播放
2篇
ADO.NET
37篇
GDI+
30篇
Windows服务
2篇
网络编程套接字
25篇
WMI
12篇
多线程技术
7篇
异常与调试
6篇
消息队列
9篇
编码解码转换
12篇
Win32 API
21篇
.NET Web基本控件
25篇
.NET 缓存
33篇
规范编码标准
4篇
设计模式
6篇
COM/COM+
5篇
SQLserver2008/2005/2000
8篇
SQL语句/存储过程
27篇
VMLweb画图技术
6篇
VisualStudio.NET2005/2008工具
10篇
服务器监控
3篇
测试
1篇
程序员必备
28篇
生活哲理
5篇
wordpress
1篇
CDN
1篇
NoSQL
10篇
数据检索
7篇
消息队列
1篇
ProtocolBuffer
1篇
Hadoop
5篇
分布式计算
2篇
shttpd
1篇
搜索引擎
1篇
存储
1篇
Smarty
6篇
NodeJS
1篇
ecshop
6篇
数据建模
1篇
Oracle
5篇
Java
71篇
Android
1篇
Spring
6篇
Ruby
1篇
持续集成与发布
1篇
大数据
5篇
分布式
4篇
HTML5
1篇
目录
评论 3
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
打赏作者
深度Java
你的鼓励将是我创作的最大动力
¥2
¥4
¥6
¥10
¥20
输入1-500的整数
余额支付
(余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付
您的余额不足,请更换扫码支付或充值
打赏作者
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。
余额充值