在分布式系统中,如果某业务可以由多个相同的节点处理,很容易想到用HASH的方式将业务请求分散到这些节点处理,比如memecache缓存等分 布式集群应用,如果只是简单的使用,不涉及用户用户状态等信息,则可以直接采用取模算法。正常情况下,取模算法好像也不错,但是一旦增加节点或者其中一个 节点上宕机的话,命中率将会急剧降低,所以取模算法在这种情况下弊端很明显,为此,在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法。 具体的算法介绍我这里不多少了,需要了解的可以参见本文:http://www.cnblogs.com/haippy/archive/2011/12/10/2282943.html

下面贴一个用PHP对其进行的简单实现

class Hash
{
//落点集合,可以缓存起来
private $_locations = array();
//虚拟节点数量
private $virtualNodeNum = 24;
//维护的另一种节点和虚拟节点对应关系,方便删除
private $_nodes;
//将字符串转成数字
private function _hash($str)
{
return sprintf('%u', crc32($str));
} /**
* 寻找字符串所在的机器位置
* @param $str
* @return bool|mixed
*/
public function getLocation($str)
{
if(empty($this->_locations)){
return false;
}else{
$position = $this->_hash($str);
//默认取第一个节点
$node = current($this->_locations);
foreach($this->_locations as $k=>$v){
//如果当前的位置,小于或等于节点组中的一个节点,那么当前位置对应该节点
if($position <= $k){
$node = $v;
break;
}
}
return $node;
}
} /**
* 添加一个节点
* @param $node
*/
public function addNode($node)
{
//生成虚拟节点
for($i=0;$i<$this->virtualNodeNum;$i++){
$tmp = $this->_hash($node.$i);
$this->_locations[$tmp] = $node;
$this->_nodes[$node][] = $tmp;
}
//对节点排序
ksort($this->_locations,SORT_NUMERIC);
} /**
* 删除一个节点
* @param $node
*/
public function deleteNode($node)
{
foreach($this->_nodes[$node] as $v){
unset($this->_locations[$v]);
}
} }

PHP 一致性哈希算法的一种简单实现的更多相关文章

  1. 一致性哈希算法以及其PHP实现

    在做服务器负载均衡时候可供选择的负载均衡的算法有很多,包括:  轮循算法(Round Robin).哈希算法(HASH).最少连接算法(Least Connection).响应速度算法(Respons ...

  2. 一致性哈希算法(Consistent Hashing) .

    应用场景 这里我先描述一个极其简单的业务场景:用4台Cache服务器缓存所有Object. 那么我将如何把一个Object映射至对应的Cache服务器呢?最简单的方法设置缓存规则:object.has ...

  3. 五分钟理解一致性哈希算法(consistent hashing)

    转载请说明出处:http://blog.csdn.net/cywosp/article/details/23397179 一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法 ...

  4. 每天进步一点点——五分钟理解一致性哈希算法(consistent hashing)

    转载请说明出处:http://blog.csdn.net/cywosp/article/details/23397179     一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT) ...

  5. 一致性哈希算法(consistent hashing)【转】

    一致性哈希算法 来自:http://blog.csdn.net/cywosp/article/details/23397179       一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希 ...

  6. 一致性哈希算法——算法解决的核心问题是当slot数发生变化时,能够尽量少的移动数据

    一致性哈希算法 摘自:http://blog.codinglabs.org/articles/consistent-hashing.html 算法简述 一致性哈希算法(Consistent Hashi ...

  7. 一致性哈希算法原理及Java实现

     一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似.一致性哈希修正了CARP使用的简 单 ...

  8. _00013 一致性哈希算法 Consistent Hashing 新的讨论,并出现相应的解决

    笔者博文:妳那伊抹微笑 博客地址:http://blog.csdn.net/u012185296 个性签名:世界上最遥远的距离不是天涯,也不是海角,而是我站在妳的面前.妳却感觉不到我的存在 技术方向: ...

  9. Notes:一致性哈希算法

    业务场景: 存在三个专门提供缓存服务的服务器,前端所需要的图片等静态资源被缓存于这三个服务器其中之一. 但是如何提高查找图片的速度呢? 可以采用哈希算法. 常规意义上的哈希算法: 通过hash(图片名 ...

随机推荐

  1. DOM4j 操作XML

    <?xml version="1.0" encoding="GBK"?> <persons> <men> <perso ...

  2. 12C 连接方式和 Oracle Easy Connect Naming method

    1.12C 连接方式 PDB is not an instance, so using SID in the connection string will not work. When the dat ...

  3. extjs 框架模板

    的 <script> Ext.onReady(function(){ Ext.create('Ext.container.Viewport', { layout: 'border', it ...

  4. Tomcat(.jsp)

    定义: Tomcat服务器是一个免费的开放源代码的Web应用服务器.Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由 ...

  5. Bootstrap-dialog的使用(续Bootstrap Table)

    Bootstrap-dialog实现表格内容的增,删,改. 插件引入:必须先引入jquery和bootstrap和artTemplate. <link rel="stylesheet& ...

  6. jsp显示计算数值, 四舍五入

    <script>document.write(Math.round(<%= rs_MFM.getInt("PVRCompl") %>/<%= rs_M ...

  7. 多年心愿,终于完成,热泪盈眶啊。。。Adrew NG 的 机器学习

    谢谢Andrew老师!谢谢Coursera!谢谢自己!希望这是一个好的开始!希望自己也能使用机器学习来make a better world...  

  8. eazasyui树形菜单

    //此处是easyui的json格式 var tree = { id:'', text:'', state:'', checked:'', attributes:'', children:'' } / ...

  9. JMS连接WMQ及收发消息

    因为对JMS的了解也只算入门级,有些概念也很模糊,不过,卤煮会尽可能去介绍的.另外,sample code都调试过可以跑. 1.神马是JMS? jms即Java消息服务(Java Message Se ...

  10. ARM-LINUX学习笔记-(虚拟机linux串口终端以及USB程序下载,基于TQ2440)

    昨天安装了ssh服务之后今天在windows上用xshell登陆发现登录不上,原因是使用了virtualbox的NAT模式,在NAT模式下,客户机可以很方便地上网,但是想要链接宿主机就需要打开网络地址 ...