redis-哈希槽一致hash算法

news2024/9/24 7:23:37

1、一致性hash算法?

以分布式缓存为例,假设现在有3台缓存服务器(S0,S1,S2),要将一些图片尽可能平均地分配到不同的服务器上,hash算法的做法是:
(1) 以图片的名称作为key,然后对其做hash运算。
(2) 将hash值对服务器数量进行求余,得到服务器编号,最后存入即可。
举个栗子:
csdn.jpg 需要存入, 我们就得到hash(csdn.jpg) = 5 -------> 5%3 = 2 得到数据存入S2
思考:
上面的算法好像可以把图片均衡地分配到不同的服务器,当获取数据的时候也可以根据同样的思路访问对应的服务器,避免全局扫描。但是,这个时候服务器进行了扩容,加入了S4,我们还能否正常获取数据呢?
假设还是根据同样的思路获取csdn.jpg,我们就会得到 hash(csdn.jpg)%4 = 1。显然,我们去S1是无法获取数据的,这个时候就有可能会引发缓存的血崩,大量的请求落到数据库上。
那应该怎么办呢?

一致性hash算法
一致性hash算法会建立一个有2^32个槽点(0 - 232-1)的hash环,假设现在有A、B、C三台服务器,以A为栗,会进行hash(A)%232,得到一个0 - 2^32-1之间的数,然后映射到hash环上,如图所示:

在这里插入图片描述

接下来,我们同样以csdn.jpg为例,我们照样算出hash(csdn.jpg)%2^32的值,然后映射到hash环上,然后以该点出发,顺时针遇到的第一个服务器,即为数据即将存储的服务器。

在这里插入图片描述

这时增加了服务器D又会发生什么事情呢?
如果这个时候在A - C之间插入了服务器D,请求获取getKey(csdn.jpg)时,顺时针获得的服务器是D,从D上获取数据理所当然会失败,因为数据存在A上缓存。这样看缓存好像还是失效了。

那么做成hash环有什么好处呢?
虽然增加了节点D后,csdn.jpg的缓存失效了,但是,分布在 A-B,B-C 以及 D-A上面的数据仍然有效,失效的只是C-D段的数据(数据存在A节点,但是顺时针获取的服务器是D)。这样就保证了缓存数据不会像hash算法那样大面积失效,同样起到减轻数据库压力的效果。

思考:
既然hash环能保证在服务器节点发生变化的情况下,数据只会部分失效,那一致性hash是不是就结束了呢?
什么是hash偏斜?
A、B、C服务节点,如果像上图那样接近于将hash环平均分配那固然理想,但是如果他们hash值十分相近,会发生什么呢?

在这里插入图片描述

上图这种情况称之为hash偏斜,在这种情况下,大部分数据都会分部在C-A段,这个时候去A节点被删除,会有大量请求涌向B节点,给B节点带来巨大的压力,同时这部分缓存也会全部失效,有可能引发缓存雪崩。

怎么办呢?
这个时候我们可能会想到一句老话: 人多力量大。
如果我们的节点足够多,就应该可以防止服务器节点分布不均的问题了。
所以引入了虚拟节点的概念,以A节点为例,虚拟构造出(A0,A1,A2…AN),只要是落在这些虚拟节点上的数据,都存入A节点。读取时也相同,顺时针获取的是A0虚拟节点,就到A节点上获取数据,这样就能解决数据分布不均的问题。如图所示:
在这里插入图片描述

2、Redis Cluster 哈希槽

redis cluster采用数据分片的哈希槽来进行数据存储和数据的读取。redis cluster一共有2^14(16384)个槽,所有的master节点都会有一个槽区比如0~1000,槽数是可以迁移的。master节点的slave节点不分配槽,只拥有读权限。但是注意在代码中redis cluster执行读写操作的都是master节点,并不是你想 的读是从节点,写是主节点。第一次新建redis cluster时,16384个槽是被master节点均匀分布的。
在这里插入图片描述
和一致性哈希相比
它并不是闭合的,key的定位规则是根据CRC-16(key)%16384的值来判断属于哪个槽区,从而判断该key属于哪个节点,而一致性哈希是根据hash(key)的值来顺时针找第一个hash(ip)的节点,从而确定key存储在哪个节点。

