memcached客户端_分布式算法真是吊炸天 – memcached - 第287篇

8a94fb37a28cb29bc7d4c68e20bceed4.png

相关历史文章(阅读本文之前,您可能需要先看下之前的系列 )

色谈Java序列化:女孩子慎入 - 第280篇

烦不烦,别再问我时间复杂度了:这次不色,女孩子进来吧 - 第281篇

双向链表,比西天还远?- 第282篇

面试不再怕,让LRU无处可逃 - 第283篇

爱我,就要懂我 – Memcached- 第284篇

内存管理,难于上青天?- memcached - 第285篇

你懂她,可惜你不懂我「LRU 」- Memcached- 第286篇

悟纤:师傅,这个不是在之前就说过了,这个我懂。

师傅:恩赫,你懂?那我问你下memcached分布式使用的是什么算法?

悟纤:???难道不是hash一下就可以了嘛。

师傅:要是这么简单就能理解了,我还会在唠叨一遍嘛。

悟纤:那徒儿洗耳恭听。

1e405b09527c49a813311a15fd5e2730.gif

一、Memcached分布式是如何实现的

memcached本身是一个非常轻量级的服务,不支持主辅同步,也没有集群的概念。但为了可扩展性,memcached服务器端和 memcached 客户端结合起来可以构成一个分布式系统。

在memcached分布式系统中,各个 memcached 节点之间无须通信,所以扩展性非常好。

->Memcached的分布式特点:

•1>: 服务器端不关心分布式:服务端的各个Memcached都是独立部署,之间不相互通信,这样服务端部署多个Memcached就很简单。

•2>: 依靠客户端来实现分布式:最简单的方式就是客户端拥有服务端所有连接地址,客户端通过key的hash值获取到对应的Memcached。

90719e4120ce66aaaae57b0945f320d6.png

二、分布式算法

当向memcached集群存入/取出key/value时,memcached客户端程序根据一定的算法计算存入哪台服务器,然后再把key/value值存到此服务器中。也就是说,存取数据分二步走,第一步,选择服务器,第二步存取数据。

常用的算法有两种: 余数计算分散法 和 一致性Hash算法。

2.1 余数计算分散法

标准的memcached分布式算法

CRC($key)%N

BTW:CRC是一循环冗余算法,N:memcached服务器个数。

客户端首先根据key来计算CRC , 然后结果对服务器取模得到memcached服务器节点。

这种算法取余计算简单,分散效果好,但是缺点是如果某一台机器宕机,那么应该落在该机器的请求就无法得到正确的处理,这时需要将当掉的服务器从算法从去除,此时候会有 (N-1) 的服务器的缓存数据需要重新进行计算;如果新增一台机器,会有 (N+1)的服务器的缓存数据需要进行重新计算。对于系统而言,这通常是不可接受的颠簸(因为这意味着大量缓存的失效或者数据需要转移)。

2.2 一致性hash算法

将server的hash值分配至0~2^32的圆环上, 用同样的方法求出存储数值键的hash值并映射到圆上. 然后从数据映射到的位置开始顺时针查找, 将数据存放至找到的第一台服务器上。如果超过0~2^32还找不到, 则将数据存放至第一台服务器。

92ac6fe024ac8cf2f8a7c5a496b5b2f1.png

2.2.1 算法过程

(1)先构造一个长度为0~2^32(2的32次幂)个的整数环(又称:一致性Hash环),根据节点名称的Hash值将缓存服务器节点放置在这个Hash环中,如上图中的node1,node2等;

(2)根据需要缓存的数据的KEY值计算得到其Hash值,如上图中右半部分的“键”,计算其Hash值后顺时针离node2近;

(3)在Hash环上顺时针查找距离这个KEY的Hash值最近的缓存服务器节点,完成KEY到服务器的Hash映射查找,如上图中离右边这个键的Hash值最近的顺时针方向的服务器节点是node2,因此这个KEY会到node2中读取数据;

2.2.2 添加节点

当缓存服务器集群需要扩容的时候,只需要将新加入的节点名称(如node5)的Hash值放入一致性Hash环中,由于KEY总是顺时针查找距离其最近的节点,因此新加入的节点只影响整个环中的一部分。如下图中所示,添加node5后,只影响右边逆时针方向的三个Key/Value对数据,只占整个Hash环中的一小部分。

94dacb59b1a4ac52a5adf4f677e73047.png

BTW:删节节点或者服务器down机,影响的也只是顺时针的下一个节点。

2.2.3 算法优缺点

优点:动态的增删节点,服务器down机,影响的只是顺时针的下一个节点

缺点:当服务器进行hash后值较为接近会导致在圆环上分布不均匀,进而导致key的分布、服务器的压力不均匀。若中间某一权重较大的serverdown机,命中率下降明显;

2.2.4 算法对比

我们可以与之前的普通余数Hash作对比:采用一致性Hash算法时,当3台服务器扩容到4台时,可以继续命中原有缓存数据的概率为75%,远高于普通余数Hash的25%,而且随着集群规模越大,继续命中原有缓存数据的概率也会随之增大。当100台服务器增加1台时,继续命中的概率是99%。虽然,仍有小部分数据缓存在服务器中无法被读取到,但是这个比例足够小,通过访问数据库也不会对数据库造成致命的负载压力。

