<?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实现]的更多相关文章

  1. memcache 的内存管理介绍和 php实现memcache一致性哈希分布式算法

    1 网络IO模型 安装memcached需要先安装libevent Memcached是多线程,非阻塞IO复用的网络模型,分为监听主线程和worker子线程,监听线程监听网络连接,接受请求后,将连接描 ...

  2. memcached一致性哈希及php客户端实现

    1.memcached分布式算法 memcached的分布式是依靠客户端的算法来实现,假设键名为$key,服务器数量为N,常规的实现方式有两种: 取模哈希 crc32($key)%N,通过这个算法将键 ...

  3. memcached 一致性哈希算法

    本文转载自:http://blog.csdn.net/kongqz/article/details/6695417 一.概述 1.我们的memcache客户端使用了一致性hash算法ketama进行数 ...

  4. 一致性哈希算法原理及Java实现

     一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似.一致性哈希修正了CARP使用的简 单 ...

  5. 一致性哈希算法原理、避免数据热点方法及Java实现

     一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似.一致性哈希修正了CARP使用的简 单 ...

  6. 浅谈一致性哈希(My转)

    一致性哈希(Consistent hashing)算法是由 MIT 的Karger 等人与1997年在一篇学术论文(<Consistent hashing and random trees: d ...

  7. 一致性哈希做负载均衡,基于dubbo的简化版本,超级简单容易理解!!!

    一致性哈希算法原理以及做分布式存储.一定先看:一致性哈希算法 dubbo提供了四种负载均衡实现:权重随机算法,最少活跃调用数算法,一致性哈希算法,加权轮询算法. 本文基于开源项目:guide-rpc- ...

  8. 一致性哈希算法学习及JAVA代码实现分析

    1,对于待存储的海量数据,如何将它们分配到各个机器中去?---数据分片与路由 当数据量很大时,通过改善单机硬件资源的纵向扩充方式来存储数据变得越来越不适用,而通过增加机器数目来获得水平横向扩展的方式则 ...

  9. 一致性哈希(Consistent Hash)

    http://blog.csdn.net/cywosp/article/details/23397179/ http://www.codeproject.com/Articles/56138/Cons ...

随机推荐

  1. 如何命令行编译Java工程

    在src下的包含Main的包下打开命令行,javac -classpath “路径到src,不到包下”  Main.java

  2. 【Linux】CentOS7上rpm命令批量卸载删除模糊rpm包名

    例如,我要删除如下文件名匹配上wine的所有文件

  3. windows下搭建svn服务器

    转自:http://www.cnblogs.com/cloud2rain/archive/2013/04/11/3015080.html 这篇文档非常好,转来学习,有一点就是把subversion创建 ...

  4. apache几种限制ip的方法

    参考文档来源:  http://jingyan.baidu.com/article/4b07be3c193d1648b380f3a9.html1.  禁止访问某些文件/目录增加Files选项来控制,比 ...

  5. Nodejs扩展,实现消息弹窗

    參考https://github.com/olalonde/node-notify的实现 模块的C++代码 node_gtknotify.cc #include <v8.h> #inclu ...

  6. node-表单验证

    var http = require('http'); var url = require('url'); var fs = require('fs'); var querystring = requ ...

  7. Angular 学习笔记——filter

    <!DOCTYPE html> <html lang="en" ng-app="myApp"> <head> <met ...

  8. 系统封装 如何打造原生WINPE

    1 安装微软的AIK(Windows Automated Installation Kit,Windows自动安装工具包),AIK简体中文版下载地址: http://download.microsof ...

  9. npm -D -S -g -i 以及安装技巧

    繁杂:npm install webpack 简洁:npm i webpack 重复性操作: npm i webpack npm i babel-core .... 简洁性操作: npm i webp ...

  10. Oracle基础 存储过程和事务

    一.事务和存储过程 在存储过程中如何使用事务.当需要在存储过程中同时执行多条添加.修改.删除SQL语句时,为了保证数据完整性,我们需要使用事务.使用方式和在PL-SQL中非常相似,但也有一些区别. - ...