一致性哈希是创建虚拟节点来实现节点宕机后的数据转移并保证数据的安全性和集群的可用性的。
redis cluster是采用master节点有多个slave节点机制来保证数据的完整性的,master节点写入数据,slave节点同步数据。当master节点挂机后,slave节点会通过选举机制选举出一个节点变成master节点,实现高可用。但是这里有一点需要考虑,如果master节点存在热点缓存,某一个时刻某个key的访问急剧增高,这时该mater节点可能操劳过度而死,随后从节点选举为主节点后,同样宕机,一次类推,造成缓存雪崩

扩容和缩容
可以看到一致性哈希算法在新增和删除节点后,数据会按照顺时针来重新分布节点。而redis cluster的新增和删除节点都需要手动来分配槽区。

新建master节点
使用redis-trib.rb工具来创建master节点
./redis-trib.rb add-node 172.60.0.7:6379 172.60.0.5:6379
注释:
192.168.10.219:6378是新增的节点
192.168.10.219:6379集群任一个旧节点
注意:新建的master节点是没有槽区的,需要给master节点分配槽,不然缓存无法命中。分配槽的方法自行百度。

删除master节点
1).如果主节点有从节点,需要将从节点转移到别的主节点上。
2).转移后 如果主节点有哈希槽,将哈希槽转移到别的master节点上,然后在删除master节点
注意:redis cluster的动态扩容和缩容并不会影响集群的使用。

3、总结

1):Hash slot(slot 空间)对比一致性哈希(环空间) 可以做到数据分配更均匀
有 N 个节点,每个节点是准确的承担 1/N 的容量
一致性哈希,它使用的是hash函数返回的值是随机的。

2):Hash slot 更便捷的新增/删除节点
假设已有R1、R2、R3 节点
若新增 R4 节点,只需要从 R1、R2、R3 挪一部分 slot 到 R4 上
若删除 R1 节点,只需将 R1 中 slot 移到 R2 和 R3 节点上, 节点之间的槽移动不会停止服务,集群是一直可用状态。
当一致性哈希增删节点时,会导致部分数据无法命中,严重的甚至会导致缓存雪崩。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/187862.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Unity3D插件】UniRx(基于Unity的响应式编程框架)插件教程

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客QQ群:1040082875 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、介绍UniRx插件 UniRx是一种基于Unity3D的…

九龙证券|石墨烯电池和锂离子电池哪个好

电池技术是电动汽车大力推广和开展的最大门槛,而电池工业正处于铅酸电池和传统锂电池开展均遇瓶颈的阶段,石墨烯储能设备的研制成功后,若能批量生产,则将为电池工业乃至电动车工业带来新的改造。那么石墨烯电池和锂离子电池哪个更…

VUE VS React 对比

VUE VS React 对比 这是面试中经常考察的一个问题,简单整理一下。我主要写 react ,所以 react 的特点阐述的多一点。 语法格式 vue 是单独的文件格式,一个文件包括了 js css HTML 全部 React 通常是 jsx 格式,JS 和 HTML 写在…

shiro相关源码解析

