当前位置:首页 > 日记 > 正文

基于一致性哈希算法(一致散列)的使用详细解决方案

基于一致性哈希算法(一致散列)的使用详细解决方案
1个基本的场景

例如,如果您有n个缓存服务器,那么如何将对象对象映射到N缓存您可能会使用下面的一般方法来计算对象的哈希值,然后将它映射到n个缓存,然后将n的散列映射到n。

散列(对象)%

一切正常运行,并考虑以下两种情况。

1缓存服务器m关闭(在实际应用中必须考虑这种情况),以便映射到高速缓存M的所有对象都将失败,如何操作,需要从高速缓存m中删除,然后缓存是n-1,映射公式为哈希(对象)%(n-1);

2由于访问的恶化,当缓存是N + 1站点时,需要添加缓存,映射公式变成哈希(对象)%(n + 1);

1和2是什么意思这意味着几乎所有的缓存都突然失败了。对于服务器来说,这是一个灾难,大量的访问将直接进入后台服务器。

考虑第三个问题。由于硬件功能越来越强大,您可能希望向后面的节点添加更多节点。显然,上面的哈希算法不能这样做。

改变这种情况的方法是什么,这是一致的散列法…

2散列算法与单调性

哈希算法的一个度量是单调性(单调性),其定义如下:

单调性意味着,如果某些内容通过散列被分配给相应的缓冲区,则将一个新的缓冲区添加到系统中。散列结果应该能够确保原始分配的内容可以映射到新的缓冲区,而不是映射到旧缓冲区中的其他缓冲区。

很容易看出,上面简单的哈希算法哈希(object)n很难满足单调性要求。

3一致散列算法的原理

一致散列是散列算法。简单地说,在删除/添加缓存时,尽可能少地改变现有的密钥映射,尽可能地满足单调性要求。

在以下5个步骤中,简要描述了一致哈希算法的基本原理。

3.1环散列空间

考虑到通常的哈希算法是地图的价值的一个关键值的32,即0 ~ 2 ^ 32-1数值空间力量。我们可以想象的空间作为第一(0)尾(2 ^ 32-1)连接环,如图1所示。

图1环散列空间

3.2映射对象到哈希空间

其次,考虑4个对象,发生~ object4,通过哈希函数计算哈希值的关键是在环如图2所示。

哈希(发生)= key1;



(object4)=密钥散列;

图24对象的键值分布

3.3 map缓存到哈希空间

一致哈希的基本思想是将对象和缓存映射到相同的哈希数值空间,并使用相同的哈希算法。

假设当前有一组3个缓存的A、B和C,那么它们的映射结果将如图3所示,它们被排列在哈希空间中,并具有相应的散列值。

散列(缓存A);



散列(缓存C)=键C;

图3缓存和对象的键值分布

顺便提一下,顺便说一下,通过缓存的散列计算,一般方法可以用作高速缓存机器的IP地址或机器名的哈希输入。

3.4映射对象缓存

现在,缓存和对象已被同一散列算法映射到哈希数值空间。接下来,我们需要考虑如何将对象映射到缓存。

在环形空间中,如果从对象的键值沿顺时针方向开始,直到遇到一个缓存,那么对象就存储在缓存中,因为缓存对象和散列值是固定的,因此缓存必须是唯一的和确定的,所以您不找到对象和缓存的映射方法吗!

继续上述示例(参见图3)。根据上述方法,对象object1将被存储在高速缓存和缓存对象;object2对应C;object4对应缓存B.

3.5研究高速缓存的变化

正如我们前面提到的,哈希和余数所造成的最大问题不是单调的,当缓存的变化、缓存失效时,对后端服务器造成很大的影响,现在分析一致哈希算法。

3.5.1删除缓存

考虑一下缓存B被挂起的假设。根据上面提到的映射方法,受影响的对象将只能是那些逆时针遍历缓存B的对象,直到下一个缓存(缓存C),即那些最初映射到缓存B的对象。

