Gossip/Epidemic ptotocol 解决的问题是multicast problem

Gossip 协议是电脑之间的通信协议,受启发与现实社会的流言蜚语。现代分布式系统通常用gossip协议来解决一些用其他方法难以解决的问题,可能是因为当前网络有一个不便的问题——过于庞大,或许是因为gossip协议有时候是最为行之有效的方法。

“传染病协议”(epidemic protocol)有时也是gossip协议的同义词,因为gossip协议传播信息的方式,有时候很类似于生物体内的病毒传播。

Multicast

红色的node想要把自己的information发送给group里面的其它的node---multicast problem

multicast与broadcast不同,broadcast是把消息发送给整个network,multicast是把消息发送给a particular group of nodes(a group of processes)

multicast protocol的需求--fault tolerance, scalability

multicast protocao需要具备有fault tolerance(nodes可能会crash,packet可能会丢失)和scalability(nodes进行扩展时不会导致费用的急剧增加)的要求

multicast protocol在网络层中是属于application level的,即它不处理underlying network.但这不是一定的,multicast protocal也常常与underlying network通信(如IP multicast)。

One of the simplest ways of doing multicast--centralized

problems:  1,fault tolerance--当只发送了一部分nodes时,sender这时fail掉了就会出错

2,the overhead on the sender 非常高

3,延时较高,每个node接收到消息的时间是o(N),N为group的大小

为了解决这些problems,我们提出了Tree-based multicast protocols

protocol在nodes建立了一个生成树

这些包括network level protocol:如IP multicast,这儿的生成树是建立在router和switches上的(in the undrlying network)

application level protocol: 如SRM,RMTP,TRAM,TMTP

如果建立的是一棵平衡树,则这棵树的高度是o(logN),则意味着node接收到消息的时间是o(logN)

group里面每个node(sender或者receive)的overhead(消费)是常数(因为children是常数,发送children数量的copies)

problems: 当有node出现错误(如crash掉时),没有接收到information时,需要建立与维护这棵生成tree,这时你需要一些bandwidth和resources去维护这个tree

在初始时可能使用IP multicast, 然后使用ACK或者NAK去修复没有接收到的multicasts

SRM使用NAKs,当node没有接收到并且等待了一会multicast message时,它向上朝root发送a repair request,当这个request被接收到,临近root的node发送它们拥有的latest multicast或者receive node丢失的multicast message.

Issue of SRM: the ACKs and NAKs 可能会implode(内爆),为了避免这个问题,SRM protocol在receiver端使用random delays,当receiver要发送NAKs,它们不是立即发送,而是等一段时间后再发送。如果需要多次发送NAKs时,可能会使用exponential backoff(指数退避),即等待的时间加倍。

RMTP: 使用ACK, receivers 间断性的发送collection of acknowledgements for all multicasts they received so far.如果有acknowledgement没有接收到的话,则会向下朝receivers发送消息。

也有可能会发生ACK storms,为了避免ACK storms,有一些特定的标记为designated receivers,ACK只会发送给这些designated receivers,然后这些designated receivers再向下发送它收到的multicast message

但是这些protocols还是会引起O(N)的ACK/NAK的消费,所以这些protocols应用的规模并不是可以任意的扩展,所以我们引入了Gossip/Epidemic ptotocol

