0
点赞
收藏
分享

微信扫一扫

redis 借鉴一致性hash处理散列问题

以下内容来自google, 想将这一套移植到自己的安全业务上去,后续跟进自身业务进行移植,主要是学习其设计思想

redis 使用数据分片的hash槽来应对数据存储和读取。redis集群共有2^14次方16384个hash槽,当操作数据时,使用CRC16算法计算key的hash值,然后与16384取模从而确定该数据是属于哪一个slot槽的。redis集群中,每个服务节点都被分配一段hash槽,只要确定了数据属于哪一个槽,就可以确定该数据是在哪一个节点之上。

redis 借鉴一致性hash处理散列问题_数据

redis cluster 的 hash slot 算法

redis cluster 有固定的 16384 个 hash slot,对每个 key 计算 CRC16 值,然后对 16384 取模,可以获取 key 对应的 hash slot
redis cluster 中每个 master 都会持有部分 slot,比如有 3 个 master,那么可能每个 master 持有 5000 多个 hash slot

hash slot 让 node 的增加和移除很简单:

  • 增加一个 master,就将其他 master 的 hash slot 移动部分过去
  • 减少一个 master,就将它的 hash slot 移动到其他 master 上去
    移动 hash slot 的成本是非常低的
    客户端的 api,可以对指定的数据,让他们走同一个 hash slot,通过 hash tag 来实现
    思路与一致性 hash 是一样的。通过更过的 hash slot,将路由分布得更均匀。 当一台机器挂掉之后,会在极短的时间内,将挂掉的 hash slot 分配给其他两个物理节点

可以看成是 -> hash slot -> 机器,hash slot 数量固定,不一一对应机器,动态分配的。

一致性hash和redis hash槽的区别

  1. redis hash槽并不是闭合的,它一共有16384个槽,使用CRC16算法计算key的hash值,与16384取模,确定数据在哪个槽中,从而找到所属的redis节点;一致性hash表示一个0到2^32的圆环,对数据计算hash后落到该圆环中,顺时针第一个节点为其所属服务。

2.一致性hash是通过虚拟节点去避免服务节点宕机后数据转移造成的服务访问量激增、内存占用率过高、数据倾斜等问题,保证数据完整性和集群可用性的;而hash集群是使用主从节点的形式,主节点提供读写服务,从节点进行数据同步备份,当主节点出现故障后,从节点继续提供服务。

http代理服务器(3-4-7层代理)-网络事件库公共组件、内核kernel驱动 摄像头驱动 tcpip网络协议栈、netfilter、bridge 好像看过!!!! 但行好事 莫问前程 --身高体重180的胖子



举报

相关推荐

0 条评论