通过一个大型项目来学习分布式算法(4)

使用暗示移交,Dynamo确保读取和写入操作不会因为节点临时或网络故障而失败。需要最高级别的可用性的应用程序可以设置W为1,这确保了只要系统中有一个节点将key已经持久化到本地存储 , 一个写是可以接受(即一个写操作完成即意味着成功)。因此,只有系统中的所有节点都无法使用时写操作才会被拒绝。然而,在实践中,大多数Amazon生产服务设置了更高的W来满足耐久性极别的要求。对N, R和W的更详细的配置讨论在后续的第6节。

一个高度可用的存储系统具备处理整个数据中心故障的能力是非常重要的。数据中心由于断电,冷却装置故障,网络故障和自然灾害发生故障。Dynamo可以配置成跨多个数据中心地对每个对象进行复制。从本质上讲,一个key的首选列表的构造是基于跨多个数据中心的节点的。这些数据中心通过高速网络连接。这种跨多个数据中心的复制方案使我们能够处理整个数据中心故障。

4.7处理永久性故障:副本同步 

Hinted Handoff在系统成员流动性(churn)低,节点短暂的失效的情况下工作良好。有些情况下,在hinted副本移交回原来的副本节点之前,暗示副本是不可用的。为了处理这样的以及其他威胁的耐久性问题,Dynamo实现了反熵(anti-entropy,或叫副本同步)协议来保持副本同步。

为了更快地检测副本之间的不一致性,并且减少传输的数据量,Dynamo采用MerkleTree[13]。MerkleTree是一个哈希树(Hash Tree),其叶子是各个key的哈希值。树中较高的父节点均为其各自孩子节点的哈希。该merkleTree的主要优点是树的每个分支可以独立地检查,而不需要下载整个树或整个数据集。此外,MerkleTree有助于减少为检查副本间不一致而传输的数据的大小。例如,如果两树的根哈希值相等,且树的叶节点值也相等,那么节点不需要同步。如果不相等,它意味着,一些副本的值是不同的。在这种情况下,节点可以交换children的哈希值,处理直到它到达了树的叶子,此时主机可以识别出“不同步”的key。MerkleTree减少为同步而需要转移的数据量,减少在反熵过程中磁盘执行读取的次数。

Dynamo在反熵中这样使用MerkleTree:每个节点为它承载的每个key范围(由一个虚拟节点覆盖 key 集合)维护一个单独的MerkleTree。这使得节点可以比较key range中的key是否是最新。在这个方案中,两个节点交换MerkleTree的根,对应于它们承载的共同的键范围。其后,使用上面所述树遍历方法,节点确定他们是否有任何差异和执行适当的同步行动。方案的缺点是,当节点加入或离开系统时有许多key rangee变化,从而需要重新对树进行计算。通过由6.2节所述的更精炼partitioning方案,这个问题得到解决。

4.8会员和故障检测4.8.1环会员(Ring Membership) 

Amazon环境中,节点中断(由于故障和维护任务)常常是暂时的,但持续的时间间隔可能会延长。一个节点故障很少意味着一个节点永久离开,因此应该不会导致对已分配的分区重新平衡(rebalancing)和修复无法访问的副本。同样,人工错误可能导致意外启动新的Dynamo节点。基于这些原因,应当适当使用一个明确的机制来发起节点的增加和从环中移除节点。管理员使用命令行工具或浏览器连接到一个节点,并发出成员改变(membership change)指令指示一个节点加入到一个环或从环中删除一个节点。接收这一请求的节点写入成员变化以及适时写入持久性存储。该成员的变化形成了历史,因为节点可以被删除,重新添加多次。一个基于Gossip的协议传播成员变动,并维持成员的最终一致性。每个节点每间隔一秒随机选择随机的对等节点,两个节点有效地协调他们持久化的成员变动历史。

