Memcached 之PHP实现服务器集群一致性hash算法
/**
* memcached 一致性hash,分布式算法
* Class MemcacheCluster
*/
class MemcacheCluster
{
protected $nodes = array(); //服务器节点
protected $position = array(); //虚拟节点
protected $virtualNum = 32; //每个节点有32个虚拟节点;具体数量也可以 16 ,8等 public function hash($str)
{
//将字符串转成32位符号整数
return sprintf("%u", crc32($str));
} //查找key 落到哪个节点上
public function findNode($key)
{
$point = $this->hash($key); //先取圆环上最小的一个节点
//$key 哈希后比最大的节点都大就放到第一个节点
$node = current($this->position);
//下面这个查找可以后期优化为二分查找法。
foreach ($this->position as $k => $v) {
if ($point <= $k) {
$node = $v;
break;
}
}
//复位数组指针
reset($this->position);
return $node;
} public function addNode($node)
{
if (isset($this->nodes[$node])) {
return;
}
for ($i = 0; $i < $this->virtualNum; $i++) {
$pos = $this->hash($node . '-' . $i);
$this->position[$pos] = $node;
//方便删除对应的虚拟节点
$this->nodes[$node][] = $pos;
}
$this->sortPos();
} public function delNode($node)
{
if (!isset($this->nodes[$node])) {
return;
}
//循环所有的虚节点,谁的值==指定的真实节点 ,就把他删掉
foreach ($this->nodes[$node] as $k) {
unset($this->position[$k]);
}
unset($this->nodes[$node]);
} protected function sortPos()
{
//将虚拟节点排序
//把每一项按常规顺序排列(Standard ASCII,不改变类型)
ksort($this->position, SORT_REGULAR);
}
}
Memcached 之PHP实现服务器集群一致性hash算法的更多相关文章
- Linux下使用Magent+Memcached缓存服务器集群部署
1.编译安装libevent cd /root/soft_hhf/ wget http://cloud.github.com/downloads/libevent/libevent/libeven ...
- nginx+tomcat+memcached搭建服务器集群及负载均衡
在实际项目中,由于用户的访问量很大的原因,往往需要同时开启多个服务器才能满足实际需求.但是同时开启多个服务又该怎么管理他们呢?怎样实现session共享呢?下面就来讲一讲如何使用tomcat+ngin ...
- 集群扩容的常规解决:一致性hash算法
写这篇博客是因为之前面试的一个问题:如果memcached集群需要增加机器或者减少机器,那么其他机器上的数据怎么办? 最后了解到使用一致性hash算法可以解决,下面一起来学习下吧. 声明与致谢: 本文 ...
- redis集群与分片(1)-redis服务器集群、客户端分片
下面是来自知乎大神的一段说明,个人觉得非常清晰,就收藏了. 为什么集群? 通常,为了提高网站响应速度,总是把热点数据保存在内存中而不是直接从后端数据库中读取.Redis是一个很好的Cache工具.大型 ...
- nginx 的安装、优化、服务器集群
一.安装 下载地址:http://nginx.org 找到 stable 稳定版 安装准备:nginx 依赖于pcre(正则)库,如果没有安装pcre先安装 yum install pcre pcr ...
- Linux服务器集群系统(二)--转
引用地址:http://www.linuxvirtualserver.org/zh/lvs2.html LVS集群的体系结构 章文嵩 (wensong@linux-vs.org) 2002 年 4 月 ...
- zookeeper作为soa服务器集群的协调调度服务器
zookeeper作为soa服务器集群的协调调度服务器,当然自身也支持集群. ZooKeeper搭建系列集 ZooKeeper系列之一:ZooKeeper简介 ZooKeeper系列之二:ZooKee ...
- 浅析Linux服务器集群系统技术
浅析Linux服务器集群系统技术 目录 前言 常用的服务器集群 集群系统的优势 LVS集群的通用体系结构 为什么使用层次的体系结构 为什么是共享存储 可伸缩Web服务 前言 总结两篇技术文章,努力学习 ...
- 转载-lvs官方文档-Linux服务器集群系统(二)
Linux服务器集群系统(二) LVS集群的体系结构 章文嵩 (wensong@linux-vs.org) 2002 年 4 月 本文主要介绍了LVS集群的体系结构.先给出LVS集群的通用体系结构,并 ...
随机推荐
- 表单中的日期 字符串和Javabean中的日期类型的属性自动转换
搞了一上午的bug最终还是因为自己springMVC的注解不熟悉的原因,特记录. 在实际操作中经常会碰到表单中的日期 字符串和Javabean中的日期类型的属性自动转换, 而springMVC默认不支 ...
- 你不知道的JavaScript--Item34 大白话解说Promise
去年6月份. ES2015正式公布(也就是ES6.ES6是它的乳名),当中Promise被列为正式规范.作为ES6中最重要的特性之中的一个,我们有必要掌握并理解透彻.本文将由浅到深,解说Promise ...
- Cocos2d坐标系具体解释
1.笛卡尔坐标系 左手坐标系(Direct3D坐标系),右手坐标系(Direct3D坐标系) 大拇指和食指分别相应x轴和y轴 2.UI坐标系 iOS/Android/Windows SDK中的通用UI ...
- $.getJSON() 未能执行回调函数的缘由
$.getJSON() 方法使用 AJAX 的 HTTP GET 请求获取 JSON 数据. 语法 1 $.getJSON(url,data,success(data,status,xhr)) url ...
- Linux/Android多点触摸协议【转】
本文转载自: 链接点击打开链接 关于Linux多点触摸协议大家可以参考kernel中的文档:https://www.kernel.org/doc/Documentation/input/multi-t ...
- 【POI 2010】 Antisymmetry
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=2084 [算法] manacher [代码] #include<bits/std ...
- B1007 [HNOI2008]水平可见直线 几何
其实就是一道很简单的栈,只要明白什么情况会被挡住就行了.假如斜率一样则下面的被挡住,假如不一样就算交点,看那个交点在上面就行了. 题干: Description 在xoy直角坐标平面上有n条直线L1, ...
- bzoj1023 [SHOI2008]cactus仙人掌图 & poj3567 Cactus Reloaded——求仙人掌直径
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1023 http://poj.org/problem?id=3567 仙人掌!直接模仿 ...
- webrtc学习资源
http://www.imaotao.cn/project/webrtc-201604
- Spark 操作Hive 流程
1.ubuntu 装mysql 2.进入mysql: 3.mysql>create database hive (这个将来是存 你在Hive中建的数据库以及表的信息的(也就是元数据))mysql ...