在分布式系统里,这种排他性的资源访问方式,叫作分布式互斥(Distributed Mutual Exclusion),而这种被互斥访问的共享资源就叫作临界资源(Critical Resource)。
那么如何在分布式系统里实现互斥地访问临界资源呢?
集中式算法
引入一个协调者程序,得到一个分布式互斥算法。
每个程序在需要访问临界资源时,先给协调者发送一个请求。如果当前没有程序使用这个资源,协调者直接授权请求程序访问;否则,按照先来后到的顺序为请求程序“排一个号”。如果有程序使用完资源,则通知协调者,协调者从“排号”的队列里取出排在最前面的请求,并给它发送授权消息。拿到授权消息的程序,可以直接去访问临界资源。
缺陷:
- 协调者会成为系统的性能瓶颈。
- 容易引发单点故障问题。
分布式算法
当一个程序要访问临界资源时,先向系统中的其他程序发送一条请求消息,在接收到所有程序返回的同意消息后,才可以访问临界资源。其中,请求消息需要包含所请求的资源、请求者的 ID,以及发起请求的时间。 在分布式领域中,我们称之为分布式算法,或者使用组播和逻辑时钟的算法。
令牌环算法
所有程序构成一个环结构,令牌按照顺时针(或逆时针)方向在程序之间传递,收到令牌的程序有权访问临界资源,访问完成后将令牌传送到下一个程序;若该程序不需要访问临界资源,则直接把令牌传送给下一个程序。
在分布式领域,这个算法叫作令牌环算法,也可以叫作基于环的算法。
笔记抄自:《分布式技术原理与算法解析》