提到一致性Hash,面试大概率被问到的一个问题,跳槽的时候百度一把,强记一波,上来就是回答一致性Hash几个要点,一致性Hash环,优秀的容错性和扩展性,再蹩脚的表述出一致性Hash算法工作原理,以上说的都对,就是隔了层纱,没有说透彻,看似完美的把这个问题糊弄过去,实际上对这个知识点是流于表面,最近学习分布式数据库知识,终于搞懂了这个看似高大上的知识。
全国疫情逐步趋于稳定,国外疫情肆虐,有了对比,才更加发现大中国是真的强(着重强调,疯狂点赞)。
memcached是典型Nosql缓存服务器,其实现分布式原理就是一致性Hash,顺带着memcached又撸一遍,工作中不用的技术,忘起来真快,结合起来搞明白一致性Hash。
探讨一致性Hash之前先得了解一般Hash,然后通过比较,再引出一致性是什么,怎么整,解决什么问题。
Hash算法在分布式系统中充当规则引擎,将单机有效演化成分布式
一般Hash算法:id % n,
存在的问题是如果新增节点,带来的数据迁移成本太高
例如:如果id % 3,新增一个节点变成,id % 4,需要迁移的数据约80%
通常会选择倍数分裂,例:id % 3变成id % 6,会有50%的数据迁移
为了解决数据扩容缩容问题,有了一致性Hash,一些文章讲原理的时候这时会摆出一致性Hash环那张图,实际上直接看下面的代码更容易理解
如果现在针对db4想做数据的扩容,可以只针对范围750-1000进行调整分裂,其余数据不受任何影响,并且db4中也不是所有的数据都需要迁移,只是部分需要迁移,有效的解决了普通hash中的数据扩容问题,可伸缩,这样来理解一致性Hash是不是简单了许多。