分布式系统中,多个节点间实现请求的负载均衡, 如果部分实例由于一些特殊的原因宕机或者需要扩容,这个时候就涉及到部分请求重新分发的问题。
为了最小化请求重新分发,引入了一致性 hash 算法。
先看下传统的 hash 算法解决请求分发问题的过程。
hash
hash 算法大家应该很熟悉了,就是将不定长的数据经过计算后输出定长的结果。
如果在分布式系统中使用 传统hash 方法来分发请求,
server = hash(key) % n
这会带来两个问题:
-
一旦服务器节点数 n 发生伸缩,就需要重新计算所有 hash ,会大大的消耗服务器性能从而降低整个系统的吞吐量。
-
可能出现分布不均匀问题,部分节点负载过高,部分节点负载过低。
为了解决传统 hash 方法带来的问题,1997年麻省理工提出了一致性 hash 算法( 也称hash 环)。
一致性 hash
也称作 hash 环,一致性哈希是一种特殊的哈希技术,当哈希表的大小发生变化时,平均只需要重新映射n/m个键,其中n是键的数量,m是插槽的数量。