2.3 优化一致性hash算法(虚拟节点)

服务器的映射地点的分布非常的不均匀, 导致数据访问倾斜, 大量的key被映射到同一台服务器上,这时候需要在一致性哈希算法的基础上引入虚拟节点:

9e9232bfa8e6b69a90820ff64fac0bfe.png

引入虚拟节点的思想,解决一致性hash算法分布不均导致负载不均的问题。一个真实节点对应若干个虚拟节点,当key被映射到虚拟节点上时,则被认为映射到虚拟节点所对应的真实节点上。

BTW:引入虚拟节点的思想,每个物理节点对应圆环上若干个虚拟节点(比如200~300个),当key hash到虚拟节点,就会存储到实际的物理节点上,有效的实现了负载均衡。

三、悟纤小结

师傅:徒儿,听明白没有,来,你给大家来个总结吧。
悟纤:好的,师傅,您休息下,喝点水。

0bdc49a3a95dc3338358323777c69e33.png

总结:

(1)Memcached的分布式实现原理:服务端之间互不通信,分布式的实现是通过客户端使用一致性Hash算法进行实现的。
(2)分布式算法:余数计算分散法和一致性hash算法。
(3)余数分散法存在的问题:当节点变动的时候,缓存数据需要重新计算,命中率就会受到很大影响。
(4)一致性hash算法存在问题:数据分布不均匀,负载不均衡。
(5)优化的一致hash算法原理:加入虚拟节点,物理节点映射到若干个虚拟节点上,从而使得数据分布均衡分布在虚拟节点上,以此来实现负载均衡。

fc277faf8ec58daefceb32857ddf8e59.gif
我就是我,是颜色不一样的烟火。
我就是我,是与众不同的小苹果。
学院中有Spring Boot相关的课程:
à悟空学院:https://t.cn/Rg3fKJD
SpringBoot视频:http://t.cn/A6ZagYTi
Spring Cloud视频:http://t.cn/A6ZagxSR
SpringBoot Shiro视频:http://t.cn/A6Zag7IV
SpringBoot交流平台:https://t.cn/R3QDhU0
SpringData和JPA视频:http://t.cn/A6Zad1OH
SpringSecurity5.0视频:http://t.cn/A6ZadMBe
Sharding-JDBC分库分表实战:http://t.cn/A6ZarrqS
分布式事务解决方案「手写代码」:http://t.cn/A6ZaBnIr

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/490347.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2018年中国人工智能100强研究报告

来源:前瞻产业研究院《崛起的超级智能》一书主要阐述当今天人类为人工智能的春天到来而兴奋,为人工智能是否超越人类而恐慌的时候,一个更为庞大、远超人类预期的智能形态正在崛起,种种迹象表明50年来,互联网正在从网状…

印度首次挑战登月告败,一步之遥≈多大差距?

来源:三体引力波(the-3body)最坏消息还是来了。今天凌晨,印度探测器首次登月尝试,只差一步之遥,距离月表不到2100米,月船2号着陆器与班加罗尔控制中心失去联系,信号中断,…

word交叉引用插入文献后更新域之后编号未更新

这篇文章不教怎么设置交叉引用,这篇文章说的是设好了交叉引用,在某一条文献后面添加了一个文献后,选中全文,右键更新域,编号项仍然没有改变!! 这是因为刚刚在插入文献时是在上一条文献的编号项…

耐能团队论文登上《自然·电子学》:集成忆阻器与CMOS以实现更好的AI

《自然电子学》杂志封面(资料图,来源:《自然》官网)来源:Kneron耐能近日,《自然》杂志子刊《自然电子学》(Nature Electronics)发表论文《集成忆阻器与CMOS以实现更好的AI》&#xf…

word交叉引用多条文献

有时候需要引用多条连续的文献,例如[1][2][3]需要把它变为[1-3],更新域后不受影响仍然正确。 4、选中这两个代码域,右键->切换域代码,再选中这两个代码域,右键->更新域,引用号码变为[13],…

pppcloud云主机内LINUX用户安全管理2

◆超级用户权限与授权 ●建立多个超级用户 不少新系统管理员认为root用户是唯一的超级用户,其实root只是系统默认的超级用户的名称,root并非因为它叫root而成为超级用户的。随便打开一个/etc/passwd文件的例子,你就会发现如下几行&#xff1a…

一份完全解读:是什么使神经网络变成图神经网络?

图1:来自(Bruna等人,ICLR,2014)的图,描绘了3D领域内的MNIST图像。虽然卷积网络很难对球面数据进行分类,但是图网络可以很自然地处理它。可以把它当做是一个处理工具,但在实际应用程序中会出现许多类似的任务…

中国芯片将靠此超车!RISC-V架构神在哪全解构【附下载】

