分布式系统中互斥的 Maekawa 算法
先决条件——分布式系统中的互斥
Maekawa 的算法是基于群体的方法,以确保分布式系统中的互斥。众所周知,在基于许可的算法(如 Lamport 算法、Ricart-Agrawala 算法等)中,站点请求每个其他站点的许可,但在基于仲裁的方法中,站点不会请求所有其他站点的许可,而是从站点的子集请求许可称为法定人数。
在这个算法中:
- 使用了三种类型的消息( REQUEST 、 REPLY和RELEASE )。
- 站点向其请求集或仲裁中的所有其他站点发送 REQUEST消息,以获得他们进入临界区的许可。
- 站点向请求站点发送 REPLY消息以授予其进入临界区的权限。
- 站点在退出临界区时向其请求集或仲裁中的所有其他站点发送RELEASE 消息。
请求集或Quorum的构建:
Maekawa 算法中的请求集或 Quorum 必须满足以下属性:
∀i ∀j : i ≠ j, 1 ≤ i, j ≤ N :: Ri ⋂ Rj ≠ ∅
即任意两个站点的请求集之间至少有一个公共站点。
∀i : 1 ≤ i ≤ N :: Si ∊ Ri
∀i : 1 ≤ i ≤ N :: |Ri| = K
- 任何站点 S i都包含在恰好 K 个集合中。
N = K(K - 1) +1 and |Ri| = √N
算法:
- 进入临界区:
- 当站点 S i想要进入临界区时,它会向请求集 R i中的所有其他站点发送请求消息 REQUEST(i) 。
- 当站点 S j收到来自站点 S i的请求消息REQUEST(i) 时,如果它从收到最后一个RELEASE消息时起还没有向站点发送 REPLY消息,则它向站点 S i返回一个REPLY消息。否则,它将请求排队。
.
- 执行临界区:
- 如果站点 S i收到来自请求集R i 中所有站点的 REPLY消息,则该站点 S i 可以进入临界区
- 释放临界区:
- 当站点 S i退出临界区时,它向请求集 R i 中的所有其他站点发送 RELEASE(i) 消息
- 当站点 S j收到来自站点 S i的 RELEASE(i)消息时,它向队列中等待的下一个站点发送 REPLY消息并从队列中删除该条目
- 如果队列为空,站点 S j更新其状态以显示自收到最后一个RELEASE消息以来它没有发送任何 REPLY 消息
消息复杂度:
Maekawa 的算法要求每次执行临界区调用 3√N 条消息,因为请求集的大小为 √N。这 3√N 个消息涉及。
- √N个请求消息
- √N条回复消息
- √N个发布消息
Maekawa 算法的缺点:
- 这种算法很容易死锁,因为一个站点被其他站点排他性地锁定,并且请求没有按其时间戳划分优先级。
表现:
- 同步延迟等于消息传播延迟时间的两倍
- 每个临界区执行需要 3√n 条消息。