2023-2更文22-一致性哈希

101 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 22 天,点击查看活动详情

一致性哈希

前文

本文主要内容是关于分布式系统中常用的一致性哈希内容的介绍。

什么是一致性哈希

提到一致性哈希,首先要提到哈希算法。在分布式的系统中,当有多个微服务组成集群时,我们需要对于请求来进行实际的负载均衡处理,也就是让请求均匀的或者按照实际的配置权重分配在每台机器上,这时候一般就会用到哈希算法。利用对于请求数据的哈希计算,再通过服务器数目的取余处理,就可以讲请求分配到固定的机器上。那么这种算法有什么问题呢?就是当集群中服务器的数量发生变更时,取余需要进行对应的更改。而为了改进这一点,就引入本文中的一致性哈希算法。一致性哈希算法并非是对于集群中服务器的数量进行处理,而是固定采用2^32次方进行取余处理,并将每个请求分布在一个环状结构中。与此同时,一致性哈希算法也将服务器本身的信息进行哈希运算,并将其同样分布到上面的环形结构中。这样当请求到达时,会直接到前面已经形成的哈希环中,寻找到同方向最近的节点。当集群发生扩容和缩容的问题时,实际上只是环中该服务节点被新增或移除,仅仅会影响该节点相邻节点请求对服务器的选择,避免常规哈希需要重新进行取余参数的设计。

一致性哈希的问题

那么一致性哈希就不存在问题了吗?其实也存在。实际上的节点在哈希环上可能不是均匀分布的,这种情况会导致某些节点承载过量请求,而某些节点鲜有请求会到达。而为了解决这种情况,也有解决方案是对同一个服务节点进行多次计算,在环上设置虚拟节点,这种情况下每个实际节点会对应多个虚拟节点,来提高节点命中的均匀性。实际上并没有最完美的哈希算法,一致性哈希也仅仅是为了解决哈希变化时节点的失效等问题。

总结

本文主要是对于分布式系统中一致性哈希的相关知识进行了简单的介绍,并引入了一致性哈希采用虚拟节点来解决请求分布不均匀的问题。