25 redis 中 cluster 集群的工作模式

发布时间:2023年12月18日

前言

我们这里首先来看?redis?这边实现比较复杂的?cluster集群模式?

整个?cluster集群 中会包含多对 Master+Slave 的组合, 然后这多对?Master+Slave 来分解?16384 个?slot

然后?客户端这边 set, get 的时候,?先根据?key?计算对应存储的 slot, 然后?服务器这边响应 MOVED +?目标机器?给客户端,?然后客户端这边?重新连接目标机器,?然后?将原有的命令发送到 目标机器上面

服务器这边主要是如果目标slot在本机,?则进行业务处理,?否则进行一个?转发的处理

客户端这边的处理就是,?向服务器发送命令,?如果服务器正常响应,?则处理正常,?如果服务器返回?MOVED + 目标机器,?则连接目标机器,?然后发送命令?

所以?这个集群其实就是 转发 +?几对主从, 来实现的集群,?然后?主从本身提供了服务的高可用,?多备份,?完整性,?一致性?

转发?+?几对主从,?提升了集群的处理效率,?吞吐量等等?

?

?

客户端发送 set 命令

在客户端上面发送命令?“set name4 jerry”

ca791baea52e4049903cd554fc049808.png

?

?

服务器这边的 keyHash?处理

服务器这边的转发处理如下,?这里是转发的最终结果?

客户端目前连接的是 “192.168.220.132:7004”, 然后这里服务器根据?”name4” 计算,?需要转发的机器是?“192.168.220.132:7005”,?以及?slot 是?8736

ffca7dcb379548248c56aa84e7af8923.png

?

计算?slot 的方式如下,?传入?“name4” 然后根据?keyHashSlot 进行?slot?的计算, 具体的计算规则?我们可以不用关心, 只需要知道?一个 key?会计算到一个固定的?slot?就行?

cd772f67a40d4d389caa1f4ebd1dd403.png

?

计算的方式如下,?如果是包含?“{” 和?“}” 计算?之间的部分,?基于?crc16(str) % 16384

否则计算?crc16(key) % 16384

a62d49caa9d8473292cd88005a1930dc.png

?

?

客户端这边的转发处理

这里打印了日志,?更新了?config.hostip, config.hostport 以及刷新了 prompt 的信息?

a56f8d0ff4c249c9bfc0c64339897e48.png

?

然后在外面的发送命令的循环中,?会重新和目标服务器建立间接,?然后重新发送命令?

cfa8629eaa094274adb92049ec51cd58.png

?

然后转发到目标服务端这边的时候,?客户端这边?调用堆栈如下

e43051ae732842a0b4596b847f74ac3f.png

?

?

目标服务端这边的业务处理

服务器这边的处理如下,?这个就是?常规意义上的真实的 set?命令的落地处理了?

39f3ecb0383d4eb99e83ce06bd2cc7c8.png

?

在?processCommand 中,?调用真实业务处理的是在这里, 在处理的末尾了?

7401f36bacab49268002f24509d2acff.png

?

然后上面的计算?keyHash, 计算集群节点跳转的处理,?是在上面的地方?

如果是计算出来,?是其他节点,?才跳转,?否则?继续往后走,?走正常执行业务的处理?

497b916aef2a44b68634b12aab4fa847.png

?

?

?

?

?

文章来源:https://blog.csdn.net/u011039332/article/details/133394903
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。