,而在节点稳定的时候,同一个key的每次请求映射都是一样的
一致性哈希算法实现原理如下
首先将node节点映射到一个圆上(圆的大小是2^32-1),然后将请求object映射到圆上,最后顺时针转动请求...,转动的目的是让请求映射到node节点上
原理图如下
上述的算法在node2被删除的情况下回发生什么呢?...变化是object2倍映射到node4上,对于其他的请求没有变化
上述的一致性hash算法满足了单调性(单调性是指对于k个请求,n个node,当一个node上线或者下线时只会引起k/n个请求映射发生变化...入下图所示
下面是一致性哈希算法的java实现,这里的代码引自xxl-job,jobId就是相当于请求id
首先计算hash,hash在该算法中地位非常重要,它直接影响了node是否能均匀的落在圆上...jobId就是相当于requestId
public String route(int jobId, ArrayList addressList) {
//首先是将node定位到圆上