<?php  

 header("Content-type:text/html;charset=utf-8");

 interface  hash{

     public function _hash($str);
}
interface distribution{ public function lookup($key);
}
/****
一致性哈希分布式算法原理与实现[PHP实现]
**/
class Consistent implements hash,distribution{
#存放实际节点
protected $_nodes=array();
#定义虚拟节点的个数
protected $mul=64;
#定义一个位置数组 记录节点所在位置
protected $_position=array();
#算出节点
public function _hash($str){
return sprintf('%u',crc32($str));//把字符串转成32位符号的整数
}
#核心功能
public function lookup($key){
#算出当前节点
$point=$this->_hash($key);
$node=current($this->_position);//先取圆环上最小的一个节点
#循环所以节点
foreach($this->_nodes as $k=>$v){
#找到当前节点所在在的节点数,如果没找到说明大于所以节点 既在最小的节点上
if($point<=$k){
$node=$v;
break;
}
}
return $node;
}
#增加一个节点
public function addNode($node){
#存储到数组中去 arrar([key=>val])
//$this->_nodes[$this->_hash($node)]=$node;
for ($i=0; $i < $this->mul; $i++) {
$this->_position[$this->_hash($node.'-'.$i)]=$node;
}
$this->_sortNode(); }
#删除一个节点
public function delNode($node){
foreach ($this->_position as $k => $v) {
if($v==$node){
unset($this->_position[$k]);
}
}
}
#排序
protected function _sortNode(){
#SORT_REGULAR 根据key的大小进行排序
ksort($this->_position,SORT_REGULAR);
}
#打印出所有的虚拟节点
public function getNodes(){
var_dump($this->_position);
}
}
$con=new Consistent();
$con->addNode('a');
$con->addNode('b');
$con->addNode('c'); echo '当前所以服务器如下:<br/>';
$con->getNodes();
echo '<br/>当前的建计算的hsas落点是'.$con->_hash('name').'<br/>';
echo 'name'.'在'.$con->lookup('name').'节点上';

10 Memcached 一致性哈希分布式算法原理与实现[PHP实现]的更多相关文章

  1. memcache 的内存管理介绍和 php实现memcache一致性哈希分布式算法

    1 网络IO模型 安装memcached需要先安装libevent Memcached是多线程,非阻塞IO复用的网络模型,分为监听主线程和worker子线程,监听线程监听网络连接,接受请求后,将连接描 ...

  2. memcached一致性哈希及php客户端实现

    1.memcached分布式算法 memcached的分布式是依靠客户端的算法来实现,假设键名为$key,服务器数量为N,常规的实现方式有两种: 取模哈希 crc32($key)%N,通过这个算法将键 ...

  3. memcached 一致性哈希算法

    本文转载自:http://blog.csdn.net/kongqz/article/details/6695417 一.概述 1.我们的memcache客户端使用了一致性hash算法ketama进行数 ...

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

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

  5. 一致性哈希算法原理、避免数据热点方法及Java实现

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

  6. 浅谈一致性哈希(My转)

    一致性哈希(Consistent hashing)算法是由 MIT 的Karger 等人与1997年在一篇学术论文(<Consistent hashing and random trees: d ...

  7. 一致性哈希做负载均衡,基于dubbo的简化版本,超级简单容易理解!!!

    一致性哈希算法原理以及做分布式存储.一定先看:一致性哈希算法 dubbo提供了四种负载均衡实现:权重随机算法,最少活跃调用数算法,一致性哈希算法,加权轮询算法. 本文基于开源项目:guide-rpc- ...

  8. 一致性哈希算法学习及JAVA代码实现分析

    1,对于待存储的海量数据,如何将它们分配到各个机器中去?---数据分片与路由 当数据量很大时,通过改善单机硬件资源的纵向扩充方式来存储数据变得越来越不适用,而通过增加机器数目来获得水平横向扩展的方式则 ...

  9. 一致性哈希(Consistent Hash)

    http://blog.csdn.net/cywosp/article/details/23397179/ http://www.codeproject.com/Articles/56138/Cons ...

随机推荐

  1. 1.14(java学习笔记)数组

    假如我们需要用到1000个相同类型的数据,肯定不可能创建1000个变量, 这样既不方便,也不直观,也不便于我们使用.这时就需要用到数组. 一.数组的声明与使用 public class Array { ...

  2. Delphi 实现窗体自适应调整尺寸以适应不同屏幕分辩率的显示问题

    给你一段代码,网上转的:unit uMyClassHelpers;//实现窗体自适应调整尺寸以适应不同屏幕分辩率的显示问题.//        陈小斌,2012年3月5日 interface Uses ...

  3. VUE -- JSONP的诞生、原理及应用实例

    问题: 页面中有一个按钮,点击之后会更新网页中的一个盒子的内容. Ajax可以很容易的满足这种无须刷新整个页面就可以实现数据变换的需求. 但是,Ajax有一个缺点,就是他不允许跨域请求资源. 如果我的 ...

  4. win7/win10+vs2015+pcl1.8.0详细配置方案;

    参考网友的资料整理为更详细的解决方案 一.下载相关文件 1.下载PCL-1.8.0-AllInOne-msvc2015-win64.exe.属性表和PDB和测试pcd文件rabbit.pcd,其中,属 ...

  5. Java防止SQL注入的几个途径

    java防SQL注入,最简单的办法是杜绝SQL拼接,SQL注入攻击能得逞是因为在原有SQL语句中加入了新的逻辑,如果使用 PreparedStatement来代替Statement来执行SQL语句,其 ...

  6. EM算法和GMM模型推导

  7. sqoop使用记录

    sqoop简介 Sqoop是用来实现结构型数据(如关系数据库)和Hadoop之间进行数据迁移的工具.它充分利用了MapReduce的并行特点以批处理的方式加快数据的传输,同时也借助MapReduce实 ...

  8. 面试——String的比较总结

    public class StringTest { private static String getA() {return "a";} public static void ma ...

  9. android中Invalidate和postInvalidate的差别

    Android中实现view的更新有两组方法,一组是invalidate.还有一组是postInvalidate.当中前者是在UI线 程自身中使用,而后者在非UI线程中使用. Android提供了In ...

  10. 小计一次linux下渗透方法

    本文转自91ri 踩点 目标域名是XX.com 我们的目标是大站,所以主站一般都挺安全的,所以直接寻找二级目录,运气好时能找到一些开源的cms,运气更好点找到个dede啥的,那就…. 我们直接枚举他域 ...