一致性hash算法是什么?

一致性hash算法是什么?,第1张

一致性哈希算法是在1997年由麻省理工学院提出的一种分布式哈希(DHT)算法。其设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。

一致性Hash是一种特殊的Hash算法,由于其均衡性、持久性的映射特点,被广泛的应用于负载均衡领域,如nginx和memcached都采用了一致性Hash来作为集群负载均衡的方案。

一致性哈希算法的目标是,当K个请求key发起请求时。后台增减节点,只会引起K/N的key发生重新映射。即一致性哈希算法,在后台节点稳定时,同一key的每次请求映射到的节点是一样的。而当后台节点增减时,该算法尽量将K个key映射到与之前相同的节点上。

优点

可扩展性。一致性哈希算法保证了增加或减少服务器时,数据存储的改变最少,相比传统哈希算法大大节省了数据移动的开销。

更好地适应数据的快速增长。采用一致性哈希算法分布数据,当数据不断增长时,部分虚拟节点中可能包含很多数据、造成数据在虚拟节点上分布不均衡,此时可以将包含数据多的虚拟节点分裂,这种分裂仅仅是将原有的虚拟节点一分为二、不需要对全部的数据进行重新哈希和划分。

虚拟节点分裂后,如果物理服务器的负载仍然不均衡,只需在服务器之间调整部分虚拟节点的存储分布。这样可以随数据的增长而动态的扩展物理服务器的数量,且代价远比传统哈希算法重新分布所有数据要小很多。

以上内容参考:百度百科-一致性哈希

现在比较大型点的系统基本上是AP+DB的架构: AP指应用程序,DB指数据库端

AP放在一个服务器上,DB放在另一个服务器上

当一个系统比较大,访问的用户数量比较多的时候,比如QQ,上亿用户.

这时一个服务器就吃不消了,这样就想到多个服务器跑同一个AP应用.

DB端也一样.

linux集群 指的就是多个服务器跑同一个AP应用,系统管理员的工作

数据库集群 指的就是多个服务器跑同一个DB数据库.数据库管理员的工作

linux集群基础就要熟悉linux系统.

数据库集群基础就要熟悉具体的数据库如oracle,db2,sysbase.mysql.等

0基础可以学,只是要花时间.0基础想搞到集群估计得花3个月时间.这还是要有环境的,有人指导才行.

很多大厂面试都会问:hash和一致性hash的区别,为什么要用一致性hash。本文就是答案啦。

    假如有cache主机5台分别为cacheA、cacheB、cacheC、cacheD、cacheE

    当程序进行hash时,首先每个节点要根据自己的唯一参数哈希出一个值来(如根据ip进行哈希)

    主机哈希完成后形成的哈希值如下

    cacheA       0

    cacheB       1

    cacheC       2

    cacheD       3

    cacheE       4

    主机形成哈希值后,我们以缓存来做实例,比如某个用户登录后会有一个唯一的pin值,然后根据这个pin值进行hash求余。因为求余是用5来求余,所以数值肯定会小宇5 因此就有了落点,然后把缓存数据进行缓存到落点服务器中。

    假如有cache主机5台分别为cacheA、cacheB、cacheC、cacheD、cacheE

    当程序进行hash时,首先每个节点要根据自己的唯一参数哈希出一个值来(如根据ip进行哈希)

    主机哈希完成后形成的哈希值如下

    cacheA       key1

    cacheB       key2

    cacheC       key3

    cacheD       key4

    cacheE       key5

然后5台节点围绕称一个环形,如图

主机形成哈希值后,我们以缓存来做实例,比如某个用户登录后会有一个唯一的pin值,然后根据

 这个pin值进行hash。这里注意和普通hash不一样的就是这里只hash不求余,当hash出一个数值

后,查看这个这个值介于那两个值之间比如介于key4和key5之间,然后从这个落点开始顺时针查

找遇到第一个cache服务器后就把这个服务器当作此次缓存的落点,从而把这个缓存放到这个落点

上。如图:

        经过上面的介绍我们能看出,假如普通的哈希当其中任意一台机器down掉后,我们整个的缓存都将安然无存,为什么这么说呢?

        因为当某台cache down掉后我们需要重选算落点,除数已经变了,所以都要重新set缓存,当然不排除有一些两个pin值算的落点是一样的,但是当cache服务器增加到一定数量后,前面所说的可能性几乎为0,所以称之为全部缓存都要重新set。

      而使用一致性哈希当其中一台机器down掉后,只有它上面到它这一段的环路缓存失效了,如:当cache3 down掉后,那落掉在cache2到cache3之间的pin都将失效,那么失效的落点讲继续顺时针查找cache服务器,那么新的落点都将落到cache4上。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8976703.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-23
下一篇 2023-04-23

发表评论

登录后才能评论

评论列表(0条)

保存