Note:答案仅供参考,自己所写,不是标准答案,若发现错误,请指正,谢谢!
文章目录
- 考试题目
- 参考答案
考试题目
1、简述分布式系统的设计目标中开放性的特点有哪些?
、
、
、
、
、
、
、
、
、
、
、
、
、
、
、
、
、
、
、
、
、
、
、
、
、
、
2、简述分布式体系结构中的层次结构,并举出一个层次结构的例子
、
、
、
、
、
、
、
、
、
、
、
、
、
、
、
、
、
、
、
、
、
、
、
、
、
、
3、RPC是什么?简述RPC过程
、
、
、
、
、
、
、
、
、
、
、
、
、
、
、
、
、
、
、
、
、
、
、
、
、
、
4、简述实体定位使用的转发指针方法,并简述它的优缺点
、
、
、
、
、
、
、
、
、
、
、
、
、
、
、
、
、
、
、
、
、
、
、
、
、
、
5、下面表格中分别是进程1到进程6中消息的时间戳向量,在满足因果关系的前提下,试分析说明进程2中当前的消息m在哪些进程中能够递交,在哪些进程中暂时不能递交。
6、考虑如下图所示的chord系统:
(1)试为该系统建立指状表。
(2)根据指状表,试描述从结点11解析键值k=23的过程。
(3)如何判断是否有新结点加入了该系统?
7、由0到7号共计8个进程组成一个进程组,7号进程作为协作者。简述3号进程发现7号进程崩溃后,按照Bully算法选举新协作进程。
8、什么是拜占庭将军协议?假设有五个节点,其中一个发生了拜占庭故障,使用Lamport递归算法来找到这个错误点。
参考答案
1、简述分布式系统的设计目标中开放性的特点有哪些?
开放性:通过一系列的接口来提供服务,而这些接口的定义是符合某个标准
特点:
- 互操作性: 不同系统依靠共同的标准, 可以依赖彼此的组件共同工作
- 可移植性: 应用程序可在具备相同接口的、 不同分布式系统上运行
- 灵活性: 可配置不同开发者的组件
- 可扩展性: 可增减组件
2、简述分布式体系结构中的层次结构,并举出一个层次结构的例子
层次体系结构:系统由自上而下的不同层次的组件组成,只有相邻的层次可以通信,请求消息自上而下,响应自下而上.
举例:标准的OSI七层参考模型
3、RPC是什么?简述RPC过程
RPC:全称远程过程调用,像本地子程序一样,调用远地子程序;调用者和被调用者都不用考虑消息通信
RPC执行的主要步骤
-
客户过程以普通方式调用相应的客户存根
-
客户存根建立消息并激活内核陷阱
-
内核将消息发送到远程内核
-
远程内核将消息送到服务器存根
-
服务器存根取出消息中的参数后调用服务器的过程
-
服务器完成工作后将结果返回值服务器存根
-
服务器存根将它打包并激活内核陷阱
-
远程内核将消息发送至客户端内核
-
客户端内核将消息交给客户存根
-
客户存根从消息中取出结果返回给客户
效果:讲客户过程对客户存根发出的本地调用转换成对服务器过程的本地调用,而客户和服务器都不会意识到有中间步骤的存在。
4、简述实体定位使用的转发指针方法,并简述它的优缺点
转发指针:当实体从A移动到B之后,在A上设置一个指向B的引用
优点:客户可利用传统的命名服务
缺点:间址链可能会很长、链的中间节点需要维护转发信息、链容易断
目标:限制链的长度,保证链的鲁棒性
优化策略:通过在proxy中存储一个捷径(shortcut),重定向转发指针
- 单独:仅有请求发起人,即初始proxy建立proxy短路
- 全部:转发链上的所有proxy建立短路
5、下面表格中分别是进程1到进程6中消息的时间戳向量,在满足因果关系的前提下,试分析说明进程2中当前的消息m在哪些进程中能够递交,在哪些进程中暂时不能递交。
对于此题,需要分别分析两个条件是否满足。
**对于条件(1):消息由进程2发送,则首先需要满足 ** V 2 = L 2 + 1 V_2 = L_2 + 1 V2=L2+1
也就是对于每个进程的第一维数据(6,8,8,8,8,8)而言,9=8+1,所以可以看出进程1不能接收消息,需要等待,其余进程均满足条件(1)。
对于条件(2):消息由进程1发送,则需要满足** i ≠ j i \neq j i=j****(即所有进程排除第一维数据),有 ** V i ≤ L i V_i ≤ L_i Vi≤Li
所以对于1-6这几个进程而言,排除第二维数据后,其余的数据都需要比进程2的各维数据相等或更大,所以可以看出,
- 对于进程4而言7<9,所以进程4不能接收消息,需要等待;
- 对于进程3而言4<5,所以进程3不能接收消息,需要等待;
- 对于进程5而言3<4,所以进程5不能接收消息,需要等待;
- 对于进程6而言10<11,所以进程6不能接收消息,需要等待;
综上两个条件,进程1,3,4,5,6需要等待
6、考虑如下图所示的chord系统:
(1)试为该系统建立指状表。
(2)根据指状表,试描述从结点11解析键值k=23的过程。
(3)如何判断是否有新结点加入了该系统?
(1)指状表
id/节点 | 2 | 8 | 11 | 18 | 21 | 22 | 28 | |
1 | 8 | 11 | 18 | 21 | 22 | 28 | 2 | |
2 | 8 | 11 | 18 | 21 | 28 | 28 | 2 | |
3 | 8 | 18 | 18 | 22 | 28 | 28 | 2 | |
4 | 11 | 18 | 21 | 28 | 2 | 2 | 8 | |
5 | 18 | 28 | 28 | 2 | 8 | 8 | 18 |
(2):11→21→22→28
(3)判断加入节点:
要检查是否有新节点加入Chord系统,可以使用多种方法。一种方法是监视系统中每个节点的手指表项的变化。当一个新节点加入时,它将导致对部分或全部手指表进行更改。另一种方法是监视网络流星并查找任何表明已加入新节点的消息。最后,你还可以定期查询系统中的每个现有节点,并询问它们最近是否有任何新节点加入。
7、由0到7号共计8个进程组成一个进程组,7号进程作为协作者。简述3号进程发现7号进程崩溃后,按照Bully算法选举新协作进程。
(1)有3号进程主持选举,向4,5,6,7号进程发消息
(2)4,5,6号进程应答,通知3号进程停止
(3)进程4主持选举
(4)进程5,6应答,通知进程4停止
(5)进程5,6主持选举
(6)进程6应答,通知进程5停止
(7)进程6获胜,并通知所有进程
8、什么是拜占庭将军协议?假设有五个节点,其中一个发生了拜占庭故障,使用Lamport递归算法来找到这个错误点。
拜占庭将军协定问题:假设通信是可靠的,但进程可能是不可靠的,即,在不可靠的信息上试图通过消息传递方式达到一致时不可能的。
5个节点,其中1个节点错误,使用Lamport算法寻找错误节点,假设1号节点错误,Lamport算法共有4步
(1)正确节点发送真实信息,错误节点发送错误信息
- 节点1:x, y, z, w → 错误节点,错误信息
- 节点2:2 →真实信息
- 节点3:3 →真实信息
- 节点4:4 →真实信息
- 节点5:5 →真实信息
(2)把第一步声明的结构组成向量形式:
- 节点1: Got(1, 2, 3, 4, 5)
- 节点2: Got(x, 2, 3, 4, 5)
- 节点3: Got(y, 2, 3, 4, 5)
- 节点4: Got(z, 2, 3, 4, 5)
- 节点5: Got(w, 2, 3, 4, 5)
(3)每个节点将第(2)步中的向量传递给其他节点,其中错误节点继续发送错误信息,使用ERR表示错误信息
- 节点1: G o t = [ 1 2 3 4 5 x 2 3 4 5 y 2 3 4 5 z 2 3 4 5 w 2 3 4 5 ] Got= { \left[ \begin{array}{ccc} 1 & 2 & 3 &4 & 5\\ x & 2 & 3 &4 & 5\\ y & 2 & 3 &4 & 5\\ z & 2 & 3 &4 & 5\\ w & 2 & 3 &4 & 5\\ \end{array} \right ]} Got= 1xyzw22222333334444455555
- 节点2: G o t = [ E R R E R R E R R E R R E R R x 2 3 4 5 y 2 3 4 5 z 2 3 4 5 w 2 3 4 5 ] Got= { \left[ \begin{array}{ccc} ERR & ERR & ERR &ERR & ERR\\ x & 2 & 3 &4 & 5\\ y & 2 & 3 &4 & 5\\ z & 2 & 3 &4 & 5\\ w & 2 & 3 &4 & 5\\ \end{array} \right ]} Got= ERRxyzwERR2222ERR3333ERR4444ERR5555
- 节点3: G o t = [ E R R E R R E R R E R R E R R x 2 3 4 5 y 2 3 4 5 z 2 3 4 5 w 2 3 4 5 ] Got= { \left[ \begin{array}{ccc} ERR & ERR & ERR &ERR & ERR\\ x & 2 & 3 &4 & 5\\ y & 2 & 3 &4 & 5\\ z & 2 & 3 &4 & 5\\ w & 2 & 3 &4 & 5\\ \end{array} \right ]} Got= ERRxyzwERR2222ERR3333ERR4444ERR5555
- 节点4: G o t = [ E R R E R R E R R E R R E R R x 2 3 4 5 y 2 3 4 5 z 2 3 4 5 w 2 3 4 5 ] Got= { \left[ \begin{array}{ccc} ERR & ERR & ERR &ERR & ERR\\ x & 2 & 3 &4 & 5\\ y & 2 & 3 &4 & 5\\ z & 2 & 3 &4 & 5\\ w & 2 & 3 &4 & 5\\ \end{array} \right ]} Got= ERRxyzwERR2222ERR3333ERR4444ERR5555
- 节点5: G o t = [ E R R E R R E R R E R R E R R x 2 3 4 5 y 2 3 4 5 z 2 3 4 5 w 2 3 4 5 ] Got= { \left[ \begin{array}{ccc} ERR & ERR & ERR &ERR & ERR\\ x & 2 & 3 &4 & 5\\ y & 2 & 3 &4 & 5\\ z & 2 & 3 &4 & 5\\ w & 2 & 3 &4 & 5\\ \end{array} \right ]} Got= ERRxyzwERR2222ERR3333ERR4444ERR5555
(4)每个节点检查接收向量,把某个值占多数的,放入向量中,生成结果向量
- 节点1: Got(1, 2, 3, 4, 5)
- 节点2: Got(unknown, 2, 3, 4, 5)
- 节点3: Got(unknown, 2, 3, 4, 5)
- 节点4: Got(unknown, 2, 3, 4, 5)
- 节点5: Got(unknown, 2, 3, 4, 5)
综上,判断出1号节点出现错误,结果向量:[unknown, 2, 3, 4, 5]