企业网站推广文案,网站建设招聘网,wordpress first主题,眉山市住房和城乡建设部网站相关历史文章#xff08;阅读本文之前#xff0c;您可能需要先看下之前的系列 #xff09;色谈Java序列化#xff1a;女孩子慎入 - 第280篇烦不烦#xff0c;别再问我时间复杂度了#xff1a;这次不色#xff0c;女孩子进来吧 - 第281篇双向链表#xff0c;比西天还远阅读本文之前您可能需要先看下之前的系列 色谈Java序列化女孩子慎入 - 第280篇烦不烦别再问我时间复杂度了这次不色女孩子进来吧 - 第281篇双向链表比西天还远- 第282篇面试不再怕让LRU无处可逃 - 第283篇爱我就要懂我 – Memcached- 第284篇内存管理难于上青天- memcached - 第285篇你懂她可惜你不懂我「LRU 」- Memcached- 第286篇悟纤师傅这个不是在之前就说过了这个我懂。师傅恩赫你懂那我问你下memcached分布式使用的是什么算法悟纤难道不是hash一下就可以了嘛。师傅要是这么简单就能理解了我还会在唠叨一遍嘛。悟纤那徒儿洗耳恭听。一、Memcached分布式是如何实现的memcached本身是一个非常轻量级的服务不支持主辅同步也没有集群的概念。但为了可扩展性memcached服务器端和 memcached 客户端结合起来可以构成一个分布式系统。在memcached分布式系统中各个 memcached 节点之间无须通信所以扩展性非常好。-Memcached的分布式特点•1: 服务器端不关心分布式服务端的各个Memcached都是独立部署之间不相互通信这样服务端部署多个Memcached就很简单。•2: 依靠客户端来实现分布式最简单的方式就是客户端拥有服务端所有连接地址客户端通过key的hash值获取到对应的Memcached。二、分布式算法当向memcached集群存入/取出key/value时memcached客户端程序根据一定的算法计算存入哪台服务器然后再把key/value值存到此服务器中。也就是说存取数据分二步走第一步选择服务器第二步存取数据。常用的算法有两种: 余数计算分散法 和 一致性Hash算法。2.1 余数计算分散法标准的memcached分布式算法CRC($key)%NBTWCRC是一循环冗余算法Nmemcached服务器个数。客户端首先根据key来计算CRC , 然后结果对服务器取模得到memcached服务器节点。 这种算法取余计算简单分散效果好但是缺点是如果某一台机器宕机那么应该落在该机器的请求就无法得到正确的处理这时需要将当掉的服务器从算法从去除此时候会有 (N-1) 的服务器的缓存数据需要重新进行计算如果新增一台机器会有 (N1)的服务器的缓存数据需要进行重新计算。对于系统而言这通常是不可接受的颠簸因为这意味着大量缓存的失效或者数据需要转移。2.2 一致性hash算法 将server的hash值分配至0~2^32的圆环上, 用同样的方法求出存储数值键的hash值并映射到圆上. 然后从数据映射到的位置开始顺时针查找, 将数据存放至找到的第一台服务器上。如果超过0~2^32还找不到, 则将数据存放至第一台服务器。2.2.1 算法过程1先构造一个长度为0~2^322的32次幂个的整数环又称一致性Hash环根据节点名称的Hash值将缓存服务器节点放置在这个Hash环中如上图中的node1node2等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环中的一小部分。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被映射到同一台服务器上这时候需要在一致性哈希算法的基础上引入虚拟节点引入虚拟节点的思想解决一致性hash算法分布不均导致负载不均的问题。一个真实节点对应若干个虚拟节点当key被映射到虚拟节点上时则被认为映射到虚拟节点所对应的真实节点上。BTW引入虚拟节点的思想每个物理节点对应圆环上若干个虚拟节点比如200~300个当key hash到虚拟节点就会存储到实际的物理节点上有效的实现了负载均衡。三、悟纤小结师傅徒儿听明白没有来你给大家来个总结吧。悟纤好的师傅您休息下喝点水。总结1Memcached的分布式实现原理服务端之间互不通信分布式的实现是通过客户端使用一致性Hash算法进行实现的。2分布式算法余数计算分散法和一致性hash算法。3余数分散法存在的问题当节点变动的时候缓存数据需要重新计算命中率就会受到很大影响。4一致性hash算法存在问题数据分布不均匀负载不均衡。5优化的一致hash算法原理加入虚拟节点物理节点映射到若干个虚拟节点上从而使得数据分布均衡分布在虚拟节点上以此来实现负载均衡。我就是我是颜色不一样的烟火。
我就是我是与众不同的小苹果。学院中有Spring Boot相关的课程à悟空学院https://t.cn/Rg3fKJDSpringBoot视频http://t.cn/A6ZagYTiSpring Cloud视频http://t.cn/A6ZagxSRSpringBoot Shiro视频http://t.cn/A6Zag7IVSpringBoot交流平台https://t.cn/R3QDhU0SpringData和JPA视频http://t.cn/A6Zad1OHSpringSecurity5.0视频http://t.cn/A6ZadMBeSharding-JDBC分库分表实战http://t.cn/A6ZarrqS分布式事务解决方案「手写代码」http://t.cn/A6ZaBnIr