分布式process总结之一:Multicast,Membership,Election

分布式process 意味着

1)独立,每个process是独立的

2)没有单机系统里OS那样共同的平台作为协调者,每个process能做的只能是彼此通过channel发消息。


从一个分布式系统面临的一般问题:

1 Multicast 问题

central : hot spot,SPoF, unreliable

span tree based: 需要维护树, 一个中间节点fail了,影响很多末梢节点

gossip:reliability 和scalability 都不错

发消息的节点定时选择b个(typically 2)节点进行gossip,可以用udp发,因为有很多重复。收到消息的节点(被infect)也同样这么做。

reliability:有很多重复;scalability:负载均等,没有hotspot


2 membership 问题(主要是Failure Detector):member 会join, leave, fail,每个non faulty 节点(process)需要知道这个最新的list。

1)Failure Detector Component

2)Disseminate Component

基于heartbeat 的 FD:

centralized heartbeat: 大家都往一个master process 发heartbeat。hotspot, SPoF问题

ring-based heartbeat: 组成一个环,每个process给下一个或者上一个或者两边发heartbeat。问题:多个process 同时fail了不好预测

all to all heartbeat: 每个process给所有其他process发heartbeat。优点:负载均衡。缺点:当一个process的网络比较慢,有可能把所有其他process标记为fail,accuracy不够好

gossip-based heartbeat :可以看作是all-to-all的一种改良

1) 每个 process periodically gossip 它的membership list (pid, seq, local time)

2) 收到消息的,对照更新自己的membership list, 谁的seq更新

completeness和 accuracy 在一个异步系统不能同时达到,prefer completeness over accuracy


SWIM:  ping-based FD

1) 时间划分成一个一个protocol period 

2)每一个process Pi, randomly 选择一个 process Pj去ping,如果有ack,fine,等下一个周期。如果没有,randomly 选择 k个process, 间接的ping Pj,如果在协议周期内收到任何一个间接ack, fine. 否则认定 Pj 为fail。SWIM天生带suspicion 机制


因为FD理论上是有错判的,可以加一个suspicion机制,即发现一个process有问题,不是立即标记为fail而是有一个suspicion状态,进一步的判断决定是fail还是返回alive状态。

dissemination Component:

一般用Failure Detect 的消息进行数据捎带


3 Election 问题

Problem statement: In a group of processes, elect a Leader to undertake special tasks

确保两点:1)选出来的process是non-faulty的。 2)所有的non-faulty process agree on it

1) election的发起

any process 可以发起,typically a process who detects current master failed.

多个process可以同时发起

2)process with best election attribute should be selected:e.g. 最大id

ring-base election

组成一个环,发起者发起一个Election 消息,Election (pi, election attribute);收到Election消息的,和自己的election attribute比较,如果好于自己的,forward原消息,否则用自己的(pid, attribute)代替原消息;如果发现收到的Election消息的pid是自己,说明自己当选,停止转发 Election消息,同时发一个当选消息Elected(pid),然后大家更新自己的 elected字段,当这个Elected消息转了一圈回到自己,结束传递。

bully 算法:

发现current Coordinator fail的 process, 发起election, 如果发现自己的id最大,自己当选,发送Coordinator消息给比自己id低的process. 否则给比自己id大的process发 Election消息,如果没人reply,自己当选。如果有人reply,等待Coordinator消息,如果一定时间没收到Coordinator消息,则自己当选。

收到Election消息的process,reply一个OK,然后 发起同样的election过程:向id比自己大的process发election消息。


4 Mutual exclusion 问题


5 Concurrent 问题


6 Replication 问题


7 schedule 问题


8 ordering 问题

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值