一致性哈希算法的基本原理

题目:

工程师使用服务器集群来设计和实现数据缓存,以下是常见的策略

1、无论是添加、查询还是删除数据,都先将数据的id通过哈希函数转化为一个哈希值,标记为key

2、如果目前机器有N台,则计算key%N的值,这个值就是该数据所属的机器编号,无论是添加、删除还是查询操作,都只在这台机器上进行

请分析这种缓存策略可能带来的问题,并提出改进的方案

 

潜在问题是添加或删除机器,代价会很高,所有的数据都需要重新计算一下key值,然后对新的机器数取模操作,然后进行大规模数据迁移

为了解决问题,提出一致性哈希算法,哈希值范围是2^32,也就是0-2^32-1数字空间中

 

一致性哈希算法的基本原理_第1张图片

首先把该数据的id用哈希函数算出哈希值,并映射到环中相应位置,然后顺时针寻找离这个位置最近的机器,那台机器就是该数据的归属如图1所示,图2表示删除机器和增加机器数据还是顺时针找到最近的机器

还存在的问题就是机器负载不均衡,解决办法就是一致性哈希算法引入虚拟节点机制,即对每一台机器通过不同的哈希函数计算出多个哈希值,对多个位置都放置一个服务节点,称为虚拟节点,如图3所示

也就是说我们让每台机器分配数量较多的虚拟节点去抢占哈希环,数量多起来之后,哈希函数的离散性就可以得到很好的体现,然后每台机器就可以按照虚拟节点的比例来分配负载均衡啦,这就是虚拟节点技术。

你可能感兴趣的:(秋招)