分布式缓存的路由策略

为什么需要路由分发?

  • 在我们使用redis cluster集群的时候,由于其有多个主节点和多个从节点,不同于以往的一主多从,这多个主节点之间的数据是不共享的,所以,那么如果我们在存取数据的时候,就必须从确定的这个主节点中去存取数据,不能存的时候在这个master存,取得时候就跑到别的master去取了,这样就不能够偶去到数据,由于数据的类型正好又是键值对的形式存在的,那么我们就可以通过这个键去将请求路由分发到不同的master上去,所以,在分布式缓存中可以有什么样的路由分发的策略呢?

路由分发的策略

1)使用常见的hash取余或者与的方式

  • 在hashmap中,使用的是与的方式拿hash来进行计算,从而获得这个键在hashmap中的节点数组中的位置,那么我们在使用redis分布式缓存的时候,它也能通过这种方式去实现,每一个key,计算出他的hash值去与或者取余,从而计算出该key应该分布在哪一个master上,这样的话,从理论上来说是可以的,但是,如果说有一个master节点宕机了,那么任然会有大量的键发送到那个master上去,我们是不是就会那个宕机的节点数据就访问不到了呢?或者是我们需要对节点数进行扩容,那么,通过与或者取余的的方式计算出来的值,原来的key又会被完全重新分配,不能到之前的master上去了,这样的改动太大了,不好。

2)使用一致性hash算法

  • 一致性hash算法,相当于是一个从0到2的32次方-1的圆环,所有的数据都会落到这个环上,那么我们的master也可以分配到这个环上,当数据过来的时候,会将通过顺时针旋转找到的第一个master作为自己将要使用的master,这样的话,即使有减少了master数量,数据可以转移到下一台master上去,依然不会影响数据的存取使用,而当有master节点增加的时候,可能会拦截之前的某一个master的数据,但是也能使用。使用一致性hash的优点就是,扩展性强了,并且面对master宕机时更加可用了,但是它也存在一定的缺点,在进行节点的扩充或者减少的时候,他们在哈希环上并不是平均分配的,可能有的master会响应大量的请求,而有的master响应极少量的请求,造成这种数据倾斜,并不是我们希望看到的情况。

3)使用hash slot

  • 这也是redis cluster目前正在使用的算法,hash slot有16384个虚拟节点,每个key过来之后对它计算CRC16值并取模,将它分配到这16384个节点中去,然后再由master平均分配这16384个节点,当有master减少的时候,这个master所持有的虚拟节点就可以分配到其他master上去,增加master节点就从其他的master的虚拟节点中各取一小部分分配到这个master上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值