之前学习raft算法通过领导者模型简化来共识算法的实现。但是写请求限制在领导者节点上,写性能约等于单机。
- 如何突破领导者的限制?
最简单的就是hash分桶,将相同请求映射到相同的节点处理,这样就可以多个集群。
简单hash的问题?
节点变更时数据迁移量大,迁移成本高。简单举例:
- 1.3个节点通过普通hash函数 key%3 来进行映射
- 2.当3个节点增加到4个,hash函数变成 key%4
- 3.这是需要迁移 key%3 != key%4 的数据(约75%)
一致性hash
- 把值通过hash函数映射到一个环上
- 把节点通过hash函数也映射到环上
- 值顺时针遇到的第一个节点就是处理它的节点
假设开始3个节点分布均匀,新增一个节点到4。把4插到某两个节点直接,这时需要迁移的数据量1/3*1/2=1/6。当然这是理想情况,但确实比普通hash迁移数据量少了很多。
问题:
- 1.节点不均匀怎么办? 简单的办法就是再加一层代理,环上均匀分布虚拟节点,虚拟节点再映射真实节点。这样就能有效控制原本节点分布不均的问题。
总结
个人理解一致性hash就是换了个映射思路,由原本的直接映射变成了间接映射。
下一篇:Gossip
本文暂时没有评论,来添加一个吧(●'◡'●)