一致性Hash算法

简单写一下做个备忘录,个人觉得一致性Hash算法相较普通Hash算法,重点就是引入了Hash环作为标准参照。

一致性Hash算法解决的是数据落点问题,通过一致性Hash算法可以将数据均衡的分配到分布式环境下的多台服务器上,比如Redis缓存集群每台服务器分别存储一部分数据;分布式数据库每个数据库可以存储固定标准的数据;Nginx等负责均衡服务可以将用户请求分配到同一台服务器等常见。

特点是通过Hash环这样一个标准参照来消除由于落点数量变化导致的落点位置变化。假设,我们有一个社交网站,需要使用Redis存储图片资源,原本图片资源可以均衡的分配到每台Redis服务器,但是如果Redis服务器数量变化,原有的分配规则将导致图片资源重新分配到新的服务器上,从而导致短时间内Redis服务不可用,也就是我们之前说的雪崩。一致性Hash算法,在Hash的过程中不在以服务器数量为标准,而是以Hash环为标准,服务器通过hash算里法取得在Hash环上的落点,图片资源也通过同样的Hash算法取得在Hash环上的落点,然后通过计算两个落点的距离来确定图片资源的分配。这样一来如果服务器资源变动后,由于原来的服务器在hash环上的落点没有变,图片资源的落点也没有变,这就很巧妙的避免了图片资源需要在所有的服务器上重新分配的问题。

一致性Hash算法虽然很好的解决了数据重新分配的问题,但是由于无法控制服务器的hash落点所以同时也带来了,图片资源数据倾斜的问题,即数据可能集中落点某些服务器。当然这点,一致性Hash算法通过虚拟节点进行了优化。

你可能感兴趣的:(分布式系统,一致性Hash算法,Hash环)