首页 > 代码库 > 10 Memcached 一致性哈希分布式算法原理与实现[PHP实现]
10 Memcached 一致性哈希分布式算法原理与实现[PHP实现]
1 <?php 2 3 header("Content-type:text/html;charset=utf-8"); 4 5 interface hash{ 6 7 public function _hash($str); 8 } 9 interface distribution{10 11 public function lookup($key);12 }13 /****14 一致性哈希分布式算法原理与实现[PHP实现]15 **/16 class Consistent implements hash,distribution{17 #存放实际节点18 protected $_nodes=array();19 #定义虚拟节点的个数20 protected $mul=64;21 #定义一个位置数组 记录节点所在位置22 protected $_position=array();23 #算出节点24 public function _hash($str){25 return sprintf(‘%u‘,crc32($str));//把字符串转成32位符号的整数26 }27 #核心功能28 public function lookup($key){29 #算出当前节点30 $point=$this->_hash($key);31 $node=current($this->_position);//先取圆环上最小的一个节点32 #循环所以节点33 foreach($this->_nodes as $k=>$v){34 #找到当前节点所在在的节点数,如果没找到说明大于所以节点 既在最小的节点上35 if($point<=$k){36 $node=$v;37 break;38 }39 }40 return $node;41 }42 #增加一个节点43 public function addNode($node){44 #存储到数组中去 arrar([key=>val])45 //$this->_nodes[$this->_hash($node)]=$node;46 for ($i=0; $i < $this->mul; $i++) { 47 $this->_position[$this->_hash($node.‘-‘.$i)]=$node;48 }49 $this->_sortNode();50 51 }52 #删除一个节点53 public function delNode($node){54 foreach ($this->_position as $k => $v) {55 if($v==$node){56 unset($this->_position[$k]);57 }58 }59 }60 #排序61 protected function _sortNode(){62 #SORT_REGULAR 根据key的大小进行排序63 ksort($this->_position,SORT_REGULAR);64 }65 #打印出所有的虚拟节点66 public function getNodes(){67 var_dump($this->_position);68 }69 }70 $con=new Consistent();71 $con->addNode(‘a‘);72 $con->addNode(‘b‘);73 $con->addNode(‘c‘);74 75 76 echo ‘当前所以服务器如下:<br/>‘;77 $con->getNodes();78 echo ‘<br/>当前的建计算的hsas落点是‘.$con->_hash(‘name‘).‘<br/>‘;79 echo ‘name‘.‘在‘.$con->lookup(‘name‘).‘节点上‘;
10 Memcached 一致性哈希分布式算法原理与实现[PHP实现]
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。