网工干货知识

超全学习笔记
当前位置:首页 > 干货知识

分布式系统中的波与传输算法

更新时间:2026年03月27日   作者:spoto   标签(Tag):

众所周知,分布式系统是一种由多个进程组成的系统,这些进程为了完成某项任务而相互之间进行通信。在Wave算法中,消息的交换以及决策的制定都取决于每个进程中发生的事件所涉及的消息数量。由于需要在连接的网络中进行通信,因此Wave算法在许多领域都有应用。分布式数据库无线网络等。

符号/表示法

  • 在过程中进行的计算,用符号 ICI 来表示。
  • 在计算过程中,过程(p)的任何子集都可以表示为C。p.
  • 所有过程的集合被表示为P’。
  • E.所拥有的频道列表。
  • 该进程开始运行的节点被称为“启动器”或“起始点”。
  • 在网络中,任何不是发起者的节点都被称为“跟随者”。
  • “发起者所做的事情,就是发送一个事件。”
  • 非发起者所引发的事件已经发生了。

波状算法

这些消息传递机制被称为“波式算法”,因为它们采用异步消息传递方式,不需要全局时钟或时间同步机制。

波状算法会交换有限数量的信息,然后根据每个过程中发生的某个事件来做出决策。

满足这三个要求的算法,被视作分布式算法中的“波状算法”。

  • 终止/结束:每一次计算都是有限的。
    • ∀C : lC| < ∞
  • 决定:每次计算过程中,至少会有一个决策步骤。
    • ∀C: 存在至少一个元素 e,属于集合 C,且 e 是一个决定性的事件。
  • 依赖性:在每次计算中,每一个被决定的事件之前,都会有一个与该事件相关的事件发生。
    • ∀C: 对于C中的每一个元素e来说,如果e是一个可决定的事件,那么对于P’中的每一个元素q,都存在一个属于C中的元素f,使得q可以被f所决定。qf ≥ e)。

波算法从一个特定的节点开始,然后该波会传播到其相邻的节点,而相邻的节点又会继续将其波传播到更远的节点。当没有更多的节点需要接收这个波时,波就会停止传播。

Wave算法的优势在于其异步通信机制,在这种机制下,随机事件与消息之间的关联具有等价性。在Wave算法中,消息链的存在对于计算因果关系来说是必要的。不同版本的Wave算法可以在以下特性方面有所不同:

  • 中央集权:如果算法中有且仅有一个发起者,那么这些算法的性质就会有所不同。
    • 如果一个算法在每次计算过程中都恰好只有一个发起者,那么这种算法被称为集中式算法。
    • 如果这种算法能够由那些被称为“去中心化”的进程的任意子集来自动启动的话,那么就可以实现该算法了。
  • 初步了解:如果算法在处理的过程中拥有初始信息的话,那么这些算法之间就会有所不同。
    • 每个进程都有其独特的名称。
    • 邻居身份:每个进程都知道其邻居的姓名。
  • 复杂性:该算法的复杂性需要考虑各种因素。
    • 交换的消息数量
    • 交换的位数,
    • 进行一次计算所需的时间。
  • 拓扑学可以针对特定的拓扑结构来设计算法,比如环型结构、树状结构、团结构等。
  • 决策的数量通常情况下,每个流程都会做出一个决策。在某些算法中,可能只有某个流程会执行决策操作;而在另一些算法中,则所有流程都会参与决策过程。而树形算法则会在恰好两个流程中做出决策。

波的特性:

  • 在每次计算过程中,都会有一个由发起者发起的事件发生。
  • 这是一种适用于任意网络的波束成形算法,无需事先知道邻居节点的身份信息。该算法在每次计算中至少会交换 lEI 条消息。

由于数据包的传播是通过节点网络来完成的,因此我们可以将其视为一种部分序关系。

现在,让我们考虑一个二元关系≤。*由 x ≤ 得出*y ⇐⇒ (x * y) = x。也就是说,在关系≤*中,X上存在着偏序关系。这意味着该关系是传递的、反对称的,并且是自反的。

  • 传递性我们知道,如果x≤y且y≤z,那么x≤z。现在假设x≤。*y 且 y ≤*根据≤的定义,z;*(x * y) = x,且 (y * z) = y。根据这些性质以及结合律,我们可以得到:(x * z) = (x * y) * z = x * (y * z) = x * y = x。也就是说,x ≤* z.
  • 反对称性假设 x ≤*y 且 y ≤*x;根据≤的定义*x * y = x,且 y * x = y。利用这些性质以及交换律,我们可以得出 x = y。
  • 反射性x * x = x,即 x ≤ x。*x的反射性质可以通过幂等性来证明。

