5分钟理解onecache hash算法

Posted 平民软件

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了5分钟理解onecache hash算法相关的知识,希望对你有一定的参考价值。


onecahce中的hash算法有两种:

onecache自带算法

twemproxyketama算法——可以实现和twemproxy的直接切换。

hash函数通过配置文件中的root节点的hash属性配置。如果需要用twemproxyketama算法,则配置twemproxy_mode=1

本文主要讲解onecache自带的hash算法,twemproxyketama运用了一致性hash算法,可以查看twemproxy源码了解。

onecache的自带算法中, onecache有一个最大hash值,也就是配置文件中的hash_value_max字段,目前规定的最大上限为1024。由于onecache是集群方式管理后端redis节点,因此需要给每个group分配一定的hash范围,比如hash_value_max120,有3group分别G1G2G3。则可以这样配置

G1    hash_min=0   hash_max=39

G2    hash_min=40 hash_max=79

G3 :     hash_min=80  hash_max=119

注意不同的grouphash值不可以重叠,也不可以超过最大值,不然onecache在检测配置文件是否合法时会报错。如果集群中的主机性能差异明显,则性能好的可以多分配几个hash值,差的则少分配几个,类似权重。分配完成之后,在onecache内部会构建一个数组,一个hash值对应一个group

如果特定的hash值需要指定到特定的group中,则可以通过配置文件的hash_mapping节点添加,例如


5分钟理解onecache hash算法


客户端有请求过来之后,就可以根据key计算hash:

 hashValue = hashFun(key) % hash_value_max;

再根据hashValue值可以在数组中很快的定位到一个group。如果这个时候的group里面的所有节点都处于挂了的状态,那也没关系,在配置文件中还有如下选项可以配置:

backend_retry_interva表示后端断开后的重试连接的间隔时间

backend_retry_limit表示后端重试连接的最大次数

auto_eject_group表示是否启用group不可用时自动移除 1=YES 0=NO

group_retry_time表示group的重试时间,超过后将会自动移除

eject_after_restore表示摘除group后,如果又变为可用状态,将会进行恢复 1=YES 0=NO

也就是这个group挂了之后,如果auto_eject_group配置1,超过了group_retry_time时间group还没有恢复,则此group会被摘除,它原有的hash值就会被其他的group均分,也就是此后本来落在这个groupkey会平均分散到其他的group中。如果eject_after_restore配置了1,则这个group如果又变成了active状态,那么原本的hash值又还给了它,恢复正常状态。




 

 

 

 


以上是关于5分钟理解onecache hash算法的主要内容,如果未能解决你的问题,请参考以下文章

Hash算法在区块链中如此重要,三分钟让小学生理解Hash算法

好文章收藏--五分钟理解一致性哈希算法(consistent hashing)

五分钟理解一致性哈希算法(consistent hashing)

每天进步一点点——五分钟理解一致性哈希算法(consistent hashing)

(转)每天进步一点点——五分钟理解一致性哈希算法(consistent hashing)

每天进步一点点——五分钟理解一致性哈希算法(consistent hashing)