分布式系统互斥中的 Ricart-Agrawala 算法
先决条件:分布式系统中的互斥
Ricart-Agrawala 算法是 Glenn Ricart 和 Ashok Agrawala 提出的分布式系统中的互斥算法。该算法是Lamport分布式互斥算法的扩展和优化。与 Lamport 算法一样,它也遵循基于许可的方法来确保互斥。
在这个算法中:
- 使用两种类型的消息( REQUEST和REPLY ),并且假定通信通道遵循 FIFO 顺序。
- 一个站点向所有其他站点发送 REQUEST消息以获得他们进入临界区的许可。
- 一个站点向其他站点发送 REPLY消息以允许其进入临界区。
- 使用 Lamport 的逻辑时钟为每个关键部分请求提供时间戳。
- 时间戳用于确定临界区请求的优先级。较小的时间戳比较大的时间戳具有更高的优先级。临界区请求的执行总是按照它们的时间戳顺序执行。
算法:
- 进入临界区:
- 当站点 S i想要进入临界区时,它会向所有其他站点发送带时间戳的 REQUEST 消息。
- 当一个站点的Sj接收来自站点S I的请求消息,它发送一个应答信息,站点S I当且仅当
- 站点 S j既不请求也不当前执行临界区。
- 如果站点 S j正在请求,则站点 S i的请求的时间戳小于其自己的请求。
否则请求会被站点 S j推迟。
- 执行临界区:
- 如果站点 S i已收到来自所有其他站点的 REPLY消息,则它进入临界区。
- 释放临界区:
- 在退出站点 S 时,我向所有延迟请求发送 REPLY 消息。
消息复杂度:
Ricart–Agrawala 算法需要在每个临界区执行中调用 2(N – 1) 条消息。这 2(N – 1) 条消息涉及
- (N – 1) 条请求消息
- (N – 1) 条回复消息
Ricart-Agrawala 算法的缺点:
- 不可靠的方法:系统中任何一个节点的故障都可以停止系统的进程。在这种情况下,该过程将永远处于饥饿状态。
节点故障的问题可以通过在一定的超时后检测故障来解决。
表现:
- 同步延迟等于最大消息传输时间
- 每个临界区执行需要 2(N – 1) 条消息