标签:比较 部分 动态 这一 cup 就是 准备 des 网上
首先说点没用的:
在老师留下这份作业的时候,说的大致意思是这样的(T T因为讲作业内容那节课翘掉了,导致关键东西没听到什么也不明白滚回来自学。):
你们作业做出来大致是这个意思的就行:“就是节点再获得信息之后,想要获得信息的欲望弱了。也就是每次兴趣的逐渐减少,衰减”,体现出这个思想就行,要求P2P的,N个nodes什么的。
另外老师补充道:要想研究标准的这个算法,一定要去找他的论文,网上大部分都是不标准的。所以你们只要体现出来这个思想就ok。
先自己查一波资料(并不能看太懂):这个算法是干这个活的——gossip 是一种弱一致算法,也就是最终一致性算法。
Gossip是一个带冗余的容错算法,更进一步,Gossip是一个最终一致性算法。虽然无法保证在某个时刻所有节点状态一致,但可以保证在”最终“所有节点一致,”最终“是一个现实中存在,但理论上无法证明的时间点。
因为Gossip不要求节点知道所有其他节点,因此又具有去中心化的特点,节点之间完全对等,不需要任何的中心节点。实际上Gossip可以用于众多能接受“最终一致性”的领域:失败检测、路由同步、Pub/Sub、动态负载均衡。
但Gossip的缺点也很明显,冗余通信会对网路带宽、CUP资源造成很大的负载,而这些负载又受限于通信频率,该频率又影响着算法收敛的速度,后面我们会讲在各种场合下的优化方法。
// 然后最骚的是,想查查一些其他的人怎么看的,好多复制粘贴那一堆概念。。
反熵思想(Anti-entropy)。
反熵又是啥啊:修复分布式各节点永久性错误的东西。
废话先放一放,查询教材之后找出提到的几个概念:
1.感染协议(epidemic protocol):应该说的就是这类协议是基于流行病理论衍生的,然而在分布式系统中要传染的不是病,而是信息罢了。那么以下的概念都是些源于传染病的术语了??;
2.已感染的(infected):分布式系统的某个节点如果具有了要传播的其他的节点的数据。(已经染上病了的)
3.易受感染的(susceptible):还没有接受到数据的节点。(想要染病的。。。容易染上病的说法更好一点)
4.已隔离的(removed):不会传播其数据的已更新节点。(染上病都好了有抗体了的)
摘自教材(分布式系统原理与范式 第二版中文版 Andrew.S.Tanenbaum ,Maarten.Van.Steen写的):
要解释这杨算法东风恶一般原理,我们假定特定数据项的更新都是从单个节点发起的。这些就可以避免写冲突。
分布式系统的感染算法设计人员则是试图尽可能快递用新信息“感染”所有节点。
这里我们假定可以区分新旧数据,因为数据可能加上时间戳或者版本号了。
一种流行的传播模型是 反熵(anti-entropy)。再这个模型中,节点P随机选取另一个节点Q,然后与Q交换更新信息。三种方法如下:
(1)push:P只把自己的更新信息给Q。
(2)pull: P从Q那里活得更新信息。
(3)push-pull:PQ交换更新信息。
后文解释道:
快速方面push不好,push只能已感染的点发,已经感染的点多了的话,那么每个点去感染别人的时候能碰到易感染的点的几率就小了。但是,如果易感染的节点很多的话,push方法就很好的发挥作用了。这种情况下,易感染的被选择的几率高,就有着良性循环。
书上又说:
如果是只有一个节点感染的话,三种方法相比较之下,push-pull的方法最好。
所有点都与随机的另一点交换过了的这一过程成为 一轮(round)。
所以更新信息传到所有结点就需要O(logN)轮。
这中方法的特殊变体称为————gossiping。
然后这个例子让我马上明白了这个算法怎么玩得:
gossiping完全源于生活(因为这个单词的意思是流言蜚语的意思的吧),比如(虚构的)说:
Bob知道了同班同学A要过生日的事情准备通知大家给他准备个惊喜。Bob给Alice打电话通知,Alice又给她的朋友打电话通知,
但是她其中一个朋友Chuck说我都知道了,Alice觉得那大家可能都知道了把,就没有再打电话的兴趣了。
也就是说:
一个点(因为改变之后变成了“感染者”)开始发更新信息(当然是随机选),然后被选到的那个点也变成了“感染者”
然后感染者们继续选点,继续感染。如果选到一个已经感染的点的话(因为是push-pull算法),自己变得没兴趣了,就是变成了“被隔离者”,相当于便成了已经知道的人。
直到所有的感染者们都被隔离。
这种方法不能保证所有的节点都真的被更新了。
下面进行编码的尝试:
编码ing。。。
标签:比较 部分 动态 这一 cup 就是 准备 des 网上
原文地址:http://www.cnblogs.com/THX-night/p/7989282.html