岚天逸见

需要使用一致性哈希吗?

在普通的哈希中,如果节点个数(分母)发生变化,原先的次序会被完全打乱重来,一致性哈希解决了这个问题。实际可看成普通的哈希对着的是物理节点,而一致性哈希对着的是虚拟节点,这里可以拿物理内存和虚拟内存来对比,虚拟节点是可认为是使用不完的,挂了一个节点,还可以认为节点数不变,因此哈希的对应关系仍保持不变,也就不存在普通哈希的问题了。

没有深入的了解一致性哈希,但我认为一般的集群系统使用一致性哈希并非最优的选择。在一些系统中,我采取了另一种更傻瓜式的办法,基本不涉及到算法二字。仍然将物理节点看成取之不尽的虚拟节点,仍哈希成若干份(比物理节点数大百倍,甚至万倍,每一份可以看成原子不可再分隔的),可以将每一份看成为一个麻将子,最复杂的算法就是已知节点数的情况下,如何去均衡的分配这些麻将子,而同时又尽可能的减少数据映射关系的变化,要做到这一点非常容易,只需要维护一个分配表即可,这里有一个前提:需要一个集中的改变分配关系的节点。

实际即使使用一致性哈希,也需要一个集中的改变分配关系的节点,因为某个节点自作主张选择的下一节点,也许并非可靠的,因为也许刚好它们之间的网络是通的,但和其它一些可能并不通,因此仍需要一个仲裁节点来发布指令。

从上面的理解来看,使用一致性哈希并不是最简单的均衡和容灾策略。什么情况下必须一致性哈希了?

posted on   岚天逸见  阅读(122)  评论(0编辑  收藏  举报

编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义

导航

统计信息

点击右上角即可分享
微信分享提示