#扒卦(#gossip)是一种去中心化的分布一致性协议,旨在保证数据在集群中的传播和状态具有一致性。

#扒卦协议 的工作原理类似于“流言蜚语”传播。扒卦协议利用一种随机的方式将信息传播到整个网络,并在一定时间内,使得系统内的所有节点数据一致。

Reply to this note

Please Login to reply.

Discussion

扒卦协议(Gossip)执行过程:

种子节点周期性的散播消息【假定把周期限定为 1秒】。

被感染节点随机选择;选择N个邻接节点散播消息【假定tan-out(扇出)设置为6,即每次最多往6个节点散播】。

节点只接收消息不反馈结果。

每次散播消息都选择尚未发送过的节点作为接收端节点。

收到消息的节点不再往发送节点回播:A->B,那么B进行散播的时候,不再发给 A。

扒卦协议的信息传播和扩散通常需要由种子节点发起。整个传播过程可能需要一定的时间,由于不能保证某个时刻所有节点都收到消息,但是理论上最终所有节点都会收到消息,因此它是一个最终一致性协议。

扒卦协议是一个多主协议,在一个时区段内所有写操作可以由不同节点发起,并且同步给其他副本。

扒卦协议内组成的网络节点都是对等节点,以及“点对点”(P2P)的非结构化网络。

扒卦协议的通信方式

扒卦协议最终目的是将数据分发到网络中的每一个节点。根据不同的具体应用场景,网络中两个节点之问存在三种通信方式:推送模式(Push)、拉取模式(Pull)、推拉并举模式(Push/Pull)。

*推送:节点 A 将数据及对应的版本号推送给 B节点,B节点更新 A 中比自己新的数据。

*拉取: A 仅将数据推送给B,B将自己比 A新的数据推送给A,A 更新本地。

*推拉并举:与推送类似,但是多了一步拉取,A 推送后再将本地比 B新的数据推送给 B,B则更新本地。如果把两个节点数据同步一次定义为一个周期,则在一个周期内,推送需通信1次,拉取需2次,推拉并举则需 3次。虽然消息数增加了,但从效果上来讲是最好,理论上一个周期内可以使两个节点完全一致。直观上,推拉并举的收敛速度也是最快的。