每日一博 | 一文搞懂一致性 hash 的原理和实现
在 go-zero 的分布式缓存系统分享里,Kevin 重点讲到过一致性hash的原理和分布式缓存中的实践。本文来详细讲讲一致性hash的原理和在 go-zero 中的实现。 以存储为例,在整个微服务系统中,我们的存储不可能说只是一个单节点。 一是为了提高稳定,单节点宕机情况下,整个存储就面临服务不可用; 二是数据容错,同样单节点数据物理损毁,而多节点情况下,节点有备份,除非互为备份的节点同时损毁。 那么问题来了,多节点情况下,数据应该写入哪个节点呢? hash 所以本质来讲:我们需要一个可以将输入值“压缩”并转成更小的值,这个值通常状况下是唯一、格式极其紧凑的,比如uint64: 幂等:每次用同一个值去计算 hash 必须保证都能得到同一个值 这个就是 hash 算法完成的。 但是采取普通的 hash 算法进行路由,如:key % N 。有一个节点由于异常退出了集群或者是心跳异常,这时再进行 hash route ,会造成大量的数据重新 分发到不同的节点 。节点在接受新的请求时候,需要重新处理获取数据的逻辑:如果是在缓存中,容易引起 缓存雪崩。 此时就需要引入 consistent ...