来源: 智东西RISC-V(发音为“risk-five”)是一个基于精简指令集(RISC)原则的开源指令集架构(ISA),简易解释为开源软件运动相对应的一种“开源硬件”。该项目2010年始于加州大学伯克利…

sha256校验工具_使用AIDE工具做入侵检测

AIDE(Advanced Intrusion Detection Environment,高级入侵检测环境)是个入侵检测工具,主要用途是检查文档的完整性。AIDE能够构造一个指定文档的数据库,他使用aide.conf作为其配置文档。AIDE数据库能够保存文档的各种属性,包括:权…

transition过渡的趣玩

本例中将三张图&#xff08;来自网络&#xff09;进行堆叠&#xff0c;鼠标悬停触发。附有源代码 <!DOCTYPE html> <html> <head><title>照片墙</title><meta charset"utf-8"><style type"text/css">.parent{wi…

网上花店系统源码_如何创建一个花店线上商城,可以开发一个微信小程序

说起来花店&#xff0c;相信很多人都去花店买过花&#xff0c;许多花店通常都是个人开的店&#xff0c;一般位置回去选取在人口稠密的地区&#xff0c;以求争取到附近的流量。一般来说&#xff0c;人们会在有人创业或做些开心的事&#xff0c;或者情人节时买鲜花。随着城市的不…

机器的类比

来源&#xff1a;人机与认知实验室如果说机器深度学习有几个重要的边界&#xff1a;数据边界、语义边界、符号边界和因果边界。那么突破这几个边界的口子可能就是——类比&#xff0c;不仅是比例类比&#xff0c;更是跨域机器类比机理的形成可能就是一条前进的光明大道。实质上…

【深度】全球机器人产业趋势及特征分析

来源&#xff1a;工业机器人前沿当前&#xff0c;全球机器人市场规模持续扩大&#xff0c;工业机器人市场增速回落&#xff0c;服务、特种机器人增速稳定。技术创新围绕仿生结构、人工智能和人机协作不断深入&#xff0c;产品在教育陪护、医疗康复、危险环境等领域的应用持续拓…

为什么多个线程不可能同时抢到一把锁_并发基础理论:原子性问题、锁、管程...

我们再回顾一下&#xff0c;原子性问题的根源是CPU切换线程执行指令所导致的&#xff0c;当前一个对共享变量的操作没有完成之前&#xff0c;CPU又切换到另外一个线程来操作对应的共享变量&#xff0c;那么最终产生的结果就可能出现问题。比如如果现在有两个线程都在执行number…

继智能手机之后,增强现实如何再次改变我们与世界的交互方式

来源&#xff1a;资本实验室作为面向未来的新技术&#xff0c;增强现实和虚拟现实在过去几年中的发展可以用不温不火来形容。尽管创业投资和市场规模都在不断扩大&#xff0c;但硬件设备、数据传输速度、沉浸式体验效果、分辨率等因素都制约着该技术的快速发展&#xff0c;而大…

简要说明建设城市大脑三条关键标准规范

作者&#xff1a;刘锋 前言&#xff1a;简要的说&#xff0c;城市大脑不是一个城市级AI信息系统&#xff0c;也不是城市内部的信息化建设&#xff0c;而是互联网结构从网状模型向大脑模型进化时&#xff0c;与城市建设结合的产物&#xff0c;因此建设城市大脑需要拥有三个特征…

git恢复删除前的版本

有时候我们想撤销上一次提交&#xff0c;于是执行git reset --soft HEAD^&#xff0c;这样就成功的删除了你上一次的commit。但有时候发现不小心撤销错了&#xff0c;想把刚刚的撤销给撤回&#xff1a; 方法&#xff1a;首先执行git reflog 这时会显示刚刚各个操作&#xff0…

NLP模型超越人类水平?你可能碰到了大忽悠

大数据文摘出品来源&#xff1a;thegradient编译&#xff1a;张睿毅、武帅、钱天培一个军方训练的神经网络声称可以分类图像中的坦克&#xff0c;但实际上&#xff0c;它只是学会了识别不同的亮度&#xff0c;因为一种类型的坦克仅出现在明亮的图片中&#xff0c;而另一种类型仅…

伸缩杆怎么缩回去图解_没有阳台怎么晾衣服?这10个神器,让家里衣物晾晒更轻松方便...

没有阳台怎么晾衣服&#xff1f;这10个神器&#xff0c;让家里衣物晾晒更轻松方便&#xff01;衣物晾晒是居家生活的必要环节&#xff0c;每个家庭在洗完衣物后都有自己的晾晒方式&#xff0c;但多数家庭会选择在阳台里进行。然而&#xff0c;对于没有阳台的家庭来说&#xff0…

小脑过度活跃,会引起整个大脑的问题

来源&#xff1a;中国生物技术网 9月10日&#xff0c;发表在《Cell Reports》的一项研究中&#xff0c;来自日本京都大学的研究团队发现小脑中的免疫活性诱导动物的神经元过度兴奋&#xff0c;干扰了精神运动行为。位于颅骨下背部的小脑&#xff0c;在调节诸如平衡、运动学习和…