引言
在前一篇文章概述中,提到了分布式系统模型大致分类为同步网络模型、异步共享存储器模型、异步网络模型和部分同步模型。今天开始,将慢慢介绍同步网络模型的一些算法,因为同步网络模型有一些严格的环境假设,所以同步网络模型算法比较简单,但是同步网络模型是一个理想化模型,现实生活中这种模型是非常少的,但是学习它们也有助于我们理解后边的异步模型算法和部分同步模型,在接下来的几篇文章中,将分别介绍分布式领域中比较热门的话题包括Leader选举、一致性(包括著名的Byzantine故障下的一致性)、最小生成树和最短路径等问题
先从Leader选举开始
概念准备
网络表示
- 网络图定义:有向图G=(V,E)G = (V, E)G=(V,E),distance(i,j)distance(i,j)distance(i,j)表示i到j的最短路径长度如果存在的话,否则distance(i,j)=∞distance(i,j)=\inftydistance(i,j)=∞
- out−nbrsiout-nbrs_iout−nbrsi代表图中的边从i指向这些节点
- in−nbrsiin-nbrs_iin−nbrsi代表图中的边从这些节点指向i
逻辑进程
- 定义:VVV代表分布式节点,即逻辑进程
- 包含的组件
- stateistate_istatei:状态集合(并不是一定是有限状态)
- startistart_istarti:stateistate_istatei的子集,开始状态或初始状态
- msgsimsgs_imsgsi:发送的消息,根据当前的状态生成消息发送给iii直接指向的节点
- transitrans_itransi:收到的消息,状态转换方法收集收到的消息,然后进程转移到新状态
进程执行
- 消息生成:利用消息生成方法根据当前状态生成消息发送给所有out−nbrsiout-nbrs_iout−nbrsi
- 状态转换:利用状态转换方法收集消息根据当前状态获得新状态
故障类型
- 进程故障:节点停止故障、拜占庭故障(进程可以任意生成下一个状态和消息而不遵守进程消息生成和状态转换规则)
- 通信故障:链路故障(网络故障)
复杂度
用于分析分布式算法的效率
- 时间复杂度:进程生产所有输出或进程停止时已运行的轮数
- 通信复杂度:非空消息发送的次数
同步环网络Leader选举
同步环Leader选举的作用,首先假设一个同步环网络中有一个令牌,拿到令牌的进程可以执行,但是如果令牌丢失,那必须重新生成一个,生成这个令牌的过程就类似Leader选举过程。同步环网络结构如下图所示,下面将开始介绍同步环网络的Leader选举算法
LCR选举算法
-
算法来源:LeLann,Chang,Roberts三人提出的
-
算法思想:利用进程uiduiduid的唯一性,通过传递进程的uiduiduid来和各个进程比较,最终网络中最大的uiduiduid会流转一圈回到最初进程,因此最初进程就是Leader
-
前提假设
- 每个进程有唯一的uid,下文称为uuu,最大uiduiduid的进程会被选举为leader
- 各个进程组成一个环状网络的图GGG,结构如上,各个进程只能和相邻的进程通信
- 单向网络,不依赖是否知道图的GGG的大小
-
进程维护状态
- uiduiduid
- sendsendsend:一个uiduiduid或者nullnullnull,初始为进程自己的uid,或者接受到的比自己大的uiduiduid
- statusstatus