Redis Gossip通信协议

301 阅读1分钟

摘要

Gossip协议是用于redis集群内通信并使得最终状态达成一致的协议。做法是每个节点周期性的随机选择几个节点发送Ping消息,用于交换状态信息,收到消息后的节点,返回Pong消息,告知自身状态。久而久之,所有的节点最终状态将达成一致。该算法用了较小的时间复杂度,实现了集群状态一致性,并且不要求网络需要非常好。

  • 缺点:

    1. 网络中的节点会有不一致的情况;
    2. 每次选择节点,不能很好的预测系统完全达到一致所需时间;
    3. 消息可能被重复发送给同一个节点。
  • 消息类型:

    • 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。