1. 认证过程相关源码解析 前后文可接查看 shiro的登陆都是通过subject.login()方法实现,接下来我们就进入login方法查看实现过程: 1.1 进入DelegatingSubject类的login方法: 此类实现了Subject接口: public void login(Authen…

基于ssm的高校二手物品交易网 java idea mysql

本文论述了民办高校二手物品交易网的设计和实现,该网站从实际运用的角度出发,运用了计算机网站设计、数据库等相关知识,网络和Mysql数据库设计来实现的,网站主要包括用户注册、用户登录、浏览商品、搜索商品、查看商品并进行购买&…

bilibili全链路压测改造之全链自动化测试实践

01 、背景与意义 B站直播营收送礼业务有着高写、在跨晚和S赛等大型活动下流量陡增、数据实时性要求高等特性,传统压测对于写场景为了避免影响线上数据做了各种屏蔽和黑名单处理,有着无法逼近线上真实情况的问题,因此业务对全链路压测有着较大…

拿下阿里自动化测试岗23k*14薪offer的全程面试记录解析以及总结,一面二面三面,项目,功能,自动化,性能测试,面试题问答

一、自我介绍 面试官您好!我叫xx,来自深圳,毕业之后一直从事于软件测试的工作,有做过保险、金融、电商等项目;有做过做功能测试、接口测试,自动化测试,在工作中积极主动、可以独立的完成测试工…

shiro(一):shiro基本概念及基本使用(认证、授权)

1. 权限的管理 1.1 什么是权限管理 基本上涉及到用户参与的系统都要进行权限管理,权限管理属于系统安全的范畴,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源。 权限管理包括用…

算法刷题打卡第76天:判断矩阵是否是一个 X 矩阵

判断矩阵是否是一个 X 矩阵 难度:简单 如果一个正方形矩阵满足下述 全部 条件,则称之为一个 X 矩阵 : 矩阵对角线上的所有元素都 不是 0 矩阵中所有其他元素都是 0 给你一个大小为 n x n 的二维整数数组 grid ,表示一个正方形矩…

CV——day72:从零开始学YOLO——YOLO-v3(可以在我的资源里下载完整的v1到v3的笔记啦!)

YOLO-v36. YOLO-v36.1 YOLO-v3 改进综述6.2 多scale方法改进与特征融合6.3 经典变换方法对比分析6.4 残差连接方法解读6.5 整体网络模型架构分析6.6 先验框设计改进6.7 softmax层改进6. YOLO-v3 **tips:**作者本人因为美军广泛运用于军事领域,所以决定不…

基于php电影点播平台/电影网站

摘要网络技术给生活带来了十分的便利。所以把电影点播平台与现在网络相结合。在点播平台发展的整个过程中,电影信息管理担负着最重要的角色。为满足如今日益复杂的管理需求,各类电影信息管理程序也在不断改进。本课题所设计的电影点播平台,使…

张艺谋《满江红》起诉自媒体人,杨语莲推荐周兆成意在下个谋女郎

伴随着兔年春节的到来,又迎来一波贺岁剧热潮,著名导演张艺谋的《满江红》,也如期和观众朋友见面。随着春节的逐渐结束,贺岁电影《满江红》票房,也再次创下了新高,关于这部电影的话题也多了起来。 最引人关注…

中国电子学会2021年12月份青少年软件编程Python等级考试试卷一级真题(含答案)

青少年软件编程(Python)等级考试试卷(一级) 一、单选题(共25题,共50分) 1. 昨天的温度是5摄氏度,今天降温7摄氏度,今天的温度是多少摄氏度?( ) A. 12 …

利用ChatGPT自动编写下载高德地图poi数据的代码

最近ChatGPT很火,它自己对于自己的解释如下图。我们可以让它来帮我们写代码,属于是薅机器人羊毛了。 首先注册账号,可百度,如:【教程】ChatGPT 保姆级注册教程,但中国大陆手机号不支持OpenAI的注册服务&am…

进程概念(PCB、进程创建、进程状态等)

进程是一个运行的程序,是所有计算机的基础。这个过程与计算机代码不一样,尽管它们非常相似。程序通常被认为是 “被动的” 实体,而进程则是 “主动的” 实体。硬件状态、RAM、CPU和其它属性都是进程持有的属性。下面我们就来了解更多关于进程…

活体识别1:近红外(NIR)图像特性

说明 最近在接触活体识别,在网上找到一个介绍近红外光(NIR)特性的论文,我简单做个笔记。原文的全文在文末参考资料里。 来自:[1]隋孟君,茅耀斌,孙金生.基于近红外图像特征的活体人脸检测[J].自动化与仪器仪表,2021(0…

Win10下使用WSL2

打包 wsl --export Ubuntu-20.04 E:\Ubuntu\ubuntu.tar.gz 注销之前 wsl --unregister Ubuntu-20.04 导入 wsl --import Ubuntu-20.04 E:\Ubuntu\ E:\Ubuntu\ubuntu.tar.gz --version 2 设置默认登陆用户为安装时用户名 ubuntu2004.exe config --default-user dwb 更新清…

vue 预览 word

最近做的项目要求实现预览word, pdf,png等文件功能,pdf以及png都很简单,轻松百度搞定,但是word预览研究了好久,所以特此记录分享。前端实现预览word分为两种,一种是上传前预览(也就是前端使用in…

SpringBoot笔记:统一请求参数修改(HttpServletRequest流复制),加解密参数也可参考处理

文章目录需求实现思路实战演练实现过滤器Filter继承 HttpServletRequestWrapper实现 RequestBodyAdvice 统一处理请求参数测试代码测试效果需求 需要进行统一的解密请求 header 头里面的关键字 encryKey ,将解密出来的值赋给 provinceId 并传递给后端的每一个请求接…

23年 yolov5车辆识别+行人识别+车牌识别+车速检测代码(python)

行人识别yolov5和v7对比yolo车距yolo车距1代码:yolov5车辆检测代码 已有1503人下载 代码无需更改,直接可以预测!!! 流程: 版本与配置声明 # YOLOv5 requirements # Usage: pip install -r requirements.tx…