其他分享
首页 > 其他分享> > 分布式系统(四) 组播 Multicast

分布式系统(四) 组播 Multicast

作者:互联网

Multicast 组播

通信模式

Unicast

一个进程向另一个进程发送消息
尽力而为:如果信息传送,就没有被破坏
可靠的:保证信息能传送
有序:信息传送(deliver)的顺序与发送的顺序一致

Broadcast

一个进程向所有进程发消息

Multicast

一组进程内,一个进程向其他进程发消息。

Deliver(m):传递由组播发送的消息到调用进程 到应用层
Receive(m
):只是接收到消息
在这里插入图片描述

基本组播(Basic Multicast)

用可靠的unicast 操作:

B-multicast(group g,message m):对每个在组G内的每个进程p,send(p,m)
进程receive(m)的时候:进程p执行B-deliver(m)

如果
(1)组播进程不出错
(2)Unicast 是可靠的
(3)发送方不崩溃
我们认为信息可以最终传送到组内

可靠组播(Reliable Multicast)

可靠组播满足以下三个性质

完整性 Integrity

一个正确的进程只传递(deliver)同样的信息最多一次。

有效性 Validity

如果一个正确(correct)的进程组播消息m,它最终自己也将传递m
Liveness for sender

协定 Agreement

如果一个正确(correct)的进程传递消息m,其他正确的进程终将传递m
(要么所有都能传递到,要么所有都传不了)

有效性和协定保障了整体的活性(overall liveness):如果一些正确的进程组播了信息m,那所有正确进程都会传递信息m。

例子
如果一个进程B-multicast到一半崩溃了,其他一半进程deliver了m,另一半没有。就破坏了协定(Agreement)

实现R-multicast

用到一个B-Multicast在进程中
在这里插入图片描述
初始化
已收到的是一个空集
在这里插入图片描述
进程p需要R-multicast 到整个组g
在这里插入图片描述
当B-deliver(m)基本传递到进程q,g=group(m)哪组传的消息
在m不在收到的组的情况下,就把他添加进去(因为大家都在传,就防止收到重复的信息)
在这里插入图片描述

如果q不是组播信息的进程。他就自己也组播这个信息
在这里插入图片描述

最后有效传递M(如果是重复的消息就不能有效传递到应用层)
在这里插入图片描述
比较低效,因为每个消息被发送到每个进程会有|g|次。但是满足协定。
有效性是因为他自己组播消息也会收到消息。
完整性是因为每个消息只会有效传递一次

有序组播 Ordered Multicast

1.FIFO ordering
2.Casual ordering
3.Total ordering

FIFO 排序

如果一个正确的进程发出multicast(g,m),然后发出multicast(g,m’),那么每个正确进程会在传递m’传递m

但是如果是不同的发送方的组播可以不管。
在这里插入图片描述

因果排序(Causal Order)

组播中发送事件有因果关系,那么他们传递这些事件也是相同的因果关系。

如果Multicast(g,m)->multicast(g,m’) ,->表明g的成员之间发送的消息引起的发生在先关系,那额传递肯定是m’在m之后

在这里插入图片描述

因果排序 VS FIFO

Causal Ordering => FIFO Ordering
如果一个组播协议实施因果排序,那他肯定也是FIFO ordering
相反FIFO不能证明有因果排序

例子:
下图是FIFO排序,对比从同一个process出发的红绿两条线是按顺序到达的
在这里插入图片描述
但是下图不是因果排序。组播M1应该在M3之前到达P2。
在这里插入图片描述如果M1:1到达P3在M3:1之后,这个就是satisfy casual order。

全排序 Total Order

保证所有进程以同样的顺序传递所有的组播。
全排序并不关心组播发送的顺序。
如果一个正确的进程在传递M之前传递M’,那么其他的进程也在传递M之前传递M’。
例子
在这里插入图片描述
在所有进程中,传递顺序都是M1:1,M2:1,M3:1,M3:2

因果排序vs全排序

全排序不能保证因果
因果也不能保证全排序

例子:
以下是满足因果排序的
在这里插入图片描述
但是下图不满足全排序,在圈出来的两个地方的两个信息传递的顺序不一样。
在这里插入图片描述

混合排序组播

Causal-total hybrid协议满足因果和全排序

实现排序组播

实现FIFO order

在这里插入图片描述每一个进程都维护一个数组。比如进程1 P1[2]记录着最后从P2收到的最后的序列数。

组播时,将自己序列号Pj[j]自动加一
将序列号和信息一起组播出去