由于该算法满足所有三个性质,因此我们可以认为波算法可以被视为一种偏序关系。

不同波算法

  • 环形算法
  • 投票算法
  • 树形算法
  • Echo算法
  • 阶段算法
  • 芬恩的算法

环形算法

用于传播该过程的通道被选择为能够形成哈密顿回路(即遍历了所有的节点)。换句话说,过程p及其相邻状态(Next)就是这样被处理的。p这样的选择方式下,所选出的通道会构成一个哈密顿回路(即所有节点都恰好被遍历一次)。

  • 它只有一个启动器。
  • 每个节点都会将消息继续传递给下一个节点。
  • Ring算法是一种集中式算法。
  • 发起者就是那个具有决定权的节点。
对于发起者来说…
开始
发送(tok)到下一个步骤/环节p;
接收(令牌);
决定;
结束
非启动器专用的Ring算法
开始
接收(令牌)
将“tok”发送到Nextp。
结束

投票算法

该算法会发送一个信号,这个信号会传播到所有节点上,然后再返回给发起信号的节点。当这个信号逐渐消失后,算法就会停止运行。

  • 它运行在一个群集网络上。
  • 它只有一个启动器。
  • 投票算法是集中式的。
  • 发起者就是那个具有决定权的节点。

在投票算法中,发起者会向每个邻居发送消息,然后在所有收到的消息都收到之后再进行决策。

用于Initiator的投票算法
var recp整数初始化为0;
开始
对于所有的q值来说,都是如此。p
请将其发送到 qf 那里。
而rec则不同。p<# 嘶嘶声/低吼声 >p do
开始
接收(tok);
记录/保存p:= 递归p +1;
结束
决定/选择
结束
// 这里,recp被用作计数变量。
非启动器节点的轮询算法
开始
从qf那里接收(tok)。
将“tok”发送到“q”。
结束

在星型网络中,也可以使用轮询方式来进行通信。在这种情况下,发起者就位于网络的中心位置。

注意:该算法被用于所有基本任务,即广播、同步以及计算全局函数。

树形算法

该算法的特点如下:

  • 适用于树状网络以及任意网络的非集中式波算法,前提是存在一棵生成树。
  • 如果某个进程已经通过除一个之外的所有事件通道接收到了消息,那么该进程就会通过剩下的那个通道来发送消息。
  • 可能有多个过程来做出决定。
  • 这种树状算法会精确地在两个进程中做出决策。
树形算法:
对于每个 q,布尔值 rec{q} 属于 Neigh 类。
从“Begin”开始,而不是从{q: rec}开始。p{q} 是假的,所以结果大于1。
开始从q处接收<tok>:recp[q] = 真
结束
将 <tok> 发送到 q0
从q处接收<tok>0
Recp [q0] = true 表示“是”/“确定”
对于所有的q值,将<tok>发送给q。
结束

示例:

在所示的树状网络中,有两条进程通过各自的通道接收消息并做出决策。其余的进程则仍在等待消息的发送,此时它们的程序计数器指向终端配置中的“x”位置。

树形算法

我们得到如下结果:rec1(12) = True;rec5(6) = True;rec3(4) = True;rec9(7) = True;rec9(8) = True;rec10(12) = True;rec11(12) = True。

因为节点1、3、5、7、8、10、11都是终端节点。

rec13(12) = true,因为节点12向节点13发送了消息——因为它已经通过除节点13之外的所有通道接收到了消息。节点从除节点13之外的所有通道(2、4、6、9)中接收到了消息。

Echo算法

该算法的特点包括:

  • 适用于任意拓扑结构的网络的集中式波算法。
  • 首先,需要注意到,由一名发起者发起的通信过程,实际上属于“生成树”结构的一部分。在这种情况下,父通道被视作是接收第一条消息的通道。
  • 发起者向所有邻近的节点发送该消息。
  • 收到第一条消息后,会向所有邻居发送一条非主动发起的转发消息,不过这条消息不会发送给发送该消息的邻居。
  • 当发起者从所有邻居那里收到回信后,它就会做出决定。
用于发起方的Echo算法:
从所有的q. neigh开始吧。
将 <tok> 发送到 q;
当接收时p< 嘶嘶叫p do
Begin接收了<tok>;然后执行后续操作。p = 重新计算p+1个终点;
结束
做出决定/选择
结束
适用于非起始点的Echo算法:
Begin从邻居q那里收到了<tok>。
父亲 = q
记录/保存p= 重新计算p+1
对于所有的qϵ邻居来说p q ≭ 父亲p do
将 <tok> 发送到 q
虽然如此,但……p< 吠叫p do
Begin收到了<tok>p
记录/保存p = 重新计算p+1
结束
将 <tok> 发送给父亲p
结束

