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 ...
随机推荐
- xml文件生成与下载
写在前面: 最近要做一个新的功能,点击按钮,可以根据数据生成对应的xml文件并保存.下面记录一下在做的过程的一些疑惑与问题(我就是太笨了,一些很简单的知识都不知道,不过通过这次跟蛋蛋的交流,解决了我的 ...
- Linux守护进程的启动方法(转)
作者: 阮一峰 日期: 2016年2月28日 "守护进程"(daemon)就是一直在后台运行的进程(daemon). 本文介绍如何将一个 Web 应用,启动为守护进程. 一.问题的 ...
- Eclipse常用小知识汇总
原文:http://blog.csdn.net/jinzhencs/article/details/50462370 1.修改注释 自动出来的author
- linux 远程同步数据工具rsync (1)
rsync 远程同步数据工具,是linux下的数据备份工具rsync(remote sync 远程同步) 特点:在本地同步数据(类似于cp,但是有不同于远程scp),它会先判断已经存在的数据和远程数据 ...
- SQL 存储过程(转帖摘录)
篇一: 创建存储过程 Create Proc dbo.存储过程名 存储过程参数 AS 执行语句 RETURN 执行存储过程 GO *********** ...
- django 删除表后如何恢复
大家都知道Python manage.py makemigrations 创建迁移文件也就是sql语句,python manage.py migrate执行makemigrations创建的文件,如果 ...
- ISP模块之色彩增强算法--HSV空间Saturation通道调整 .
色彩增强不同于彩色图像增强,图像增强的一般处理方式为直方图均衡化等,目的是为了增强图像局部以及整体对比度.而色彩增强的目的是为了使的原有的不饱和的色彩信息变得饱和.丰富起来.对应于Photoshop里 ...
- ES6中Set集合(与java里类似)
一.引入背景 Set集合是一种无重复元素的列表,开发者们一般不会逐一读取数组中的元素,也不太可能逐一访问Set集合中的每个元素,通常的做法是检测给定的值在某个集合中是否存在 Map集合内含多组键值对, ...
- C#字符串操作大全
===============================字符串基本操作================================ 一.C#中字符串的建立过程 例如定义变量 strT=&qu ...
- JNI 函数注册与管理
class<--> 一一对应so-->method 每个so对应于一个类对象 类中的每个native方法对应 于so中的一个native的function,对应关系涉及 {c ...