摘要
Gossip协议是用于redis集群内通信并使得最终状态达成一致的协议。做法是每个节点周期性的随机选择几个节点发送Ping消息,用于交换状态信息,收到消息后的节点,返回Pong消息,告知自身状态。久而久之,所有的节点最终状态将达成一致。该算法用了较小的时间复杂度,实现了集群状态一致性,并且不要求网络需要非常好。
-
缺点:
- 网络中的节点会有不一致的情况;
- 每次选择节点,不能很好的预测系统完全达到一致所需时间;
- 消息可能被重复发送给同一个节点。
-
消息类型:
- ping:节点A向其它节点发送当前状态、包括其它节点状态的信息。
- pong:对ping消息的回应,返回回应者节点状态及回应者节点中存储的其它节点状态。
- meet:表示要加入集群的节点发送的信息。
- Fail:节点的故障信息。
-
常见的消息
- PUSH:节点A将(key,value,版本号)推送给B,B收到后更新A中比自己新的数据。
- PULL:节点A只将(key,版本号)推送给B,B收到后将A缺少的新数据同步给A。
- PULL/PUSH:比PULL多个一步,A再将比B新的数据同步给B。