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 ...
随机推荐
- C# 事件和Unity3D
http://zijan.iteye.com/blog/871207 翻译自: http://www.everyday3d.com/blog/index.php/2010/10/04/c-events ...
- 使用gtest自动化测试并给出性能测试结果(windows 版本,版本平台也可以使用,但并没有做完整的测试)
/************************************************************* *使用gtest自动化测试 * ********************* ...
- How To Use NSOperations and NSOperationQueues
Update 10/7/14: This tutorial has now been updated for iOS 8 and Swift; check it out! Everyone has h ...
- BAT文件使程序具有以系统权限运行的效果
@echo off if "%1" == "h" goto begin mshta vbscript:createobject("wscript.sh ...
- 全国省会城市路网以及POI 数据
- Java程序猿修炼之道 之 Logging(3/3) - 怎么分析Log
1. 说明 作为一个程序猿我们常常要做一件事情:获取某个Log文件,从当中找出自己想要的信息. 本文总结了我在工作中使用了哪些工具来分析Log文件获取我想要的信息,我近期几年的工作环境都是server ...
- hive删除表报错
metastore.RetryingHMSHandler: HMSHandler Fatal error: javax.jdo.JDODataStoreException: You have an e ...
- Spark-Streaming之window滑动窗口应用
Spark-Streaming之window滑动窗口应用,Spark Streaming提供了滑动窗口操作的支持,从而让我们可以对一个滑动窗口内的数据执行计算操作.每次掉落在窗口内的RDD的数据,会被 ...
- RedHat虚拟机相关操作
在VM虚拟机中安装完Redhat系统之后 如果需要用secureCRT连接linux系统的话 操作步骤如下: 1.进入linux系统,在终端输入ifconfig(注意,不是windows的ipconf ...
- 解决dubbo问题:forbid consumer(1)
原因: 1.dubbo服务没有起动起来 2.dubbo链接的地址出现异常 3.dubbo服务端更新了服务接口,没有发布 如果已上都没有问题,那么还有一个原因就是 “ 别人的代码有问题 阻碍了 你的程序 ...