memcache分布式集群算法——求模算法
来源:互联网 发布:小猪cms破解版2017 编辑:程序博客网 时间:2024/06/08 11:47
memcached是一个分布式缓存,允许配置多个节点,但是memcached在这多个节点之间不能实现自动分配数据,换句话说,memcached节点之间,是不互相通信的。因此,memcached的分布式,是需要用户的算法来设计的,将数据分布在不同的节点中。
求模算法
假设有n个节点,从0~n-1编号,key对n求模,余i,则key落在第i台服务器上。
但是存在一个命中率的问题:
假设这5台服务器突然挂了一台,那么求模的底数则由5变为4。就会有
key0%5 = 0,key0%4 = 0 hitkey1%5 = 1,key1%4 = 1 hitkey2%5 = 2,key2%4 = 2 hitkey3%5 = 3,key3%4 = 3 hitkey4%5 = 4,key4%4 = 0 miss......key19%5 = 4 ,key19%4=3 miss
归纳:
有n台服务器,变为n-1台服务器
每 n*(n-1)个数据中, 只有(n-1)个单元对n和(n-1)求模得到相同的结果、
所以 命中率在服务器 down 的短期内, 急剧下降至 (n-1)/(n*(n-1)) = 1/(n-1)
所以: 服务器越多, 则 down 机的后果越严重
求模算法代码
<?php//hash接口interface hash{ public function _hash($key);}//分布式搜索策略interface distribution{ public function looup($key);}/** * 求模算法 */class Moder implements hash,distribution{ public $nodes = [];//服务器节点 //重写hash接口中的_hash方法 public function _hash($key){ return sprintf("%u",crc32($key)); } //重写分布式接口中的looup方法 public function looup($key){ $hashKey = $this->_hash($key); $num = count($this->nodes); $mod = fmod($hashKey, $num); return $this->nodes[$mod]; } //添加服务器节点方法 public function addNode($node){ if(in_array($node, $this->nodes)){ return; } $this->nodes[] = $node; } //删除一台节点,模拟down机 public function delNode($node){ foreach ($this->nodes as $k => $n) { if($node == $n){ unset($this->nodes[$k]); } } array_values($this->nodes);//重新编排键 }}$con = new Moder();$con->addNode('a');$con->addNode('b');$con->addNode('c');$con->addNode('d');echo $con->_hash('title');echo $con->looup('title');echo "<br/>";echo $con->_hash('name');echo $con->looup('name');echo "<br/>";echo $con->_hash('age');echo $con->looup('age');echo "<br/>";
首先需要创建一个Moder类的实例,然后添加服务器节点,调用addNode方法,在addNode中首先判断服务器是否已经存在该节点,如果不存在,就添加服务器上。
如果需要查找某个数据,可以调用looup方法,这个方法首先将key转换成hash值,然后将这个hash值和服务器的节点数量求模,然后根据余数返回该key值落在的服务器节点。
0 0
- memcache分布式集群算法——求模算法
- memcache分布式集群算法——一致性哈希算法
- Memcache - 分布式算法
- memcache 分布式,算法实现
- memcache分布式算法
- memcache 分布式,算法实现
- memcache的分布式hash算法
- memcached 分布式集群算法
- memcached分布式集群算法
- memcached-分布式集群算法
- Memcache(5)------Memcached的分布式算法
- Memcache学习笔记(6)- memcache分布式算法 - 一致性hash
- 集群算法——人工鱼群算法
- memcached分布式集群的存取算法
- memcache分布式 [一致性hash算法] 的php实现
- memcache分布式 [一致性hash算法] 的php实现
- 分布式memcache 一致性哈希算法(采用环状数据结构)
- memcache分布式 [一致性hash算法] 的php实现
- delphi控制台程序
- CentOS安装nmap端口查看工具
- [Caffe]: 关于concat layer
- JS 实现浏览器打印、打印预览
- C语言写链表 文件版本
- memcache分布式集群算法——求模算法
- 创业日志(八)管理之人员激励
- 超详细的Maven使用教程
- CMD,AMD的原理,区别,应用场景
- React-Native解决键盘遮挡问题(Keyboard遮挡问题)
- 关于垃圾回收的一些看法
- Mybatis学习教程—— Mybatis入门实例
- 第9章 命令(1)——概述
- IOS 打包上架