在这里插入图片描述
在传递信息时,如果进程i收到进程j的组播,序列号是S。如果序列号S等于当前序列号加一,那么就可以直接传递给应用层
否则先存储在buffer中,直到收到想要的序列
在这里插入图片描述例子:
当从一个进程出发的信息没有按顺序传递,就先缓存
在这里插入图片描述收到按顺序的,再更新
在这里插入图片描述
一个值得注意的是,P3发送[2,0,1,0]P4收到的时候更新[1,0,1,0]然后从P1收到才更新为[2,0,1,0]
在这里插入图片描述

实现全排序

在不同的进程中用相同的序列号计数。
两种方法:
1.Using a centralized sequencer
2.A decentralized mechanism(ISIS)

Sequencer based total ordering

选一个进程作为leader或者作为sequencer。
这个顺序者会维护一个序列号S
S初始化为0,如果传递一条组播信息m,S++,然后组播信息m和S
在这里插入图片描述全排序组播就是把信息发给全组和顺序者
在这里插入图片描述如果一个进程收到组播
Pi维护一个本地收到的序列号Si
只有以下三个条件满足才能传递m
1.收到了从顺序者传过来的m的顺序
2.这个顺序 S=Si+1
然后传递给应用层,并Si++
在这里插入图片描述

ISIS

基本原理:收到消息后先发回建议序号给发送者,发送者再根据这些序列号来产生一个协定的序号。
在这里插入图片描述
发送者组播:
在这里插入图片描述

收到组播的进程:
1.回复一个建议序列号
(1)大于观测到的协议序列
(2)大于之前自己建议过的序列号
2.将信息存储在优先队列中
(1)用序列号排序
3.记录信息是未传递
在这里插入图片描述
发送者会选择一个协定的序列号,这个序列号会是发送者收到所有建议序列号中最大的。然后把协定序列号附在信息上,再次组播
在这里插入图片描述
收到第二次组播之后,把信息的序列号改成协定序列号。然后重新在等待序列里排序。并把信息标为“deliverable”,然后传递在优先队列队首的可传递信息。
在这里插入图片描述
有重复的问题,排序就很麻烦,这个时候写成 进程和序号
在这里插入图片描述

在这里插入图片描述
建议序号:必须高于这个进程中所有的建议序号和他所收到的协定序号
协定序号:顺序者收到的所有建议序号的最大值

证明ISIS能保证全排序

假设有两个信息一个m1,一个m2,两个进程p1 p2。
p1在m1之前传递m2
当p传递m1的时候,m1肯定是位于等待队列的头部,
那么m2有以下三种可能 :
1.m2已经在p的队列中,并且是可传送的
可以认为finalpriority(m1)<finalpriority(m2)
2.m2在p的队列中,但是还不是可传递的
finalpriority(m1)<proposedpriority(m2)<=finalpriority(m2)
3.还不在p的队列中 说明还没有接收
finalpriority(m1)<proposedpriority(m2)<=finalpriority(m2)

所以任何一种情况都不可能
finalpriority(m1)>finalpriority(m2)

实施因果排序

和FIFO 组播类似
每个进程Pi都维护一个数组 Pi[1…N]
Pi[j]是Pi从Pj收到的最后的序列号

因果组播,先把自己的序列号加一,再将其附上信息进行基本组播
在这里插入图片描述接收到了基本传递(B-deliver)({m,V[1…N]}),存储这个信息,直到满足以下条件:
1.这个信息是从Pj发送给Pi的下一个
V[j]=Pi[j]+1
2.所有发生在m之前的其他组播都在Pi收到了
V[k]<=Pi[k] k!=j

如果以上两种情况满足
那么就可以传递m
以及设置Pi[j]=V[j]

例子:
在m之前的一些组播没有收到,因此需要buffered
在这里插入图片描述

树状组播和Gossip

B-multicast 用 unicast sends的话
会有冗余的包裹
在这里插入图片描述
所以如何解决消息冗余的问题?

树状组播

只将消息发送给子集的进程
在这里插入图片描述
在这里插入图片描述
或者也可以将路由器也包括进去,这样又能少发送一些
IP组播
在这里插入图片描述

但是如果任何一个节点崩溃?

Gossip

随机传送消息给b个节点,然后其他节点收到这个消息后也随机传送消息给b个节点
在这里插入图片描述
对比起之前两种方法,不需要构建树,比起unicast更加有效率

组播总结

类型

1.基本 Basic
2.可靠的 Reliable
3.顺序:FIFO,Causal,Total
4.以上所有的组合

传送信息的机制

1.unicast
2.树状和gossip
3.Gossip:更加的scalable 并且 可以处理失败

标签:收到,组播,传递,Multicast,分布式系统,进程,序列号,排序
来源: https://blog.csdn.net/fragile98/article/details/113880738