• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

10 Memcached 一致性哈希分布式算法原理与实现[PHP实现]

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
 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\').\'节点上\';

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
新浪微博服务器挂了? - PHP淮北发布时间:2022-07-10
下一篇:
使用PHP生成二维码的两种方法(带logo图像)发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap