XShell springcloud 电力杆 二叉树排序 ipv4 php qt github flexbox binding webforms ionic3 webkit vue状态管理 打印缩放怎么设置 mysql卸载重装 matlab中如何定义函数 spring源码下载 css鼠标悬浮样式 小程序下拉刷新样式 input函数python python图形化编程 java中的多态 java重写和重载 java的基本类型 java接口的使用 java当前时间 java获取当前时间 java时间戳转换 java数组 java文件路径 java比较字符串 php实例 python教程视频 tabletpc din字体 跳一跳脚本 ipad锁屏 丁丁下载 三维看图软件
当前位置: 首页 > 学习教程  > 编程语言

分布式缓存的路由策略

2021/2/13 17:22:28 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

分布式缓存的路由策略为什么需要路由分发?路由分发的策略为什么需要路由分发? 在我们使用redis cluster集群的时候,由于其有多个主节点和多个从节点,不同于以往的一主多从,这多个主节点之间的数据是不共享的&#xff…

分布式缓存的路由策略

      • 为什么需要路由分发?
      • 路由分发的策略

为什么需要路由分发?

  • 在我们使用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过来之后对它进行与或者取余,将它分配到这16384个节点中去,然后再由master平均分配这16384个节点,当有master宕机的时候,这个master所持有的虚拟节点就会分配到其他master上去,增加master也是一样的

本文链接: http://www.dtmao.cc/news_show_700131.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?