首页 > 代码库 > 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实现]