当一个节点第一次启动时,它选择它的Token(在虚拟空间的一致哈希节点) 并将节点映射到各自的Token集(Token set)。该映射被持久到磁盘上,最初只包含本地节点和Token集。在不同的节点中存储的映射(节点到token set 的映射)将在协调成员的变化历史的通信过程中一同被协调。因此,划分和布局信息也是基于Gossip协议传播的,因此每个存储节点都了解对等节点所处理的标记范围。这使得每个节点可以直接转发一个key的读/写操作到正确的数据集节点。

4.8.2外部发现 

上述机制可能会暂时导致逻辑分裂的Dynamo环。例如,管理员可以将节点A加入到环,然后将节点B加入环。在这种情况下,节点A和B各自都将认为自己是环的一员,但都不会立即了解到其他的节点(也就是A不知道B的存在,B也不知道A的存在,这叫逻辑分裂)。为了防止逻辑分裂,有些Dynamo节点扮演种子节点的角色。种子的发现(discovered)是通过外部机制来实现的并且所有其他节点都知道(实现中可能直接在配置文件中指定seed node的IP,或者实现一个动态配置服务,seed register)。因为所有的节点,最终都会和种子节点协调成员关系,逻辑分裂是极不可能的。种子可从静态配置或配置服务获得。通常情况下,种子在Dynamo环中是一个全功能节点。

4.8.3故障检测 

Dynamo中,故障检测是用来避免在进行get()和put()操作时尝试联系无法访问节点,同样还用于分区转移(transferring partition)和暗示副本的移交。为了避免在通信失败的尝试,一个纯本地概念的失效检测完全足够了:如果节点B不对节点A的信息进行响应(即使B响应节点C的消息),节点A可能会认为节点B失败。在一个客户端请求速率相对稳定并产生节点间通信的Dynamo环中,一个节点A可以快速发现另一个节点B不响应时,节点A则使用映射到B的分区的备用节点服务请求,并定期检查节点B后来是否后来被复苏。在没有客户端请求推动两个节点之间流量的情况下,节点双方并不真正需要知道对方是否可以访问或可以响应。

去中心化的故障检测协议使用一个简单的Gossip式的协议,使系统中的每个节点可以了解其他节点到达(或离开)。有关去中心化的故障探测器和影响其准确性的参数的详细信息,感兴趣的读者可以参考[8]。早期Dynamo的设计使用去中心化的故障检测器以维持一个失败状态的全局性的视图。后来认为,显式的节点加入和离开的方法排除了对一个失败状态的全局性视图的需要。这是因为节点是是可以通过节点的显式加入和离开的方法知道节点永久性(permanent)增加和删除,而短暂的(temporary)节点失效是由独立的节点在他们不能与其他节点通信时发现的(当转发请求时)。

4.9添加/删除存储节点 

当一个新的节点(例如X)添加到系统中时,它被分配一些随机散落在环上的Token。对于每一个分配给节点X的key range,当前负责处理落在其key range中的key的节点数可能有好几个(小于或等于N)。由于key range的分配指向X,一些现有的节点不再需要存储他们的一部分key,这些节点将这些key传给X,让我们考虑一个简单的引导(bootstrapping)场景,节点X被添加到图2所示的环中A和B之间,当X添加到系统,它负责的key范围为(F,G],(G,A]和(A,X]。因此,节点B,C和D都各自有一部分不再需要储存key范围(在X加入前,B负责(F,G], (G,A], (A,B]; C负责(G,A], (A,B], (B,C]; D负责(A,B], (B,C], (C,D]。而在X加入后,B负责(G,A], (A,X], (X,B]; C负责(A,X], (X,B], (B,C]; D负责(X,B], (B,C], (C,D])。因此,节点B,C和D,当收到从X来的确认信号时将供出(offer)适当的key。当一个节点从系统中删除,key的重新分配情况按一个相反的过程进行。

实际经验表明,这种方法可以将负载均匀地分布到存储节点,其重要的是满足了延时要求,且可以确保快速引导。最后,在源和目标间增加一轮确认(confirmation round)以确保目标节点不会重复收到任何一个给定的key range转移。

5实现

在dynamo中,每个存储节点有三个主要的软件组件:请求协调,成员(membership)和故障检测,以及本地持久化引擎。所有这些组件都由Java实现。

