分布式memcached-虚拟节点
1.通过memcached服务器下的不同端口来达到模拟多台服务器的效果
2.假设现在有三台memcached服务器,本地分别使用11211,11212,11213三个端口来模拟
①打开端口
②连接端口
③以同样的方式别打开三台,不要关闭cmd窗口,记得ctrl+】回显
3.上代码
<?php
//一致性哈希算法
class Memcached1{
protected $server=['11211','11212','11213'];
protected $node=[];
protected $memcache;
//memcached服务器连接
public function __construct()
{ } protected function MemcachedConnect($port){
$this->memcache=new Memcache();
$a=$this->memcache->connect('localhost',$port);
}
//产生虚拟节点
public function GetServer(){
foreach ($this->server as $k=>$v){
for ($i=1;$i<=100;$i++){
$m=sprintf("%u", crc32($v.'_'.$i));
$this->node[$m]=$v;
}
}
ksort($this->node);
return $this->node;
}
//获取缓存存放节点
protected function GetPort($key){
$key=sprintf("%u",crc32($key));
$nodelist=array_keys($this->node);//返回一个包含数组所有键名的数组(从小到大)
foreach ($this->node as $k=>$v){
if ($key>max($nodelist)){
$port=$this->node[$nodelist[0]];
break;
}
if ($key<=$k){
$port=$v;
break;
}
}
return $port;
}
//生成缓存
public function SetMemcached($key,$value){
//生成虚拟节点
$this->GetServer();
//获得数据存放端口
$p=$this->GetPort($key);
//链接memcached服务器
$this->MemcachedConnect($p);
$this->memcache->set($key,$value);
echo "ok";
}
public function get($key){
//生成虚拟节点
$this->GetServer();
//获得数据存放端口
$p=$this->GetPort($key);
//链接memcached服务器
$this->MemcachedConnect($p);
return $this->memcache->get($key); }
}
$m=new Memcached1;
//$list=$m->GetServer();
echo "<pre>";
//print_r($m->node);
$m->SetMemcached('aaa','aaa');
//echo $m->get('aaa');
4.总结
虚拟节t点的思想是基于一体哈希算法,相比较于传统的一体哈希算法,在服务器挂掉其中一台或者几台时,不会造成仅存的服务器因压力骤大而停机,也比传统的取余计算方式合理
在某台服务器停机时,会将压力合理的分摊到其他的服务器
分布式memcached-虚拟节点的更多相关文章
- Memcached 笔记与总结(7)增加虚拟节点
仅仅把 Memcached 服务器集群地址通过一致性哈希转映射在圆环上,可能会出现数据不能均匀地分配给各台 Memcached 服务器. 解决方案是引入虚拟节点,就是把每个映射在圆环上的服务器地址(物 ...
- memcached学习——分布式算法(Consistant hash + 虚拟节点)(三)
1.取余算法 优点:数据分布均匀缺点:当服务器动态的添加.删除节点或者某台server down掉,会导致命中率超大幅度下降,甚至导致服务不可用 2.Consistant Hash算法:一致性哈希算法 ...
- 沉淀,再出发——手把手教你使用VirtualBox搭建含有三个虚拟节点的Hadoop集群
手把手教你使用VirtualBox搭建含有三个虚拟节点的Hadoop集群 一.准备,再出发 在项目启动之前,让我们看一下前面所做的工作.首先我们掌握了一些Linux的基本命令和重要的文件,其次我们学会 ...
- HDU 5521 Meeting(虚拟节点+最短路)
Meeting Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Total ...
- 一致性hash和虚拟节点
consistent hashing 算法的原理 consistent hashing 是一种 hash 算法,简单的说,在移除 / 添加一个 cache 时,它能够尽可能小的改变已存在key 映射关 ...
- Hadoop 分布式环境slave节点重启忽然不好使了
Hadoop 分布式环境slaves节点重启: 忽然无法启动DataNode和NodeManager处理: 在master节点: vim /etc/hosts: 修改slave 节点的IP (这个时候 ...
- hdu 2121无根最小树形图要建一个虚拟节点
#include<stdio.h> #include<string.h> #define inf 999999999 #define N 1100 struct node { ...
- ACK容器服务虚拟节点使用阿里云日志服务来收集业务容器日志
按照这篇博文的介绍,可以在ACK集群上通过Helm的方式部署虚拟节点,提升集群的弹性能力.现在,通过虚拟节点部署的ECI弹性容器实例也支持将stdout输出.日志文件同步到阿里云日志服务(SLS)进行 ...
- ACK容器服务发布virtual node addon,快速部署虚拟节点提升集群弹性能力
在上一篇博文中(https://yq.aliyun.com/articles/647119),我们展示了如何手动执行yaml文件给Kubernetes集群添加虚拟节点,然而,手动执行的方式用户体验并不 ...
随机推荐
- 【HTML】section
1. 定义 标签定义文档中的节(section.区段).比如章节.页眉.页脚或文档中的其他部分. 2. div.section . article的区别 div: 本身没有任何语义,用作布局以及样式 ...
- Java 方法重载,方法重写(覆盖),继承等细节注意
1.方法重载(method overload)的具体规范 如果有两个方法的方法名相同,但参数不一致,那么可以说一个方法是另一个方法的重载. 一.方法名一定要相同. 二.方法的参数表必须不同,包括参数的 ...
- 用SSH解决大局域网反向端口转发问题
本文作者Tony Lee,转载自FreeBuf.COM 自从家里换了联通光纤后,联通就在我家宽带出口前搭了一个路由器,我家也彻底沦为192.168.1.0/24段的局域网了,带来的问题就是在外网无 ...
- C++ STL pair详解
一.解释: p { margin-bottom: 0.25cm; direction: ltr; color: #00000a; line-height: 120%; text-align: left ...
- 阿里消息队列中间件 RocketMQ 源码分析 —— Message 拉取与消费(上)
- 156个Python网络爬虫资源
本列表包含Python网页抓取和数据处理相关的库. 网络相关 通用 urllib - 网络库(标准库) requests - 网络库 grab - 网络库(基于pycurl) pycurl - 网络库 ...
- 一个普通的 Zepto 源码分析(三) - event 模块
一个普通的 Zepto 源码分析(三) - event 模块 普通的路人,普通地瞧.分析时使用的是目前最新 1.2.0 版本. Zepto 可以由许多模块组成,默认包含的模块有 zepto 核心模块, ...
- JavaScript闭包只学这篇就够了
闭包不是魔法 这篇文章使用一些简单的代码例子来解释JavaScript闭包的概念,即使新手也可以轻松参透闭包的含义. 其实只要理解了核心概念,闭包并不是那么的难于理解.但是,网上充斥了太多学术性的文章 ...
- angularJS实战(一)
angular实现列表 accessCtrl.js let AccessCtrl = function($scope, AlertService, DialogService, BigDataServ ...
- HDU 6006 Engineer Assignment:状压dp
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6006 题意: 在Google中,有个n项目,m个专家.第i个项目涉及c[i]个领域,分别为a[i][0 ...