所以,在这里,你只需要改变对象object4和映射到缓存C;见图4。

图4缓存b被删除后的缓存映射

3.5.2添加缓存

考虑添加一个新的缓存,假设在这个圆形的哈希空间,缓存D对象object2和对象之间的映射。当时,那些受影响的将是那些对象遍历缓存D逆时针方向旋转,直到下一个缓存(Cache B)。他们也映射到缓存,缓存和映射这些对象D.

所以,在这里,你只需要改变对象object2和映射到缓存D;见图5。

图5添加高速缓存d后的映射关系

4虚拟节点

散列算法的另一个指示符是平衡,定义如下:

平衡

余额意味着散列结果可以在所有缓冲区中尽可能分布,以便可以使用所有缓冲区空间。

哈希算法并不能保证绝对的平衡,如果缓存较少,对象不能被均匀地映射到缓存,例如,在上面的例子中,缓存和缓存只有低于4的目标情况下的部署,缓存和缓存发生只有店,C店object2对象和object4,分布不平衡。

为了解决这种情况,一致散列引入了虚拟节点的概念,可以定义如下:

虚拟节点(虚拟节点)是散列空间(副本)中实际节点的副本,实节点对应多个虚拟节点,对应的数字也是一个拷贝数,虚拟节点在哈希空间中以散列值排列。

例如,在只部署缓存A和缓存C的情况下,我们在图4中看到缓存分配不统一。现在我们引入虚拟节点并将副本的数量设置为2,这意味着总共有4个虚拟节点。缓存A1,缓存A2代表缓存A;缓存C1;缓存C2代表缓存;假设一个理想的情况,见图6。

图6引入虚拟节点后的映射关系

此时,对象与虚拟节点之间的映射关系为:

客观->缓存A2;objec2 ->缓存A1;objec3 ->缓存C1;objec4 ->缓存C2;

所以对象Object1和object2映射到缓存,和对象和object4映射到缓存C;平衡有了很大的提高。

