📜  分布式系统中互斥的 Maekawa 算法

📅  最后修改于: 2022-05-13 01:56:11.264000             🧑  作者: Mango

分布式系统中互斥的 Maekawa 算法

先决条件——分布式系统中的互斥
Maekawa 的算法是基于群体的方法,以确保分布式系统中的互斥。众所周知,在基于许可的算法(如 Lamport 算法、Ricart-Agrawala 算法等)中,站点请求每个其他站点的许可,但在基于仲裁的方法中,站点不会请求所有其他站点的许可,而是从站点的子集请求许可称为法定人数

在这个算法中:

  • 使用了三种类型的消息( REQUESTREPLYRELEASE )。
  • 站点向其请求集或仲裁中的所有其他站点发送 REQUEST消息,以获得他们进入临界区的许可。
  • 站点向请求站点发送 REPLY消息以授予其进入临界区的权限。
  • 站点在退出临界区时向其请求集或仲裁中的所有其他站点发送RELEASE 消息。

请求集或Quorum的构建:
Maekawa 算法中的请求集或 Quorum 必须满足以下属性:

  1. ∀i ∀j : i ≠ j, 1 ≤ i, j ≤ N :: Ri ⋂ Rj ≠ ∅ 

    任意两个站点的请求集之间至少有一个公共站点。

  2. ∀i : 1 ≤ i ≤ N :: Si ∊ Ri 
  3. ∀i : 1 ≤ i ≤ N :: |Ri| = K 
  4. 任何站点 S i都包含在恰好 K 个集合中。
  5. 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 条消息。