《分布式系统原理与范型》习题答案 6.一致性和复制

1、对共享的JAVA对象的访问可以通过将其方法声明为同步的而被串行化.当这种对象被复制时,这种方法足以保证访问的串行化吗? 
答:不能.问题是对每一个复制对象的访问是串行化的.但是对不同的复制对象可以在同一时间进行不同的操作,使得复制的实例变量不一致. 
2、对于第一章所讨论的监视器,如果允许在一个复制的监视器中阻塞多个线程,那么给条件变量发信号时,需要保证什么? 
答:在每一组复制线程中,相同的线程会被唤醒,所以所有的复制对象都发生了完全相同的流控制.实际上,这意味着运行时系统应该完全控制着每一组复制对象的线程的运行过程. 
3、请用自己的语言解释实际考虑一致性模型的主要原因. 
答: 弱一致性模型的出现是为了满足性能复制的需要.但是,只有当我们能够阻止全局同步,复制才会有效。而要达到这样的目的,就得放松一致性的限制。 
4、请解释DNS如何进行复制,以及它实际运行很好的原因。 
答:基本思想是域名服务器预先查询结果。结果可以存在高速缓存中很长一段时间,因为DNS认定主机名——IP地址的映射不会常常改变。 
5、讨论一致性模型时,我们经常提及软件和数据存储间的合约。为什么需要这一合约? 
答:如果程序期望连续的一致性的数据存储且不能缺少这些任何数据,存储必须保证连续一致。但是,为了提高性能,一些系统提供弱一点的模式。事实上软件能遵守模式强加的规则。总的说来,这意味着遵守规则的程序可以感知到什么看起来像是连续一致的数据存储。 
如果进程同意遵守某些合约,那么数据存储将正常运行。正常情况下,一个进程执行读操作时,它期待该操作返回的是该数据在其最后一次写操作之后的结果。在没有全局时钟情况系啊,精确定义哪次写操作是最后一次很困难。因此产生了一些了一致性模型,每种模型有效限制在一个数据项上执行一次读操作所应返回值。 
6、线性化假设存在一个全局时钟。但是,我们已经在严格一致性中指出,这种假设对于大多数分布式系统都是不现时的。线性化可以应用于物理分布的数据存储吗? 
答:可以。线性化假设放松了同步时钟,就是说,它假设几个事件发生在同一时间段。这些事件需要根据时间分类。 
7、如果多处理器使用单一总路线,那么可以实现严格一致的存储器吗?
 答:可以。总线连续请求因此它们以绝对的时间顺序出现在内存中。 
8、对于图6。5(B),为什么W1(x)a R2(X)NIL R3(X)a是非法的?
 答:它违背了数据一致性。 
9、在图6。7中,000000是仅满足FIFO一致的分布式共享存储器的合法输出吗?请解释你的答案。
 答:是的。假设(a)第一个运行。它打印00。现在(B)运行。如果存入(A)的还没有到达,它也打印00。现在(C)运行。如果前面的两个在存储的都没到达,它也打印00。 
10、在图6。8中,001110是顺序一致的存储器的合法输出吗?请解释你的答案。 
答:是的。如果程序以(a)(c)(b)的顺序运行,就能得到这个结果。 
11、我们在6。2。2节的最后讨论了一个形式模型,该模型规定顺序一致的数据存储上的每个操作集合可以用一个字符串H表示,从这个字符串H可以衍生出所有的单独进程的顺序序列。对于图6。9中的进程P1和P2,给出H所有可能的值。忽略进程P3和P4,也不包括它们在H的操作。 
答:很明显P2在被写之前不能读1,因此H的所有值都将在读1前写入1。程序的顺序是有关的,因此写2一定是在写1之后。唯一可能出现的结果是: H = W(x)a R(x)a W(x)b W(x)cH = W(x)a R(x)a W(x)c W(x)b 
12、在图6。13中,一个顺序一致的存储器允许6种可能的语句交叉。请列出这6种所有可能。 
答:(1) a=1; if (b==0); b=1; if (a==0); (2) a=1; b=1; if (a==0);if (b==0); (3) a=1; b=1; if (b==0); if (a==0); (4) b=1; if (a==0);a=1; if (b==0) (5) b=1; a=1; if (b==0); if (a==0); (6) b=1; a=1; if(a==0); if (b==0); 
13、通常认为弱一致性模型给程序开发人员强加了负担。这一命题在哪个程度上确实是正确的? 
答:这要看情况。许多程序员习惯于使用同步机制例如锁或通信的方式来保护他们的共享数据。主要意图是他们需要一种能提供只进行读或写操作的方式而不是两者同时进行。但是,程序员非常期望对同步变量的操作一致连续。 
14、在分布式共享存储系统中的释放一致性的大多数实现中,共享变量是在执行释放操作时被同步的,而不是在执行获取操作时被同步的。那么,为什么还需要获取操作呢? 
答:获取操作需要用于延迟进程当它试图访问共享变量时而另一个进程正在对共享变量进行此操作。获取操作时进程需要等待其他进程对共享变量完成释放操作,这样保证该进程得到共享变量当前值。否则不能保证该进程会获得共享变量当前值。(老书p229) 
15、ORCA提供顺序一致性还是入口一致性?请解释你的答案。 
答:形式上,ORCA只提供入口一致性,因对相同对象的并行操作是完全序列化的。但是,当使用完全顺序广播用为操作排序的实施方法时,所有操作顺序都是全局安排的,并取决于它们操作的对象。在这种情况下,它提供顺序一致性。 
16、使用序列器并为维持主动复制的一致性而进行的全序的广播是否违背系统设计中的端到端理论?
 答:是的。端到端理论表明了问题应该在它们发生的相同层次上去解决。既然这样,我们以全序广播的方式处理问题以达到主动复制的一致性。在基本协议里,一致性是通过趋向原始作为第一性来达到的。而如果使用一个序列器,我们可以做到相同的事但在更低的一抽象层次。在这种情况下,可能使用原始协议更好因为它的升级是通过广播发送操作。 
