10 Memcached 一致性哈希分布式算法原理与实现[PHP实现]
<?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实现]的更多相关文章
- memcache 的内存管理介绍和 php实现memcache一致性哈希分布式算法
1 网络IO模型 安装memcached需要先安装libevent Memcached是多线程,非阻塞IO复用的网络模型,分为监听主线程和worker子线程,监听线程监听网络连接,接受请求后,将连接描 ...
- memcached一致性哈希及php客户端实现
1.memcached分布式算法 memcached的分布式是依靠客户端的算法来实现,假设键名为$key,服务器数量为N,常规的实现方式有两种: 取模哈希 crc32($key)%N,通过这个算法将键 ...
- memcached 一致性哈希算法
本文转载自:http://blog.csdn.net/kongqz/article/details/6695417 一.概述 1.我们的memcache客户端使用了一致性hash算法ketama进行数 ...
- 一致性哈希算法原理及Java实现
一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似.一致性哈希修正了CARP使用的简 单 ...
- 一致性哈希算法原理、避免数据热点方法及Java实现
一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似.一致性哈希修正了CARP使用的简 单 ...
- 浅谈一致性哈希(My转)
一致性哈希(Consistent hashing)算法是由 MIT 的Karger 等人与1997年在一篇学术论文(<Consistent hashing and random trees: d ...
- 一致性哈希做负载均衡,基于dubbo的简化版本,超级简单容易理解!!!
一致性哈希算法原理以及做分布式存储.一定先看:一致性哈希算法 dubbo提供了四种负载均衡实现:权重随机算法,最少活跃调用数算法,一致性哈希算法,加权轮询算法. 本文基于开源项目:guide-rpc- ...
- 一致性哈希算法学习及JAVA代码实现分析
1,对于待存储的海量数据,如何将它们分配到各个机器中去?---数据分片与路由 当数据量很大时,通过改善单机硬件资源的纵向扩充方式来存储数据变得越来越不适用,而通过增加机器数目来获得水平横向扩展的方式则 ...
- 一致性哈希(Consistent Hash)
http://blog.csdn.net/cywosp/article/details/23397179/ http://www.codeproject.com/Articles/56138/Cons ...
随机推荐
- 十. 图形界面(GUI)设计4.面板
面板有两种,一种是普通面板(JPanel),另一种是滚动面板(JScrollPane). JPanel 面板是一种通用容器,JPanel的作用是实现界面的层次结构,在它上面放入一些组件,也可以在上面绘 ...
- CocoaPods 错误 target overrides the `OTHER_LDFLAGS`...
Xcode 升级到 6.0 后,更新 CocoaPods,出现了如下的警告 [!] The `Paopao [Debug]` target overrides the `PODS_ROOT` buil ...
- Linux文件名小写的好处(转)
说明:来自老阮的<为什么文件名要小写>的文章,其实我觉得应该说是<Linux文件名为什么要小写>会更合适些. 一.可移植性 Linux 系统是大小写敏感的,而 Windows ...
- Python学习笔记——基本数据结构
列表list List是python的一个内置动态数组对象,它的基本使用方式如下: shoplist = ['apple', 'mango', 'carrot', 'banana'] print 'I ...
- Multithreading and Grand Central Dispatch on iOS for Beginners Tutorial
Have you ever written an app where you tried to do something, and there was a long pause while the U ...
- samba 服务实现在windows共享文件
1. 什么是samba Samba服务类似于windows上的共享功能,可以实现在Linux上共享文件,windows上访问,当然在Linux上也可以访问到. 是一种在局域网上共享文件和打印机的一种通 ...
- ES怎么进行字段添加索引,并保留原有数据
1.先将原索引进行备份 curl -XPOST '192.168.46.163:9200/_reindex?pretty' -H 'Content-Type: application/json' -d ...
- 使用老版本的java api提交hadoop作业
还是使用之前的单词计数的例子 自定义Mapper类 import java.io.IOException; import org.apache.hadoop.io.LongWritable; impo ...
- webstorm定位如何在代码后面?
写代码的时候定位总是在任意一点,而不是在代码的最后面. 以至于写代码的时候总会莫名其妙出现很多空格之类的奇怪报错. 取消图中选项
- 有效的web安全信息源
杂志:hackcto ,书安 乌云知识库,91ri.org,安全脉搏(http://www.secpulse.com/) 乌云公开漏洞,乌云热点漏洞,90sec 内网渗透找90.web注入找习科, 已 ...