相位算法

这是一种适用于任意拓扑结构的去中心化算法。

该算法可以作为有向网络的波状算法的应用。

该算法要求,处理过程必须知道网络的直径D。

如果算法中使用的常数D大于网络的直径,那么该算法也是正确的。因此,在应用这种算法时,并不需要精确知道网络的直径,只要知道网络直径的上限值(即N-1)即可。

由于它可以被用于任意的、有向网络中,而这些网络中的通道只能单向传输消息,因此节点p的邻居包括:

  • In-Neighbor:能够向p发送消息的进程。
  • Out-Neighbor:即P可以向其发送消息的进程。

在相位算法中,每个进程都会向每个“出邻居”发送恰好 D 条消息。只有当从每个“入邻居”处收到了 I 条消息之后,才会向每个“出邻居”发送第 (I+1) 条消息。

芬兰算法

这是一种可以应用于任意有向网络中的算法。

不需要事先知道网络的直径大小,而是依赖于各个进程所拥有的唯一标识的可用性来解决问题。

在消息中,各种处理过程的身份信息会被交换,这导致算法的比特复杂度相当高。

Process p维护着两组进程标识:

  • Incp 那么,这些过程构成的集合q中,是否有一个事件在q中发生的时间早于p中最新的那个事件呢?
  • Nincp 是否存在一组过程 q,使得对于 q 的所有邻居 r 来说,q 中的某个事件发生在 p 中最近的那个事件的之前。

遍历算法

波浪算法还具有以下两个额外的特性:

  • 发起者才是唯一能够做出决策的过程。
  • 所有的事件都是按照参与者的因果顺序来排列的。

具有这些特性的波状算法被称为“遍历算法”。如果某个算法满足这些特性,那么它就可以被归类为遍历算法。

  • 在每一次计算中,都会有一个“发起者”来启动算法。这个发起者会发送一条消息来启动整个算法。
  • 当收到一条消息后,该过程会要么发送一条消息,要么做出相应的决策。
  • 每个进程至少会发送一次消息,之后,该算法会在发起者处终止。

遍历算法的示例:

顺序轮询算法:顺序轮询算法与常规轮询算法本质上是相同的。

  • 每次只询问一位邻居的意见。
  • 只有当收到之前邻居的回复后,才会对下一个邻居进行询问。
用于启动器的顺序轮询算法
var recp: integer = 0;
开始
而rec则不同。p<#嘶嘶叫#>p do
开始
将 tok 发送到 qrecp+1;
接收(tok);
记录/保存p:= 递归p+1
结束;终止
决定/选择
结束
用于非启动器的顺序轮询算法
开始
从Q那里接收(tok)。
将“tok”发送到“q”。
结束

注意:遍历算法被用于构建选举算法。

拓扑学

  • 铃声:这是一种环形网络结构,其中每个网络都恰好与另外两个网络相连。
  • 树:这是一种分层拓扑结构,其中根网络与所有其他网络相连,且层级结构至少包含三个层次。
  • 点击:每对进程之间都存在网络通道。

衡量算法效率的指标包括:

  • 时间复杂度指的是最长链条中所需处理的消息数量。
  • 消息复杂性指的是算法所处理的信息量。

以下是不同算法及其特性的表格:

  • N表示进程的数量。
  • 请告诉我通道的数量。
  • D表示网络的直径(以跳数为单位)。
  • DFS – 深度优先搜索
编号:S.No.

算法

拓扑学

集中式(C)

去中心化(D)

穿越

消息的复杂性(M)

时间复杂度

01.

环形物/环状结构

戒指

C

no

N

N

02.

D

no

N

O(D)

03.

回声

任意的/无根据的

C

no

2|E|

O(N)

04.

民意调查

小团体/圈子

C

no

2N-2

2

05.

芬恩

任意的/无根据的

D

no

<=4.N.|E|

O(D)

06.

序列扫描

小团体/圈子

C

是的

2N-2

2N-2

07.

经典DFS算法

任意的/无意义的

C

是的

2|E|

2|E|

              马上抢免费试听资格
意向课程:*必选
姓名:*必填
联系方式:*必填
QQ:
思博SPOTO在线咨询

相关资讯

即刻预约

免费试听-咨询课程-获取免费资料