618 | 一致性哈希:让数据分布更"均匀"的魔法算法
想象你开了100家快递驿站,要把10万个包裹分到各个驿站。
简单哈希的做法:驿站编号 = hash(包裹ID) % 100
问题是:一旦某个驿站倒闭,需要重新分配所有包裹,数据迁移量巨大!
一致性哈希:巧妙解决这个痛点。
一、为什么需要一致性哈希?
普通哈希的问题
假设我们有3台服务器,用普通哈希分配数据:
hash(key) % 3 key1 -> hash("key1") % 3 = 0 -> Server 0 key2 -> hash("key2") % 3 = 1 -> Server 1 key3 -> hash("key3") % 3 = 2 -> Server 2看起来很均匀。
但是!某天流量暴涨,需要扩容到4台服务器:
hash(key) % 4 key1 -> hash("key1") % 4 = ? // 可能变成2! key2 -> hash("key2") % 4 = ? // 可能变成0! key3 -> hash("key3") % 4 = ? // 可能变成1!几乎所有数据都需要重新映射!<