分布式系统互斥的Lamport算法
先决条件:分布式系统中的互斥
Lamport 的 Distributed Mutual Exclusion Algorithm是 Lamport 提出的一种基于许可的算法,用于说明他的分布式系统同步方案。
基于权限的时间戳用于对关键部分请求进行排序并解决请求之间的任何冲突。
在Lamport 的算法中,临界区请求按时间戳的递增顺序执行,即具有较小时间戳的请求将比具有较大时间戳的请求首先获得执行临界区的许可。
在这个算法中:
- 使用了三种类型的消息( REQUEST 、 REPLY和RELEASE ),并且假定通信通道遵循 FIFO 顺序。
- 一个站点向所有其他站点发送 REQUEST消息以获得他们进入临界区的许可。
- 站点向请求站点发送 REPLY消息以授予其进入临界区的权限。
- 站点在退出临界区时向所有其他站点发送RELEASE 消息。
- 每个站点 S i 都保持一个队列来存储按时间戳排序的临界区请求。
request_queue i表示站点 S i 的队列 - 使用 Lamport 的逻辑时钟为每个关键部分请求提供时间戳。
- 时间戳用于确定临界区请求的优先级。较小的时间戳比较大的时间戳具有更高的优先级。临界区请求的执行总是按照它们的时间戳顺序执行。
算法:
- 进入临界区:
- 当站点 S i想要进入临界区时,它会向所有其他站点发送请求消息 Request(ts i , i)并将请求置于 request_queue i 上。这里,Ts i表示站点 S i 的时间戳
- 当一个站点的Sj接收到该请求消息请求(TS I,I)从站点S I,它返回一个时间戳REPLY消息到站点S i和位点的请求的I上request_queueĴ
.
- 执行临界区:
- 如果站点 S i从所有其他站点收到时间戳大于 (ts i , i)的消息,并且其自身的请求位于request_queue i的顶部,则该站点 S i 可以进入临界区
- 释放临界区:
- 当站点 S i退出临界区时,它会从其请求队列的顶部移除自己的请求,并向所有其他站点发送带有时间戳的 RELEASE 消息
- 当一个站点的Sj接收来自站点S i中的时间戳的RELEASE消息,它消除S I的请求,从它的请求队列
消息复杂度:
Lamport 的算法需要在每次临界区执行时调用 3(N – 1) 条消息。这 3(N – 1) 条消息涉及
- (N – 1) 条请求消息
- (N – 1) 条回复消息
- (N – 1) 条发布消息
Lamport 算法的缺点:
- 不可靠的方法:任何一个过程的失败都会停止整个系统的进程。
- 消息复杂度高:算法需要每个临界区调用 3(N-1) 条消息。
表现:
- 同步延迟等于最大消息传输时间
- 每次 CS 执行需要 3(N – 1) 条消息。
- 在某些情况下,可以通过省略 REPLY消息将算法优化为 2(N – 1) 条消息。