Dynamo的本地持久化组件允许插入不同的存储引擎,如:Berkeley数据库(BDB版本)交易数据存储,BDB Java版,MySQL,以及一个具有持久化后备存储的内存缓冲。设计一个可插拔的持久化组件的主要理由是要按照应用程序的访问模式选择最适合的存储引擎。例如,BDB可以处理的对象通常为几十千字节的数量级,而MySQL能够处理更大尺寸的对象。应用根据其对象的大小分布选择相应的本地持久性引擎。生产中,Dynamo多数使用BDB事务处理数据存储。

请求协调组成部分是建立在事件驱动通讯基础上的,其中消息处理管道分为多个阶段类似SEDA的结构[24]。所有的通信都使用Java NIO Channels。协调员执行读取和写入:通过收集从一个或多个节点数据(在读的情况下),或在一个或多个节点存储的数据(写入)。每个客户的请求中都将导致在收到客户端请求的节点上一个状态机的创建。每一个状态机包含以下逻辑:标识负责一个key的节点,发送请求,等待回应,可能的重试处理,加工和包装返回客户端响应。每个状态机实例只处理一个客户端请求。例如,一个读操作实现了以下状态机:(i)发送读请求到相应节点,(ii)等待所需的最低数量的响应,(iii)如果在给定的时间内收到的响应太少,那么请求失败,(iv)否则,收集所有数据的版本,并确定要返回的版本 (v)如果启用了版本控制,执行语法协调,并产生一个对客户端不透明写上下文,其包括一个涵括所有剩余的版本的矢量时钟。为了简洁起见,没有包含故障处理和重试逻辑。

在读取响应返回给调用方后,状态机等待一小段时间以接受任何悬而未决的响应。如果任何响应返回了过时了的(stale)的版本,协调员将用最新的版本更新这些节点(当然是在后台了)。这个过程被称为读修复(read repair),因为它是用来修复一个在某个时间曾经错过更新操作的副本,同时read repair可以消除不必的反熵操作。

如前所述,写请求是由首选列表中某个排名前N的节点来协调的。虽然总是选择前N节点中的第一个节点来协调是可以的,但在单一地点序列化所有的写的做法会导致负荷分配不均,进而导致违反SLA。为了解决这个问题,首选列表中的前N的任何节点都允许协调。特别是,由于写通常跟随在一个读操作之后,写操作的协调员将由节点上最快答复之前那个读操作的节点来担任,这是因为这些信息存储在请求的上下文中(指的是write操作的请求)。这种优化使我们能够选择那个存有同样被之前读操作使用过的数据的节点,从而提高“读你的写”(read-your-writes)一致性(译:我不认为这个描述是有道理的,因为作者这里描述明明是write-follows-read,要了解read-your-writes一致性的读者参见作者另一篇文章:eventually consistent)。它也减少了为了将处理请求的性能提高到99.9百分位时性能表现的差异。

6经验与教训

Dynamo由几个不同的配置的服务使用。这些实例有着不同的版本协调逻辑和读/写仲裁(quorum)的特性。以下是Dynamo的主要使用模式:

业务逻辑特定的协调:这是一个普遍使用的Dynamo案例。每个数据对象被复制到多个节点。在版本发生分岔时,客户端应用程序执行自己的协调逻辑。前面讨论的购物车服务是这一类的典型例子。其业务逻辑是通过合并不同版本的客户的购物车来协调不同的对象。

基于时间戳的协调:此案例不同于前一个在于协调机制。在出现不同版本的情况下,Dynamo执行简单的基于时间戳的协调逻辑:“最后的写获胜”,也就是说,具有最大时间戳的对象被选为正确的版本。一些维护客户的会话信息的服务是使用这种模式的很好的例子。

高性能读取引擎:虽然Dynamo被构建成一个“永远可写”数据存储,一些服务通过调整其仲裁的特性把它作为一个高性能读取引擎来使用。通常,这些服务有很高的读取请求速率但只有少量的更新操作。在此配置中,通常R是设置为1,且W为N。对于这些服务,Dynamo提供了划分和跨多个节点的复制能力,从而提供增量可扩展性(incremental scalability)。一些这样的实例被当成权威数据缓存用来缓存重量级后台存储的数据。那些保持产品目录及促销项目的服务适合此种类别。