17、您会选择哪种类型的一致性来实现电子股票市场?请解释您的答案。 
答:因果一致性应该能满足需要。问题是对于股价的变化,反应应该是连续的。独立股票的变化应该能以不同的顺序显示出来。 
18、如果要将一个移动用户的个人邮箱作为广域范围的分布式数据库的一部分来实现,哪种类型的以客户为中心的一致性最为合适? 
答:所有的类型都可以。关键是不论是写还是更新,邮箱对于用户来说应该都是一样的。对于这种邮箱来说,最简单的实现应该是基于主备份的本地写协议,该协议中主备份总是位于用户的移动电脑上。 
19、请描述出一个用于显示刚被更新的Web页面的写后读一致性的简单实现。 
答:最简单的实现是让浏览器检查它所显示的是不是最新版本的页面,这需要发送一个请求到Web服务器。由于许多系统都已经实现了该方案,所有它非常简单。 
20、请给出以客户为中心的一致性易于导致写操作冲突的案例。 
答:在描述以客户为中心的一致性模型时,假设每一个数据项都只有一个拥有着,只有该拥有着具有写权限。如果放弃这个假设的话肯定将导致写操作冲突。例如,如果数据的两个独立用户最终都被绑定到了同一个副本上,他们各自的更新都需要被传播到这个副本上。这是,更新冲突就很明显了。 
21、使用租用时,客户和服务器的时钟分别紧密同步是否是必要的? 
答:不需要。如果客户端认为它的时钟和服务器的时钟同步有困难时,它会在当前服务器的租借到期之前获取一个新的租借。 
22、考虑一个用于保证分布式数据存储上顺序一致性的非阻塞的主机备份协议。这样的数据存储总能提供写后读一致性吗? 
答:不能。如果更新进程接收到它的更新请求已被处理的通知,它就从数据存储断开并重新连接到另一个副本。更新是否应用在副本上则没有通知。相比来说,如果使用一个阻塞协议,更新进程仅在他的更新请求被完全应用在其它副本上时才断开连接。 
23、为了使主动复制正常工作,所有操作必须以相同的顺序在每个副本处被执行。这个顺序总是必需的吗? 
答:不是。对于那些对只读数据的操作或者可交换的写操作,从理论上来说,这些情况允许不同的副本有不同的顺序。但是,要检查两个写操作是否为可交换的十分困难。 
24、为了使用序列器实现全序的广播,一种方法是先将操作转发给序列器,然后该序列器为这个操作分配一个惟一的号码,随后广播这个操作。请提出另外两种可选择的方法,并比较这三种方法。 
答:另一种方法是对操作进行广播,但是延迟发送直到序列器为该操作广播一个iexuliehao。后者在该操作被序列器接收后发生。第三种方法是首先从序列器获取一个序列号,然后广播这个操作。第一种方法(将操作发送给序列器),涉及到发送包含操作信息的点到点的消息和一个广播信息。第二种方法需要两个广播消息:一个包含操作信息,另一个则包含序列号。第三种方法需要一个包含序列号的点对点的消息,和一个包含操作信息的广播消息。 
25、一个文件被复制在10个服务器上。请列出表决算法允许的所有读团体和写团体。
 答:下面这些是合法的: 
(1,10), (2, 9), (3, 8), (4, 7), (5, 6), (6, 5), (7, 4), (8,3), (9, 2), and (10, 1).  
26、为防止复制的调用,我们在书中讨论了基于发送方的方法。在基于接收方的方法中,是由接收副本辨认属于同一调用的输入消息的多个拷贝。请描述基于接收方的方法如何防止复制的调用。 
答:假设对象A调用对象B,如以前,每一次调用指定的A的副本相同的唯一的标志。每一个副本多点调用并请求B的副本。当B的副本接收到调用请求时,它检查它是否已经接收到过A的副本的请求。如果没有,调用就会在本地副本上执行,然后对A的副本发一个回应的广播。如果调用已经执行,请求信息就会进一步被忽视。同样地,A的一个副本只有在获得对象的本地副本的显著调用请求第一个引入回应时才执行,而此后相同的调用请求都会被简单地忽视。 
27、考虑在因果一直的懒惰复制中,一个操作被从一个写队列中删除的确切时间。 
答:当知道此操作已经在各处都被执行,这可以通过追踪每一个Lj中的副本最新的一次升级来检测,如果每一个副本都执行过了来自Li的W操作,LI可在更小的时间内先移去W2的所有操作,(比如:每一个W[k] W[k ])。因此,每个LJ发送一个回应给LI其中包含最近执行的操作的时间。 
28、在实现一个支持广播RPC的简单系统时,我们假设系统有多个复制的服务器,每个客户可以通过RPC与一个服务器通信。但是,处理复制时,客户需要向每个副本发送一个RPC请求。设计客户程序,以便客户好像只向应用程序发送单一的RPC。假设复制的目的是为了提高性能,而那些服务器可能是易于出故障的。
 答:无。
原文地址:https://www.cnblogs.com/leeeee/p/7276546.html