互斥资源指的是那种一次只可以一个系统访问的资源。

集中式算法

该算法需要借助于一个第三方软件,或者说一个数据中心,每当有系统需要访问互斥资源时,需要先该数据中心发送请求,看是否其他的系统请求该资源。然后数据中心给系统返回是否可以访问该资源,如果同意,则系统访问互斥资源。

存在的问题:数据中心容易成为瓶颈,所有的系统都要请求数据中心,如果数据中心出现阻塞或者不可用,则有可能导致整个系统不可用。

民主协商:分布式算法

在该算法下,如果要访问互斥资源,则采用互相通信的形式,比如说现在有A,B,C,D四个系统,其中A想要访问某资源,它会向B,C,D三个系统发送请求,询问是否有人需要使用该资源。如果没有,则A访问该资源。假如D此时也想要访问该资源,则A,B,C会收到请求,而B,C即收到了A的请求,也受到了D的请求,由于A先到,所以会优先允许A访问资源。

而不同系统的请求会被放入一个队列当中,依次允许访问共享资源。

缺点:如果系统特别多,则访问一次资源所要发送的广播信息会消耗大量的资源,导致一定的浪费。而且部分节点可能不可用,导致一直处于等待,该问题的解决办法是忽略下线了的节点。

轮值 CEO:令牌环算法

该算法是产生一个令牌,令牌依次传递给每一个系统,拿到该令牌的系统,如果有访问共享资源的需求,则它可以访问共享资源,否则无法访问共享资源。

缺点:降低了系统的实时性。比如说有100个系统,系统1访问完共享资源后,其他99个系统无需访问共享资源,但令牌仍然需要转一圈才能到达系统1这里。而且令牌的传递需要忽略已经下线了的节点。

参考

《分布式技术原理与算法解析》