当前位置:网站首页>一次调试去了解redis集群的slot机制
一次调试去了解redis集群的slot机制
2022-07-01 20:43:00 【mariolu】
某次我在压测redis集群(该redis集群使用一批intel性能硬件aep),为了上线前摸清性能上限。于是就有了后面的故事。
正常情况下,因为我没有那么多机器去打redis集群,于是去寻求测试部门压测平台的帮助,去获取到大流量(为了尽量模拟真实线上,使用了旁路录制的流量进行重放),但是由于压测平台是对业务服务的(请求pb格式是业务定制的),而没有这种redis的读写压测功能。所以还是得靠服务,但是服务机器我旁路测试环境又没有多台。于是就有了大数据同学的建议,你们的数据可不可以都打到同一台slot。
好吧这个redis的slot有耳闻,但是还不是特别了解,因为平时的连接我只需要一个url+端口就搞定了。比如以下配置
于是乎,使用gdb打开服务进程,去内部窥探下slot是怎么运作的
gdb --args ./SearchUserFeatureServer --flagfile=conf/gflags.conf
设置好断点,可以按r,开始探索之旅
首先我发现初始化连接的时候,redis会响应,返回类似这种连接信息
f2a9484ec91a9007863d015e2f72146940477efb 10.194.88.141:[email protected] master - 0 1656591917000 33 connected 656-1311
描述了
<id><ip:port><flags><master><ping-sent><pong-recv><config-epoch><link-state><slot><slot>...<slot>
于是我的代码会去找这个slot,然后进行slot的redis node节点的映射。最后会把这个16384个元素的数组填充满。
就是代码中的int slot_ipport_index_vec[16384]。
首先我连的这个集群有24个node,其中一个node信息如下:他的起始slot是656,终止slot是1311
每段slot区间是656,这个656是根据16384个slot数/24个node得到的。观察这个16384个数组,他里面均匀分布着24个node。每个node独占一段slot。
首先会去和redis连接,然后他会告诉你redis有多少个node
然后这个node数量会作为除数,16384/node数=slot区间
然后每个slot区间都是放同一个节点的连接。把这16384分割成0-655,656-1311,…
之后的请求就会根据key的crc32算出一个hash值,投射到这个hash环上,决定用哪个节点
这个是请求key进来,根据crc16做简单散列值计算
请求会根据hash算出落在16384个元素的数组的最终节点,好比一个hash环,node投射一遍,请求key投射一遍,然后找交集
不过我看到的这个是和redis建立init的过程,不知道后面如果新增或者减少node是怎么处理的,这个待进一步研究~
边栏推荐
- EDA工具对芯片产业的重要性知识科普
- 写博客文档
- 安装mysql时出现:需要这两个包perl(Data::Dumper),perl(JSON)
- 王者战力查询改名工具箱小程序源码-带流量主激励广告
- 天气预报小程序源码 天气类微信小程序源码
- leetcode刷题:栈与队列06(前 K 个高频元素)
- 杰理之蓝牙耳机品控和生产技巧【篇】
- Customize the insertion of page labels and realize the initial search of similar address books
- Principle of motion capture system
- 宅男壁纸大全微信小程序源码-带动态壁纸支持多种流量主
猜你喜欢
Target detection - Yolo series
杰理之烧录上层版物料需要【篇】
Richview RichEdit srichviewedit PageSize page setup and synchronization
Niuke programming question -- must brush the string of 101 (brush the question efficiently, draw inferences from one instance)
在技术升级中迎合消费者需求,安吉尔净水器“价值战”的竞争之道
NSI脚本的测试
RichView 文档中的 ITEM
考虑关系的图卷积神经网络R-GCN的一些理解以及DGL官方代码的一些讲解
深度学习 神经网络基础
如何用OpenMesh创建一个四棱锥
随机推荐
2022熔化焊接与热切割上岗证题目模拟考试平台操作
合成大西瓜小游戏微信小程序源码/微信游戏小程序源码
Learn white box test case design from simple to deep
GCC编译
leetcode刷题:二叉树03(二叉树的后序遍历)
杰理之烧录上层版物料需要【篇】
杰理之、产线装配环节【篇】
Principle of motion capture system
Keras machine translation practice
浏览器tab页之间的通信
【Opencv450】HOG+SVM 与Hog+cascade进行行人检测
RichView 文档中的 ITEM
[multithreading] realize the singleton mode (hungry and lazy) realize the thread safe singleton mode (double validation lock)
股票手机开户哪个app好,安全性较高的
天气预报小程序源码 天气类微信小程序源码
杰理之、产线装配环节【篇】
杰理之烧录都使用 VBAT 供电,供电电压 4.2V【篇】
2022年低压电工考试试题及答案
Use Zadig to build a continuous delivery platform from 0 to 1
《软件工程导论(第六版)》 张海藩 复习笔记