Dynamo的主要优点是它的客户端应用程序可以调的N,R和W的值,以实现其期待的性能, 可用性和耐用性的水平。例如,N的值决定了每个对象的耐久性Dynamo用户使用的一个典型的N值是3

W和R影响对象的可用性,耐用性和一致性。举例来说,如果W设置为1,只要系统中至少有一个节点活就可以成功地处理一个写请求,那么系统将永远不会拒绝写请求。不过,低的W和R值会增加不一致性的风险,因为写请求被视为成功并返回到客户端,即使他们还未被大多数副本处理。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
!!注意:全文有99M,由于上传文件不得超过60M,所以分成两个压缩文件,这是part1.part2在以下网页: http://download.csdn.net/detail/hellowjl1/4682120 在本书中,作者给出设计,实现和分析分布式算法的蓝图。本书适合学生、程序员、系统分析员和研究人员等不同类型的读者。本书包括这个领域最重要的算法和不可能解.而且都采用简单的自动机理论进行论述。对所有算法的正确性都给予证明.并且根据精确定义的复杂度标准分析算法的复杂度。其中涉及的问题包括资源分配、通信、分布式处理器之间的一致性、数据一致性、死锁检测、领导者进程的选取、全局快照等。    本书的内容按照系统模型组织,首先是根据定时模型.然后在定时模型内再根据进程间的通信机制。不同系统的材料分别独立成章,便于查阅。    本书论述十分严谨,但又很直观.便于读者迅速理解。本书也为读者提供设计新的算法和证明新的不可能解的基本数学工具。而且,它教给读者怎样对分布式系统进行严格的推理 ―包括形式化建模,为它们所需的行为设计精确的指标,证明它们的正确性.并且用实际的度量标准来评价它们的性能。    本书对分布式算法进行全面介绍,包括最为重要的算法和不可能性结果。绝大部分的解都给出了数学证明。这些算法都根据精确定义的复杂度衡量方法进行分析。本书还讲述针对许多典型问题的算法、各类系统模型及其能力。章后提供大量习题并列出了详细的参考文献。    本书可作为高等院校计算机系研究生的教材,尤其适合对计算机理论或体系结构感兴趣的学生学习,还适合分布式设计人员、研究人员及其相关技术人员参考。 出版者的话 专家指导委员会 译者序 前言 第1章 引言 1 1.1 相关主题 1 1.2 我们的观点 2 1.3 本书内容综述 3 1.4 参考文献注释 7 1.5 标记 7 第一部分 同步网络算法 第2章 建模i:同步网络模型 10 2.1 同步网络系统 10 2.2 故障 11 2.3 输入和输出 11 2.4 运行 11 2.5 证明方法 12 2.6 复杂度度量 12 2.7 随机化 12 2.8 参考文献注释 13 .第3章 同步环中的领导者选择 14 3.1 问题 14 3.2 相同进程的不可能性结果 14 3.3 基本算法 15 3.4 通信复杂度为o(n log n)的算法 17 3.5 非基于比较的算法 19 3.5.1 时间片算法 20 3.5.2 变速算法 20 3.6 基于比较的算法的下界 21 3.7 非基于比较的算法的下界* 25 3.8 参考文献注释 26 3.9 习题 27 第4章 一般同步网络中的算法 29 4.1 一般网络中的领导者选举 29 4.1.1 问题 29 4.1.2 简单的洪泛算法 29 4.1.3 降低通信复杂度 31 4.2 广度优先搜索 32 4.2.1 问题 32 4.2.2 基本的广度优先搜索算法 33 4.2.3 应用 34 4.3 最短路径 35 4.4 最小生成树 36 4.4.1 问题 36 4.4.2 基本定理 36 4.4.3 算法 37 4.5 最大独立集 39 4.5.1 问题 40 4.5.2 随机化算法 40 4.5.3 分析* 42 4.6 参考文献注释 43 4.7 习题 43 第5章 链路故障时的分布式一致性 46 5.1 协同攻击问题―确定性版本 46 5.2 协同攻击问题―随机化版本 48 5.2.1 形式化模型 49 5.2.2 算法 49 5.2.3 不一致的下限 52 5.3 参考文献注释 54 5.4 习题 54 第6章 进程故障下的分布式一致性 56 6.1 问题 56 6.2 针对停止故障的算法 58 6.2.1 基本算法 58 6.2.2 减少通信 59 6.2.3 指数信息收集算法 61 6.2.4 带鉴别的byzantine一致性 66 6.3 针对byzantine故障的算法 66 6.3.1 举例 66 6.3.2 byzantine一致性问题的eig算法 68 6.3.3 使用二元byzantine一致的一般 的byzantine一致性问题 71 6.3.4 减少通信开销 72 6.4 byzantine一致性问题中进程的个数 74 6.5 一般图中的byzantine一致性问题 78 6.6 弱byzantine一致性 81 6.7 有停止故障时的轮数 82 6.8 参考文献注释 88 6.9 习题 89 第7章 更多的一致性问题 93 7.1 k一致性问题 93 7.1.1 问题 93 7.1.2 算法 93 7.1.3 下界* 95 7.2 近似一致性 102 7.3 提交问题 105 7.3.1 问题 105 7.3.2 两阶段提交 106 7.3.3 三阶段提交 107 7.3.4 消息数的下界 109 7.4 参考文献注释 111 7.5 习题 111 第二部分 异步算法 第8章 建模ii:异步系统模型 114 8.1 输入/输出自动机 114 8.2 自动机的操作 118 8.2.1 合成 118 8.2.2 隐藏 121 8.3 公平性 121 8.4 问题的输入和输出 123 8.5 属性与证明方法 124 8.5.1 不变式断言 124 8.5.2 轨迹属性 124 8.5.3 安全与活性属性 125 8.5.4 合成推理 126 8.5.5 层次化证明 128 8.6 复杂度衡量 130 8.7 不可区分运行 131 8.8 随机化 131 8.9 参考文献注释 131 8.10 习题 132 第二部分a 异步共享存储器算法 第9章 建模iii:异步共享存储器模型 136 9.1 共享存储器系统 136 9.2 环境模型 138 9.3 不可区分状态 140 9.4 共享变量类型 140 9.5 复杂度衡量 144 9.6 故障 144 9.7 随机化 145 9.8 参考文献注释 145 9.9 习题 145 第10章 互斥 146 10.1 异步共享存储器模型 146 10.2 问题 148 10.3 dijkstra的互斥算法 151 10.3.1 算法 151 10.3.2 正确性证明 154 10.3.3 互斥条件的一个断言证明 156 10.3.4 运行时间 157 10.4 互斥算法的更强条件 158 10.5 锁定权互斥算法 159 10.5.1 双进程算法 159 10.5.2 n进程算法 163 10.5.3 锦标赛算法 167 10.6 使用单写者共享存储器的算法 170 10.7 bakery算法 171 10.8 寄存器数量的下界 173 10.8.1 基本事实 174 10.8.2 单写者共享变量 175 10.8.3 多写者共享变量 175 10.9 使用读-改-写共享变量的互斥 179 10.9.1 基本问题 179 10.9.2 有界绕过次数 180 10.9.3 锁定权 185 10.9.4 模拟证明 187 10.10 参考文献注释 189 10.11 习题 190 第11章 资源分配 194 11.1 问题 194 11.1.1 显式资源说明和互斥说明 194 11.1.2 资源分配问题 195 11.1.3 哲学家用餐问题 196 11.1.4 解法的受限形式 197 11.2 对称哲学家用餐算法的不存在性 197 11.3 右-左哲学家用餐算法 199 11.3.1 等待链 199 11.3.2 基本算法 200 11.3.3 扩展 202 11.4 哲学家用餐随机算法* 204 11.4.1 算法* 205 11.4.2 正确性* 207 11.5 参考文献注释 212 11.6 习题 213 第12章 一致性 215 12.1 问题 215 12.2 使用读/写共享存储器的一致性 217 12.2.1 限制 218 12.2.2 术语 218 12.2.3 双价初始化 218 12.2.4 无等待终止的不可能性 219 12.2.5 单故障终止的不可能性结果 221 12.3 读/改/写共享存储器上的一致性 问题 223 12.4 其他共享存储器类型 224 12.5 异步共享存储器系统中的可计算性* 224 12.6 参考文献注释 225 12.7 习题 226 第13章 原子对象 229 13.1 定义和基本结论 229 13.1.1 原子对象的定义 229 13.1.2 规范无等待原子对象自动机 235 13.1.3 原子对象的合成 237 13.1.4 原子对象和共享变量 237 13.1.5 显示原子性的一个充分条件 241 13.2 用读/写变量实现读-改-写原子对象 242 13.3 共享存储器的原子快照 243 13.3.1 问题 243 13.3.2 带无界变量的一个算法 244 13.3.3 带有界变量的一个算法* 247 13.4 读/写原子对象 250 13.4.1 问题 250 13.4.2 证明原子性的其他引理 250 13.4.3 带无界变量的一个算法 251 13.4.4 两个写者的有界算法 254 13.4.5 使用快照的算法 258 13.5 参考文献注释 259 13.6 习题 260 第二部分b 异步网络算法 第14章 建模iv:异步网络模型 264 14.1 发送/接收系统 264 14.1.1 进程 264 14.1.2 发送/接收通道 264 14.1.3 异步发送/接收系统 268 14.1.4 使用可靠fifo通道的发送/ 接收系统的特征 268 14.1.5 复杂度度量 269 14.2 广播系统 269 14.2.1 进程 269 14.2.2 广播通道 270 14.2.3 异步广播系统 270 14.2.4 采用可靠广播通道的广播系统 的特征 270 14.2.5 复杂度度量 271 14.3 多播系统 271 14.3.1 进程 271 14.3.2 多播通道 271 14.3.3 异步多播系统 272 14.4 参考文献注释 272 14.5 习题 272 第15章 基本异步网络算法 274 15.1 环中的领导者选举 274 15.1.1 lcr算法 275 15.1.2 hs算法 278 15.1.3 peterson leader算法 278 15.1.4 通信复杂度的下界 281 15.2 任意网络中的领导者选举 286 15.3 生成树的构造、广播和敛播 287 15.4 广度优先搜索和最短路径 290 15.5 最小生成树 295 15.5.1 问题描述 295 15.5.2 同步算法:回顾 296 15.5.3 ghs算法:概要 296 15.5.4 更详细的算法 297 15.5.5 特殊消息 299 15.5.6 复杂度分析 301 15.5.7 ghs算法的正确性证明 301 15.5.8 简单“同步”策略 302 15.5.9 应用到领导者选举算法中 302 15.6 参考文献注释 303 15.7 习题 303 第16章 同步器 307 16.1 问题 307 16.2 局部同步器 309 16.3 安全同步器 313 16.3.1 前端自动机 314 16.3.2 通道自动机 315 16.3.3 安全同步器 315 16.3.4 正确性 315 16.4 安全同步器的实现 316 16.4.1 同步器alpha 316 16.4.2 同步器beta 317 16.4.3 同步器gamma 317 16.5 应用 320 16.5.1 领导者选举 321 16.5.2 深度优先搜索 321 16.5.3 最短路径 321 16.5.4 广播与确认 321 16.5.5 最大独立集 321 16.6 时间下界 321 16.7 参考文献注释 324 16.8 习题 324 第17章 共享存储器与网络 326 17.1 从共享存储器模型到网络模型 的转换 326 17.1.1 问题 326 17.1.2 无故障时的策略 327 17.1.3 容忍进程故障的算法 332 17.1.4 对于n/2故障的不可能性结果 335 17.2 从网络模型转换到共享存储器模型 336 17.2.1 发送/接收系统 336 17.2.2 广播系统 338 17.2.3 异步网络中一致性的不可能性 338 17.3 参考文献注释 339 17.4 习题 339 第18章 逻辑时间 341 18.1 异步网络的逻辑时间 341 18.1.1 发送/接收系统 341 18.1.2 广播系统 343 18.2 使用逻辑时间的异步算法 344 18.2.1 时钟的走动 344 18.2.2 延迟未来事件 345 18.3 应用 346 18.3.1 银行系统 346 18.3.2 全局快照 348 18.3.3 模拟一台单状态机器 349 18.4 从实际时间算法到逻辑时间算法 的变换* 352 18.5 参考文献注释 352 18.6 习题 353 第19章 一致全局快照和稳定属性检测 355 19.1 发散算法的终止检测 355 19.1.1 问题 355 19.1.2 dijkstrascholten算法 356 19.2 一致全局快照 360 19.2.1 问题 360 19.2.2 chandylamport算法 361 19.2.3 应用 364 19.3 参考文献注释 366 19.4 习题 367 第20章 网络资源分配 369 20.1 互斥 369 20.1.1 问题 369 20.1.2 模拟共享存储器 370 20.1.3 循环令牌算法 370 20.1.4 基于逻辑时间的算法 372 20.1.5 logicaltimeme算法的改进 374 20.2 通用资源分配 376 20.2.1 问题 376 20.2.2 着色算法 377 20.2.3 基于逻辑时间的算法 377 20.2.4 无环有向图算法 378 20.2.5 哲学家饮水* 379 20.3 参考文献注释 383 20.4 习题 383 第21章 带进程故障的异步网络计算 386 21.1 网络模型 386 21.2 有故障环境中一致性的不可能性 387 21.3 随机算法 388 21.4 故障检测器 390 21.5 k一致性 393 21.6 近似一致性 394 21.7 异步网络的计算能力* 395 21.8 参考文献注释 396 21.9 习题 396 第22章 数据链路协议 399 22.1 问题阐述 399 22.2 stenning协议 400 22.3 位变换协议 403 22.4 可重排序的有界标志协议 406 22.4.1 关于重排序和复制的不可能 性结论 407 22.4.2 容许丢失和重排序的有界标 志协议 408 22.4.3 不存在容许消息丢失和重排序 的高效协议 412 22.5 容许进程崩溃 414 22.5.1 简单的不可能性结论 415 22.5.2 更复杂的不可能性结论 415 22.5.3 实用的协议 418 22.6 参考文献注释 423 22.7 习题 423 第三部分 部分同步算法 第23章 建模v: 部分同步系统模型 428 23.1 mmt 定时自动机 428 23.1.1 基本定义 428 23.1.2 操作 432 23.2 通用定时自动机 434 23.2.1 基本定义 434 23.2.2 将mmt自动机转化为通用定时 自动机 437 23.2.3 操作 440 23.3 属性和证明方法 441 23.3.1 不变式 441 23.3.2 定时轨迹属性 443 23.3.3 模拟 444 23.4 构造共享存储器和网络系统的模型 449 23.4.1 共享存储器系统 449 23.4.2 网络 449 23.5 参考文献注释 449 23.6 习题 450 第24章 部分同步的互斥 452 24.1 问题 452 24.2 单寄存器算法 453 24.3 对时间故障的回复性 459 24.4 不可能性结果 461 24.4.1 时间下界 462 24.4.2 最终时间界限的不可能性结果* 462 24.5 参考文献注释 463 24.6 习题 463 第25章 部分同步的一致性 466 25.1 问题 466 25.2 故障检测器 467 25.3 基本结论 468 25.3.1 上界 468 25.3.2 下界 469 25.4 有效算法 470 25.4.1 算法 471 25.4.2 安全属性 472 25.4.3 活性和复杂度 473 25.5 涉及时间不确定性的下界* 475 25.6 其他结果* 480 25.6.1 同步进程、异步通道* 480 25.6.2 异步进程、同步通道* 481 25.6.3 最终时间界限* 481 25.7 小结 483 25.8 参考文献注释 483 25.9 习题 483 参考文献 486 索引 512

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值