分布式互斥
分布式互斥
在分布式系统里,这种排他性的资源访问方式,叫作分布式互斥
集中式算法
我们引入一个协调者程序,得到一个分布式互斥算法。每个程序在需要访问临界资源时,先给协调者发送一个请求。如果当前没有程序使用这个资源,协调者直接授权请求程序访问
这个互斥算法,就是我们所说的集中式算法,也可以叫做中央服务器算法。之所以这么称 呼,是因为协调者代表着集中程序或中央服务器。集中式算法的示意图如下所示

如图所示,程序
从上述流程可以看出,一个程序完成一次临界资源访问,需要如下几个流程和消息交互
- 向协调者发送请求授权信息,
1 次消息交互; - 协调者向程序发放授权信息,
1 次消息交互; - 程序使用完临界资源后,向协调者发送释放授权,
1 次消息交互。
因此,每个程序完成一次临界资源访问,需要进行
- 一方面,协调者会成为系统的性能瓶颈。想象一下,如果有
100 个程序要访问临界资 源,那么协调者要处理100*3=300
条消息。也就是说,协调者处理的消息数量会随着需 要访问临界资源的程序数量线性增加。 - 另一方面,容易引发单点故障问题。协调者故障,会导致所有的程序均无法访问临界资源,导致整个系统不可用。
因此,在使用集中式算法的时候,一定要选择性能好、可靠性高的服务器来运行协调者。集中式算法具有简单、易于实现的特点,但可用性、性能易受协调者影响。在可 靠性和性能有一定保障的情况下,比如中央服务器计算能力强、性能高、故障率低,或者中 央服务器进行了主备备份,主故障后备可以立马升为主,且数据可恢复的情况下,集中式算 法可以适用于比较广泛的应用场景。
分布式算法
当一个程序要访问临界资源时,先向系统中的 其他程序发送一条请求消息,在接收到所有程序返回的同意消息后,才可以访问临界资源。其中,请求消息需要包含所请求的资源、请求者的

如图所示,此时程序

如图所示,程序

从上述流程可以看出,一个程序完成一次临界资源的访问,需要进行如下的信息交互
- 向其他
n-1 个程序发送访问临界资源的请求,总共需要n-1 次消息交互; - 需要接收到其他
n-1 个程序回复的同意消息,方可访问资源,总共需要n-1 次消息交互。
可以看出,一个程序要成功访问临界资源,至少需要 2*(n-1)
次消息交互。假设,现在系统 中的
- 当系统内需要访问临界资源的程序增多时,容易产生“信令风暴”,也就是程序收到的请求完全超过了自己的处理能力,而导致自己正常的业务无法开展。
- 一旦某一程序发生故障,无法发送同意消息,那么其他程序均处在等待回复的状态中,使得整个系统处于停滞状态,导致整个系统不可用。所以,相对于集中式算法的协调者故障,分布式算法的可用性更低。
针对可用性低的一种改进办法是,如果检测到一个程序故障,则直接忽略这个程序,无需再 等待它的同意消息。因此,分布式算法适合节点数目少且变动不频繁的系统,且由于每个程序均需通信交互,因 此适合
如下图所示,处于同一个局域网内的计算机
- 计算机
1 向计算机2 、3 发送文件修改请求; - 计算机
2 、3 发现自己不需要使用资源,因此同意计算机1 的请求; - 计算机
1 收到其他所有计算机的同意消息后,开始修改该文件; - 计算机
1 修改完成后,向计算机2 、3 发送文件修改完成的消息,并发送修改后的文件数据; - 计算机
2 和3 收到计算机1 的新文件数据后,更新本地的备份文件。

分布式算法是一个“先到先得”和“投票全票通过”的公平访问机制,但通信成 本较高,可用性也比集中式算法低,适用于临界资源使用频度较低,且系统规模较小的场 景。
令牌环算法
如下图所示,所有程序构 成一个环结构,令牌按照顺时针

因为在使用临界资源前,不需要像分布式算法那样挨个征求其他程序的意见了,所以相对而言,在令牌环算法里单个程序具有更高的通信效率。同时,在一个周期内,每个程序都能访问到临界资源,因此令牌环算法的公平性很好。但是,不管环中的程序是否想要访问资源,都需要接收并传递令牌,所以也会带来一些无效 通信。假设系统中有
综上,令牌环算法非常适合通信模式为令牌环方式的分布式系统,例如移动自组织网络系统。一个典型的应用场景就是无人机通信。无人机在通信时,工作原理类似于对讲机,同一时刻只能发送信息或接收信息。因此,通信中的上行链路
所有的无人机轮流通信并传输数据,从而消除了多个无人机对通信资源的争夺,使得每个无人机都能接收到其他无人机的信息,降低了通信碰撞导致的丢包率,保证了网络通信的稳定性,提高了多个无人机之间的协作效率。

令牌环算法是一种更加公平的算法,通常会与通信令牌结合,从而取得很好的效果。特别是当系统支持广播或组播通信模式时,该算法更加高效、可行。对于集中式和分布式算法都存在的单点故障问题,在令牌环中,若某一个程序
令牌环算法的公平性高,在改进单点故障后,稳定性也很高,适用于系统规模较 小,并且系统中每个程序使用临界资源的频率高且使用时间比较短的场景。
两层结构的分布式令牌环算法
由于大规模系统的复杂性,我们很自然地想到要用一个相对复杂的互斥算法。时下有一个很 流行的互斥算法,两层结构的分布式令牌环算法,把整个广域网系统中的节点组织成两层结 构,可以用于节点数量较多的系统,或者是广域网系统。我们知道,广域网由多个局域网组成,因此在该算法中,局域网是较低的层次,广域网是较 高的层次。每个局域网中包含若干个局部进程和一个协调进程。局部进程在逻辑上组成一个 环形结构,在每个环形结构上有一个局部令牌