分布式系统中,即使是一个小型的集群,也须要经过一个机制来维护各个节点或服务的状态一致性和数据一致性。zab、paxos是使用较早的协议,后来出现了RAFT协议,这些主要经过RPC的机制进行节点链接,所以主要用于局域网或数据中心内部。Gossip(意:八卦、流言)支持p2p协议,是可以用于广域网的一致性维护的协议,已经被不少互联网系统采用。此外,CRDT也是正在研究的一致性机制,能够实现即时的多节点数据写入同步。这里主要介绍GOSSIP协议。算法
参考:网络
Gossip是分布式系统中被普遍使用的协议,其主要用于实现分布式节点或者进程之间的信息交换。Gossip协议同时知足应用层多播协议所要求的低负载,高可靠和可扩展性的要求。因为其简单而易于实现,当前不少系统(例如Amazon S3,Usenet NNTP等)选择基于Gossip协议以实现应用层多播的功能。分布式
Gossip Protocol利用一种随机的方式将信息散播到整个网络中。正如Gossip自己的含义同样,Gossip协议的工做流程即相似于绯闻的传播,或者流行病的传播。具体而言Gossip Protocol能够分为Push-based和Pull-based两种。Push-based Gossip Protocol的具体工做流程以下:ide
Pull-based Gossip Protol的协议过程恰好相反:性能
固然,为了提升Gossip协议的性能,还有基于Push-Pull的混合协议。同时须要注意的是Gossip协议并不对网络的质量作出任何要求,也不须要loss-free的网络协议。Gossip协议通常基于UDP实现,其自身即在应用层保证了协议的robustness。spa
Gossip协议的分析是基于流行病学(Epidemiology)研究的。所以在分析Gossip的性能以前,须要首先介绍一下流行病学中基本的模型。.net
流行病传染最基本的模型仅做以下几个假设:对象
有了以上假设,咱们能够进一步分析流行病的传染状况。咱们记tt时刻处于infected状态的人数为ytyt,处于uninfected状态的人为xtxt,那么初始状态 y0=1y0=1, x0=nx0=n,而且在任什么时候候xt+yt=n+1xt+yt=n+1.blog
考虑连续的时间,可知:进程
dxdt=−βxydxdt=−βxy
解的:
x=n(n+1)n+eβ(n+1)tx=n(n+1)n+eβ(n+1)ty=n+11+ne−β(n+1)ty=n+11+ne−β(n+1)t
明显,当t→∞t→∞时,x→0,y→(n+1)x→0,y→(n+1),即通过足够的时间,全部的人都将被传染。
上述流行病传染模型为分析Gossip的性能提供了基础。在Gossip性能中,咱们能够认为: β=b/nβ=b/n(由于对每一个节点而言,被其余节点选中的几率就是b/nb/n)。咱们令t=clog(n)t=clog(n),能够获得:
y≈(n+1)−1ncb−2y≈(n+1)−1ncb−2
这代表,仅须要O(log(n))O(log(n))个回合,gossip协议便可将信息传递到全部的节点。 根据分析可得,Gossip协议具备如下的特色:
于此同事,Gossip协议的容错性比较高,例如,5050的丢包率等价于使用b/2b/2带代替bb进行分析;5050的节点错误等价于使用n/2n/2来代替nn,同时使用b/2b/2来代替bb进行分析,其分析结果不用带来数量级上的变化。