各位有梦想的阿猿大家好,我是初昕之旅,您技术成长之路上的好帮手。今天继续更新《来道题》系列,每天一道面试题,年薪百万来找你~
对于Redis集群包含的多个节点之间,每个节点会参与到请求响应、槽管理、故障恢复等众多的功能中,那么整个集群的信息再每个节点之间是如何进行通信的呢?今天我们就来聊下Redis的节点通信方式,Gossip协议。
Gossip协议
首先给出Gossip协议的定义:节点每秒随机选择超时的节点进行通信,包含其他节点的信息,最终全部节点都会获得集群的完整信息。
我们知道节点之间存在心跳检测的行为,也就是节点之间是定时都会进行通信的,来维持在线状态的节点信息,这些信息包括主从节点、节点和槽的关系等,会在每个节点的本地进行存储。而这些信息不仅仅只是存储在自己的本地,同时在和其他节点进行心跳检测时,每个节点会从自己本地已知的节点信息中,带上一部分放到通信的包体中,一起发送出去。接受到请求的节点,会根据收到的信息和自己本地的信息进行比对,做一些更新的处理。等到这个节点也和其他节点进行通信时,同样地也会把最新的集群信息带在通信的包体中,传递给其他节点。在这个过程中,通过每个节点之间的一