美文网首页
<分布式寻址>hash余数算法

<分布式寻址>hash余数算法

作者: 但时间也偷换概念 | 来源:发表于2019-01-06 14:45 被阅读0次

简介:

<分布式寻址>系列博客主要介绍分布式系统中寻址的几种实现方式,就以分布式缓存举例。

正文:


在以前的博客中有介绍过memcached和redis两大缓存组件,在redis推出cluster之前,memcached和redis都不属于严格意义上的分布式组件,分布式的实现还是在客户端去做的,也就是客户端需要去开发负载均衡等功能。

分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。

所以如果想搭建一个分布式的缓存系统,必然要设计一种负载均衡方案以达到请求能分发到不同的服务器上。

那么最原始的做法是什么呢?

hash算法

最简单、常用的Hash算法。

hash(i) = i mod n

如上图

借用阿里云社区的一个例子:

用hash做缓存,假如有三台服务器,1,2,3,有三万张图片,我想将图片平均缓存到我三台服务器上,一个服务器大概一万张,怎么去实现这个办法呢,可以用hash来取余数进行操作,加入我们是以图片的名字作为key进行hash计算,hash (图片名称)%N 其中N为我们服务器的个数,我们将hash(图片名称)这一部分进行计算后得到的是一个正数,然后除以服务器的数目进行取余数,结果将会是0,1,2三个数

如果我缓存的服务器的数量减少或者增加,如果还是按照原来的算法走,必定会造成缓存数据的丢失,会去向后端的服务器去请求,如果有一台缓存服务器发生了故障,那我原来缓存的位置必定会发生改变,原来本该运算后要进行缓存到某一台服务器的图片,现在找不到对应缓存服务器,肯定会发生缓存的雪崩

总结

缺点:伸缩性差,使用余数Hash的路由算法,在扩容的时候会造成大量的数据无法正确命中(其实不仅仅是无法命中,那些大量的无法命中的数据还在原缓存中在被移除前占据着内存)。

解决方案:

(1)在网站访问量低谷,通常是深夜,技术团队加班,扩容、重启服务器

(2)通过模拟请求的方式逐渐预热缓存,使缓存服务器中的数据重新分布

所以出现了一致性hash算法,下篇博客介绍。

相关文章

  • <分布式寻址>hash余数算法

    简介: <分布式寻址>系列博客主要介绍分布式系统中寻址的几种实现方式,就以分布式缓存举例。 正文: 在以前的博客中...

  • 一致性Hash算法

    余数Hash 最简单、常用的Hash算法。hash(i) = i mod n缺点:伸缩性差,使用余数Hash的路由...

  • HashMap原理解析

    HashMap解析 HashMap的寻址算法优化 JDK1.8之后的hash运算 寻址算法 n 指的是数组的长度 ...

  • 基础问题

    HashMap的hash算法和寻址算法的优化 原hash值与右移后的hash值进行异或运算(一样就是0,不一样就是...

  • 缓存架构之17:数据分布算法:hash+一致性hash+redi

    讲解分布式数据存储的核心算法,数据分布的算法 hash算法 -> 一致性hash算法(memcached) -> ...

  • 27_数据分布算法:hash+一致性hash+redis clu

    讲解分布式数据存储的核心算法,数据分布的算法 hash算法 -> 一致性hash算法(memcached) -> ...

  • 06-分布式和集群

    1.Hash算法 Hash算法在很多分布式集群产品中都有应⽤,⽐如分布式集群架构Redis、 Hadoop、 El...

  • 使用 Memcached 实现分布式算法

    使用 Memcached 实现分布式算法 分布式算法 余数计算分散法 根据 key 来计算 CRC,然后结果对服务...

  • 一致性hash

    余数hash算法: 原理:通过 hashCode%节点数 来实现。 假设key1对应的hash值为10,节点数量为...

  • <分布式寻址>一致性hash算法

    一致性Hash算法背景 一致性哈希算法在1997年由麻省理工学院的Karger等人在解决分布式Cache中提出的,...

网友评论

      本文标题:<分布式寻址>hash余数算法

      本文链接:https://www.haomeiwen.com/subject/vydsrqtx.html