虚拟节点的引入,从对象- { { { }转换到节点对象>虚拟节点}的映射。当对象位于时缓存的映射如图7所示。

图7查询对象所在的缓存

虚拟节点的哈希计算可用于相应节点的IP地址的方式和数字后缀。例如,假定缓存的IP地址是202.168.14.241。

在引入虚拟节点之前,计算缓存A的散列值。

哈希(202.168.14.241);

在引入虚拟节点后,计算了虚拟节点缓存A1和缓存A2的散列值。

哈希(202.168.14.241 # 1) / /缓存A1;

哈希(202.168.14.241 # 2) / /缓存A2;

相关文章

黑暗西进新手的常见问题解决方案

黑暗西进新手的常见问题解决方案

问题解决方案,西进,黑暗,常见,新手,在黑暗的西方世界,新手玩家一定遇到了很多问题,下一个小编辑会回答一些常见的问题,帮助你快速融入游戏。 怎么做1。金币得到了吗 答:黄金是游戏中的货币主要消耗,可以通过日常的福利获得,通关的副本,世界BOSS,…

iPhone安装软件和应用教程

iPhone安装软件和应用教程

教程,安装软件,电脑软件,iPhone,这个职位是编辑lee0117在2010-09-10 17:29:28 iPhone触摸安装游戏和应用显示器维修培训 电脑维修培训 主板安装设置 用iTunes安装游戏和应用程序 因为很多IPA计划都是收费的,所以并不是每个人都买几把旧的美…

忘记MySQL数据库根用户密码重置方

忘记MySQL数据库根用户密码重置方

密码重置,数据库,用户,方法,电脑软件,首先,我介绍我使用的环境: 1、窗口; 2、PHP服务经理Wamp5; 直上无异议: 1。打开任务管理器结束进程mysqld-nt.exe仿佛: 2。运行命令窗口 1)、在bin目录的PHP安装目录服务经理(我:D: 服务器MySQL bin), 手术是: …

微博热引爆病毒传播

微博热引爆病毒传播

电脑软件,微博热,随着科技的发展和国家政策的推动,互联网的普及程度越来越高。 根据第四季度数据产品监测报告2011由AI咨询发布,表明内地网民在家上网和办公室的号码是4亿2000万,而250 million.micro-blog在微博客账号4亿2000万用户已成为最流…

mysql定时器事件学习笔记

mysql定时器事件学习笔记

事件,学习笔记,电脑软件,mysql,持续的全球event_scheduler使定时功能MySQL必须在1 -检查计时器是否打开。 显示变量''%1方案%; -打开计时器0:关闭1:打开 设置全局event_scheduler = 1; 创建事件 -叫e_test()存储过程自动的每一秒 如果不存在…

爱思助手全备份失败怎么办?报错与解

爱思助手全备份失败怎么办?报错与解

爱思助手全备份失败怎么办?报错与解决方案汇总,备份,错误码,解决办法,爱思助手,重启,数据线,删除,解决方案,通过“爱思助手”全备份功能,苹果用户可以轻松备份 iOS 设备中的照片、视频、铃声、备忘录、通讯录等数据,可备份到电脑或将数据恢复到其它 iO…

网页视频的播放不会自动播放(解决方

网页视频的播放不会自动播放(解决方

解决方案,网页,自动播放,视频,电脑软件,问题: 我的电脑在网络上播放任何视频,它不会弹出。卸载重装了N次,不寻求帮助解决。 答案uff1a 可能是浏览器没有加载的插件,请使用32位IE浏览器SDC测试影片资源是否正常。 如果可以的话,这说明你没有问…

MySQL不能插入到中文不正确的字符

MySQL不能插入到中文不正确的字符

中文,不正确,字符串值,电脑软件,MySQL,选项的默认设置为utf8 charaset; 然后创建一个数据表,创建表a_table(b varchar(255)不为空); 插入a_table值(北京的); 这一次是插在中国,系统会报告错误:不正确的字符串值:: xa9'for差别:column'b; 不能用中文插…

Fedora9Apache+PHP+MySQL环境安装

Fedora9Apache+PHP+MySQL环境安装

环境安装,PHP+MySQL,电脑软件,Fedora9Apache,MySQL,点评:因为F9的编译器版本太高(4.3),一些软件的编制可能是错的。 百胜-安装于libstdc++ 33兼容libstdc++ - 296 百胜-安装compat-gcc-34 compat-gcc-34-c + + 使用以下命令使用GCC的3.4个版…

一个建立在VM虚拟机Fedora的固定IP

一个建立在VM虚拟机Fedora的固定IP

网络,方法,虚拟机,电脑软件,VM,点评:这篇文章主要介绍了设置固定IP网络在费多拉VM虚拟机的方法,需要的朋友可以参考一下。 首先,它宣称,Fedora 17和18下的方法是有效的,而其他版本也可能不符。 1。虚拟机相关配置 如果它不是虚拟机系统,那么这一…

安装NTFS分区在FedoraLinux系统的

安装NTFS分区在FedoraLinux系统的

系统,方法,安装,电脑软件,FedoraLinux,点评:下载安装包。根据我的机器的情况下,我的三个文件下载从i386文件夹 fuse-2.7.0-6.fc6.i386.rpm, fuse-libs-2.7.0-6.fc6.i386.rpm, ntfs-3g-1.1104-1.fc6.i386.rpm 把它放在/ mnt / / i386文件夹的NTF…

linux系统中硬盘的维护与优化

linux系统中硬盘的维护与优化

维护,系统,硬盘,优化,电脑软件,点评:所有的文件系统往往是零散的时间。Linux文件系统减少了碎片化,但还没有被淘汰,因为它不经常发生,它可能不是一个单用户的工作站是一个问题。然而在繁忙的服务器,随着时间的推移,文件碎片会降低硬盘的性能,和硬…