浅谈哈希算法二

Posted 尧字节

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈哈希算法二相关的知识,希望对你有一定的参考价值。

前言

随着大数据的兴起,分布式系统越来越流行,不用个分布式系统出门都不好意思和别人打招呼,哈希函数在分布式系统中应用也非常广泛,整理如下。

负载均衡

常用的负载均衡算法有很多,有的是轮询算法,有的用的是加权轮询算法,但是有些场景,比如电商购物场景需要将同一个用户发到后台同一个服务器去处理,这样便于session保存会话信息;如何做到这一点那,有种方法是查表法,就是客户端链接的Ip进行查表,不同的网段发往不同的服务器中去;还可以按照本节介绍的哈希算法,具体是根据客户端的Ip求哈希值,然后对总的后台服务器数取余,那么得到的就是后台服务器的序号;哈希取余法比查ip的映射的好处是,不需要保存大量的数据信息,比较方便;用户增加或减少服务器的时候,维护起来也非常方便。

数据分片

在大数据时间,数据量越来越大,已经不是简单的一台服务器可以保存下的,就需要对数据进行分布式存储,即需要把数据划分为不同的块,每个块都保存到不同的服务器中去,至于这块数据存储在哪台后台的机器上,可以通过对数据块的数据求哈希值,然后对总的机器数取余;但是这里面如果有个问题,假设用户要增加或减少机器的数量,由于节点数量发生了变化,所有的数据要重新计算哈希值,还需要对数据进行搬迁,工作量之大难以想象;

我们希望可以在做服务器的增删的时候,需要计算的数据量不会很大,这就需要一致性哈希算法登场:
图来自互联网,如果有侵权,告知就删。
说明下:
1)假设我们有4台机器,对应节点为Node A /Node B/Node C/Node D,通过哈希算法先把机器放到0-231 -1的范围内。
2)来请求Object A Object B 之后只要顺时针去寻找节点,即可找到响应的服务器位置,比如Object B这个客户端请求,由Node B进行处理。
3)这样的好处是如果是去掉一个节点,或增加一个服务节点,需要变动的数据范围其实是比较小的。
目前如上图的一致性hash算法还存在缺点,就是如果服务器节点的数量比较少,容易造成数据倾斜的问题,即绝大多数的数据都只会用少数节点来处理,显然不满足要求。
处理办法是,即对少量的服务器节点进行多次哈希计算,由此得到不同的哈希值,将这些值在均衡地布在这个环上,从请求寻求处理的服务器节点的办法也和上面相同,这样就可以达到均衡数据的目的。

这图中的Node A #2 其实是Node A物理节点虚拟出来的虚拟节点而已。

大数据软件中,鼎鼎大名的Hadoop,就是利用哈希算法对数据进行分片存储到不同的机器上,不光可以增加数据的总的存储量,还可以有利于数据的备份和恢复。

就聊到这里。

祝大家一切安好!

            明翼 2019年8月27日于成都


以上是关于浅谈哈希算法二的主要内容,如果未能解决你的问题,请参考以下文章

浅谈一致性哈希算法 consistent hashing

浅谈一致性哈希算法 consistent hashing

浅谈一致性哈希算法 consistent hashing

浅谈一致性哈希算法 consistent hashing

一致性哈希算法PHP测试片段

浅谈hashcode()与equals()