[php]对服务器进行一致性hash分布算法
来源:互联网 发布:mac appstore 打不开 编辑:程序博客网 时间:2024/06/05 14:12
<?php/** * 对服务器进行一致性hash分布算法 */class HashRing{private $servers = array();private $nodeList = array();private $nodeHashList = array();private $nodeTotalNum = 0;private $virtualNodeNum = 32;private $keyHash = '';public function __construct($servers){$this->servers = $servers;foreach ($servers as $server) {for ($i = 0; $i < $this->virtualNodeNum; $i++) {$this->nodeList[sprintf("%u", crc32($server.'-'.$i))] = array($server, $i);}}ksort($this->nodeList);$this->nodeHashList = array_keys($this->nodeList);}private function getNodeIndex($key){$this->keyHash = sprintf("%u", crc32($key));if ($this->keyHash > end($this->nodeHashList)) {$this->keyHash = $this->keyHash % end($this->nodeHashList);}if ($this->keyHash <= reset($this->nodeHashList)) {return 0;}$this->nodeTotalNum = count($this->nodeHashList);return $this->binaryChopIndex(0, $this->nodeTotalNum);}private function binaryChopIndex($l=0, $r=0){if ($l < $r) {$avg = intval(($l+$r) / 2);if ($this->nodeHashList[$avg] == $this->keyHash) {return $avg;} elseif ($this->keyHash < $this->nodeHashList[$avg] && ($avg > 0)) {return $this->binaryChopIndex($l, $avg-1);} else {return $this->binaryChopIndex($avg+1, $r);}} else {return $l;}}public function getServersByKey($key, $num=1){$index = $this->getNodeIndex($key);$server = $this->nodeList[$this->nodeHashList[$index]];if ($num == 1) {return $server[0];}if ($num >= count($this->servers)) {$num = count($this->servers);}$result = array($server[0]);for ($i=$index+1; true; $i++) {if ($i >= $this->nodeTotalNum) {$i = 0;}$nextServer = $this->nodeList[$this->nodeHashList[$i]];if (!in_array($nextServer[0], $result)) {$result[] = $nextServer[0];}if (count($result) == $num) {break;}}return $result;}}//示例$servers = array('127.0.0.1:11211','127.0.0.1:11212','127.0.0.1:11213','127.0.0.1:11214','127.0.0.1:11215');$obj = new HashRing($servers);$servers = $obj->getServersByKey('testkey', 2);print_r($servers);echo "\n";
0 0
- [php]对服务器进行一致性hash分布算法
- [php]对服务器进行一致性hash分布算法
- 一致性Hash分布算法实例
- php一致性hash算法
- PHP实现:一致性HASH算法
- Ceph剖析:数据分布之CRUSH算法与一致性Hash
- Ceph剖析:数据分布之CRUSH算法与一致性Hash
- Ceph剖析:数据分布之CRUSH算法与一致性Hash
- 对一致性hash算法的理解
- memcached缓存服务器一致性hash算法分析
- 一致性hash算法-php-redis版本
- 一致性Hash算法php实现实例
- php之一致性hash分布式算法
- php一致性hash
- PHP实现一致性hash
- 一致性hash - php
- php 一致性hash
- 一致性hash - php
- iOS开发笔记--高端Thread用法
- Struts2(1)
- 黑马day15 文件上传&apche的工具包
- Linux开发中常见段错误问题原因分析
- (or type control -D to continue)
- [php]对服务器进行一致性hash分布算法
- TOJ 4107 A simple problem
- unity-metaio在xcode的导出编译出错
- Unicode字符集下CString与char *转换
- tar命令解压时如何去除目录结构及其解压到指定目录
- GPIO口中断例程_MK20DX128VLH5_K20系列
- 测试磁盘读写速度
- Android的TitleBar设置
- NFS基本知识汇总-(2)