memcached分布式集群算法(一致性哈希实现)

来源:互联网 发布:淘宝网图书 编辑:程序博客网 时间:2024/06/05 00:11

用PHP实现memcached分布式集群算法(一致性哈希)

<?phpinterface hasher{public function _hash($str);}interface distribution{public function lookup($key);}class Consistent implements hasher,distribution{protected $_nodes = array();protected $_postion = array();protected $_mul = 64;//每个节点对应64个虚拟节点,目的是分布更均匀//把字符串转换为32位符号整数public function _hash($str){return sprintf("%u", crc32($str));}//计算掉落的节点public function lookup($key){$point = $this->_hash($key);$node = current($this->_postion);//取圆环上最小的一个节点foreach($this->_postion as $k=>$v){if($point <= $k){$node = $v;break;}}reset($this->_postion);return $node;}//添加cache服务器public function addNodes($node){//判断节点是否存在if(isset($this->_nodes[$node])){return;}for($i=0; $i<$this->_mul; $i++){$pos = $this->_hash($node.'-'.$i);$this->_postion[$pos] = $node;$this->_nodes[$node][] = $pos;}$this->_sortPos();}//减少cache服务器public function delNodes($node){//判断节点是否已经不存在了if(!isset($this->_nodes[$node])){return;}foreach($this->_nodes[$node] as $v){unset($this->_postion[$v]);}unset($this->_nodes[$node]);}//排序protected function _sortPos(){ksort($this->_postion, SORT_REGULAR);}public function getNodes(){return $this->_nodes;}public function getPostion(){return $this->_postion;}}$consistent = new Consistent();$consistent->addNodes("a");$consistent->addNodes("b");$consistent->addNodes("c");$consistent->addNodes("d");$consistent->addNodes("e");$consistent->delNodes("a");$keys = array("apple","cat","pig","dog","hit","1000");print_r($consistent->getNodes());print_r($consistent->getPostion());foreach($keys as $key){echo '此'.$key.'落在'.$consistent->lookup($key).'节点上<br/>';}


2 0
原创粉丝点击