云计算(9)--Gossip:multicast problem的更多相关文章

  1. 云计算之KVM安装(二)

    云计算之KVM安装(二) 调整虚拟机 虚拟化Intel使用的是intel VT-X AMD使用的是AMD-V 创建虚拟机步骤 1.准备虚拟机硬盘 2.需要系统iso镜像 3.需要安装一个vnc的客户端 ...

  2. ZeroMQ:云计算时代最好的通讯库

    还在学socket编程吗?还在研究为什么epoll比select更好吗? 噢,不必了! 在复杂的云计算环境中,我们面临的难题远比这个复杂得多. 庞大的服务器集群作为计算云,对来来看或许只是一个简单的搜 ...

  3. 【openstack N版】——走进云计算

    一.云计算 云计算是一种按使用量付费的模式,这种模式提供可用的.便捷的.按需的网络访问,进入可配置的计算资源共享池(资源包括:网络.服务器.存储.应用软件.服务),这些资源能够被快速提供,只需投入很少 ...

  4. A Graph Partitioning Game Theoretical Approach for the VNF Service Chaining Problem

    文章名称:A Graph Partitioning Game Theoretical Approach for the VNF Service Chaining Problem 发表时间:2017 期 ...

  5. 云计算概述和KVM虚拟化

    前言: 近些年一直听着 虚拟化.云计算.公有云.私有云.混合云这些个概念,一直想着....这些概念要用什么技术实现? 一.云计算的概念 1.传统IDC机房面都会临什么问题? 任何新事物都是由需求催生的 ...

  6. 云计算虚拟机技术-KVM安装

    云计算虚拟机技术-KVM安装 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 身为运维的小伙伴估计大家都清楚KVM,因为在CentOS里面KVM还算很折腾的一个软件,早期CentOS ...

  7. 【协议】5、gossip 协议

    Gossip是一种去中心化.容错并保证最终一致性的协议. Background:分布式环境 Gossip是为了解决分布式遇到的问题而设计的.由于服务和数据分布在不同的机器上,节点之间的每次交互都伴随着 ...

  8. 云计算概述及Centos7下安装kvm虚拟机

    云计算(cloud computing)是基于互联网的相关服务的增加.使用和交付模式,通常涉及通过互联网来提供动态易扩展且经常是虚拟化的资源 云计算到底是什么? 按定义:云计算指的是一种使用模式,是基 ...

  9. 云计算设计模式(二十一)——Sharding分片模式

    云计算设计模式(二十一)——Sharding分片模式 将一个数据存储到一组水平分区或碎片.存储和访问大量数据时,这个模式可以提高可扩展性. 背景和问题 由一个单一的服务器托管的数据存储区可能会受到以下 ...

随机推荐

  1. 热修复干货| AndFix热补丁动态修复框架使用教程

    本篇文章会与大家一起学习使用阿里的AndFix热修复框架,可以说AndFix是国内热修复技术的开山始祖,尽管现在阿里已经放弃了对这个项目的维护,但是后来很多的热修复技术都借鉴了这一框架的实现思路. 1 ...

  2. ucore 源码剖析

    lab1 源码剖析 从实模式到保护模式 初始化ds,es和ss等段寄存器为0 使能A20门,其中seta20.1写数据到0x64端口,表示要写数据给8042芯片的Output Port;seta20. ...

  3. HTTP权威指南-URL与资源

    URL与资源 URL是URI的子集 方案(http),主机(www.baidu.com),路径(/home/logo.png) 方案,其实有很多,HTTP.HTTPS.FTP,SMTP等等. http ...

  4. 使用RestTemplate进行服务调用的几种方式

    首先我们在名为MSG的服务中定义一个简单的方法 @RestController public class ServerController { @GetMapping("/msg" ...

  5. C++_对象数组与对象指针

    对象数组与对象指针 1. 对象数组 所谓对象数组是指每一数组元素都是对象的数组, 也就是说,若一个类有若干个对象,则把这一系列的对象用一个数组来存放. 对象数组的元素是对象, 不仅具有数据成员,而且还 ...

  6. svn钩子(hooks)

    目录 钩子脚本的具体写法就是操作系统中shell脚本程序的写法,请根据自己SVN所在的操作系统和shell程序进行相应的写作 所谓钩子就是与一些版本库事件触发的程序,例如新修订版本的创建,或是未版本化 ...

  7. Scala 算法案例

    移除第一个负数之后的所有负数 // 构建数组 val a = ArrayBuffer[Int]() a += (1, 2, 3, 4, 5, -1, -3, -5, -9) // 每发现一个第一个负数 ...

  8. manacher 算法(最长回文串)

    manacher算法: 定义数组p[i]表示以i为中心的(包含i这个字符)回文串半径长 将字符串s从前扫到后for(int i=0;i<strlen(s);++i)来计算p[i],则最大的p[i ...

  9. javascript 之 call,apply原理

    一.call原理 1.使用JQuery的call功能 var add(c,d){ return this.a+this.b+c+d } var obj={a:1,b:2} add.Call(obj,3 ...

  10. NRF52832 Mesh SDK 调试记录

    1.Mesh SDK模型,Node节点在重启之后,心跳不能正常保持,即无法在次启动心跳的解决办法: 原因:主要是因为相关模型没有从Flash里面读取所致,因此只需要回复保存配置即可. 关键代码如下: ...