本书旨在提供深入的分布式系统设计原理和实践方面的知识,读者通过学习可以掌握评价已有系统或设计新系统的方法。书中的实例研究阐述了每个主要论题的设计概念。
本书已被爱丁堡大学、伊利诺依大学、卡内基—梅隆大学、南加州大学、得克萨斯A&M大学、多伦多大学、罗彻斯特理工学院等世界众多名校采用为高级操作系统、计算机网络、分布式系统课程的教材。
综合性网站www.cdk3.net和www.booksites.net/cdkbook为读者提供了补充资料(勘误、源代码等)。
出版者的话\r\n专家指导委员会\r\n前言\r\n第1章 分布式系统的特征 1\r\n1.1 简介 1\r\n1.2 分布式系统实例 2\r\n1.2.1 因特网 2\r\n1.2.2 企业内部网 3\r\n1.2.3 移动计算和无处不在的计算 4\r\n1.3 资源共享和Web 5\r\n1.4 挑战 12\r\n1.4.1 异构性 12\r\n1.4.2 开放性 13\r\n1.4.3 安全性 14\r\n1.4.4 可伸缩性 14\r\n1.4.5 故障处理 16\r\n1.4.6 并发 17\r\n1.4.7 透明性 17\r\n1.5 小结 18\r\n第2章 系统模型 21\r\n2.1 简介 21\r\n2.2 体系结构模型 22\r\n2.2.1 软件层 22\r\n2.2.2 系统体系结构 24\r\n2.2.3 客户-服务器模型的变种 27\r\n2.2.4 接口和对象 31\r\n2.2.5 分布式体系结构的设计需求 32\r\n2.3 基础模型 34\r\n2.3.1 交互模型 35\r\n2.3.2 故障模型 39\r\n2.3.3 安全模型 42\r\n2.4 小结 45\r\n第3章 网络和网络互联 47\r\n3.1 简介 47\r\n3.2 网络类型 50\r\n3.3 网络原理 52\r\n3.3.1 数据包的传输 52\r\n3.3.2 数据流 53\r\n3.3.3 交换模式 53\r\n3.3.4 协议 54\r\n3.3.5 路由 59\r\n3.3.6 拥塞控制 62\r\n3.3.7 网络互联 62\r\n3.4 因特网协议 65\r\n3.4.1 IP寻址 67\r\n3.4.2 IP协议 68\r\n3.4.3 IP路由 70\r\n3.4.4 IPv6 72\r\n3.4.5 移动IP 74\r\n3.4.6 TCP和UDP 75\r\n3.4.7 域名 77\r\n3.4.8 防火墙 77\r\n3.5 网络实例研究:以太网. 无线LAN\r\n 和ATM 80\r\n3.5.1 以太网 81\r\n3.5.2 IEEE 802.11无线LAN 84\r\n3.5.3 异步传输模式网络 86\r\n3.6 小结 88\r\n第4章 进程间通信 91\r\n4.1 简介 91\r\n4.2 因特网协议的API 92\r\n4.2.1 进程间通信的特征 92\r\n4.2.2 套接字 93\r\n4.2.3 UDP数据报通信 94\r\n4.2.4 TCP流通信 96\r\n4.3 外部数据表示和编码 101\r\n4.3.1 CORBA的公共数据表示(CDR) 102\r\n4.3.2 Java对象序列化 103\r\n4.3.3 远程对象引用 105\r\n4.4 客户-服务器通信 106\r\n4.5 组通信 111\r\n4.5.1 IP组播—组通信的实现 112\r\n4.5.2 组播的可靠性和排序 113\r\n4.6 实例研究:UNIX系统的进程间通信 115\r\n4.6.1 数据报通信 115\r\n4.6.2 流通信 116\r\n4.7 小结 117\r\n第5章 分布式对象和远程调用 121\r\n5.1 简介 121\r\n5.2 分布式对象间的通信 124\r\n5.2.1 对象模型 124\r\n5.2.2 分布式对象 125\r\n5.2.3 分布式对象模型 126\r\n5.2.4 RMI的设计问题 127\r\n5.2.5 RMI的实现 129\r\n5.2.6 分布式无用单元回收 133\r\n5.3 远程过程调用 134\r\n5.4 事件和通知 137\r\n5.4.1 分布式事件通知的参与者 138\r\n5.4.2 Jini分布式事件规范 141\r\n5.5 Java RMI实例研究 142\r\n5.5.1 创建客户程序和服务器程序 145\r\n5.5.2 Java RMI的设计和实现 147\r\n5.6 小结 148\r\n第6章 操作系统支持 153\r\n6.1 简介 153\r\n6.2 操作系统层 154\r\n6.3 保护 156\r\n6.4 进程和线程 157\r\n6.4.1 地址空间 158\r\n6.4.2 新进程的创建 160\r\n6.4.3 线程 162\r\n6.5 通信和调用 171\r\n6.5.1 调用性能 172\r\n6.5.2 异步操作 177\r\n6.6 操作系统体系结构 179\r\n6.7 小结 182\r\n第7章 安全性 185\r\n7.1 简介 185\r\n7.1.1 威胁和攻击 187\r\n7.1.2 保护电子事务 189\r\n7.1.3 设计安全系统 190\r\n7.2 安全技术概述 192\r\n7.2.1 密码学 192\r\n7.2.2 密码学的应用 192\r\n7.2.3 证书 195\r\n7.2.4 访问控制 196\r\n7.2.5 凭证 198\r\n7.2.6 防火墙 199\r\n7.3 加密算法 200\r\n7.3.1 保密密钥(对称)算法 203\r\n7.3.2 公开密钥(非对称)算法 205\r\n7.3.3 混合密码协议 207\r\n7.4 数字签名 207\r\n7.4.1 公开密钥数字签名 209\r\n7.4.2 保密密钥数字签名—MAC 209\r\n7.4.3 安全摘要函数 210\r\n7.4.4 证书标准和证书权威机构 212\r\n7.5 密码实用学 213\r\n7.5.1 加密算法的性能 213\r\n7.5.2 密码学的应用和政治障碍 213\r\n7.6 实例研究:Needham-Schroeder. \r\nKerberos. SSL和Millicent 215\r\n7.6.1 Needham-Schroeder认证协议 215\r\n7.6.2 Kerberos 216\r\n7.6.3 使用安全套接字确保电子交易安全 220\r\n7.6.4 小额电子交易:Millicent协议 223\r\n7.7 小结 226\r\n第8章 分布式文件系统 229\r\n8.1 简介 229\r\n8.1.1 文件系统的特点 231\r\n8.1.2 分布式文件系统的需求 233\r\n8.1.3 实例研究 234\r\n8.2 文件服务系统结构 235\r\n8.3 Sun网络文件系统 239\r\n8.4 Andrew文件系统 248\r\n8.4.1 实现 250\r\n8.4.2 缓存的一致性 253\r\n8.4.3 其他方面 255\r\n8.5 最新进展 255\r\n8.6 小结 260\r\n第9章 命名服务 263\r\n9.1 简介 263\r\n9.2 命名服务和域名系统 265\r\n9.2.1 名字空间 266\r\n9.2.2 名字解析 269\r\n9.2.3 域名系统 271\r\n9.3 目录服务和发现服务 277\r\n9.4 实例研究:全局命名服务 279\r\n9.5 实例研究:X.500目录服务 282\r\n9.6 小结 285\r\n第10章 时间和全局状态 289\r\n10.1 简介 289\r\n10.2 时钟. 事件和进程状态 290\r\n10.3 同步物理时钟 292\r\n10.3.1 同步系统中的同步 293\r\n10.3.2 同步时钟的Cristian方法 293\r\n10.3.3 Berkeley算法 294\r\n10.3.4 网络时间协议 295\r\n10.4 逻辑时间和逻辑时钟 297\r\n10.5 全局状态 300\r\n10.5.1 全局状态和一致割集 301\r\n10.5.2 全局状态谓词. 稳定性. 安全性\r\n和活性 303\r\n10.5.3 Chandy和Lamport的“快照”算法 303\r\n10.6 分布式调试 307\r\n10.6.1 观察一致的全局状态 308\r\n10.6.2 求解可能的f 309\r\n10.6.3 求解明确的f 310\r\n10.6.4 在同步系统中求解可能的f和\r\n明确的f 311\r\n10.7 小结 311\r\n第11章 协调和协定 315\r\n11.1 简介 315\r\n11.2 分布式互斥 318\r\n11.3 选举 324\r\n11.4 组播通信 327\r\n11.4.1 基本组播 329\r\n11.4.2 可靠组播 329\r\n11.4.3 有序组播 332\r\n11.5 共识和相关问题 339\r\n11.5.1 系统模型和问题定义 339\r\n11.5.2 同步系统中的共识问题 342\r\n11.5.3 同步系统中的拜占庭将军问题 343\r\n11.5.4 异步系统的不可能性 346\r\n11.6 小结 347\r\n第12章 事务和并发控制 351\r\n12.1 简介 351\r\n12.1.1 简单的同步机制(无事务) 352\r\n12.1.2 事务的故障模型 353\r\n12.2 事务 354\r\n12.2.1 并发控制 357\r\n12.2.2 事务放弃时的恢复 360\r\n12.3 嵌套事务 362\r\n12.4 锁 364\r\n12.4.1 死锁 369\r\n12.4.2 在加锁机制中增加并发度 372\r\n12.5 乐观并发控制 374\r\n12.6 时间戳排序 377\r\n12.7 并发控制方法的比较 383\r\n12.8 小结 384\r\n第13章 分布式事务 389\r\n13.1 简介 389\r\n13.2 平面分布式事务和嵌套分布式事务 390\r\n13.3 原子提交协议 392\r\n13.3.1 两阶段提交协议 393\r\n13.3.2 嵌套事务的两阶段提交协议 395\r\n13.4 分布式事务的并发控制 398\r\n13.4.1 锁 399\r\n13.4.2 时间戳排序并发控制 399\r\n13.4.3 乐观并发控制 400\r\n13.5 分布式死锁 401\r\n13.6 事务恢复 406\r\n13.6.1 日志 408\r\n13.6.2 影子版本 410\r\n13.6.3 为何恢复文件需要事务状态\r\n和意图列表 411\r\n13.6.4 两阶段提交协议的恢复 411\r\n13.7 小结 414\r\n第14章 复制 417\r\n14.1 简介 417\r\n14.2 系统模型和组通信 419\r\n14.2.1 系统模型 419\r\n14.2.2 组通信 421\r\n14.3 容错服务 425\r\n14.3.1 被动(主备份)复制 427\r\n14.3.2 主动复制 429\r\n14.4 高可用服务 430\r\n14.4.1 gossip系统 431\r\n14.4.2 Bayou系统的操作变换方法 438\r\n14.4.3 Coda文件系统 439\r\n14.5 复制数据上的事务 444\r\n14.5.1 用于复制事务的体系结构 445\r\n14.5.2 可用拷贝复制 446\r\n14.5.3 网络分区 448\r\n14.5.4 带验证的可用拷贝 449\r\n14.5.5 法定数共识方法 449\r\n14.5.6 虚拟分区算法 451\r\n14.6 小结 453\r\n第15章 分布式多媒体系统 457\r\n15.1 简介 457\r\n15.2 多媒体数据的特征 460\r\n15.3 服务质量管理 461\r\n15.3.1 服务质量协商 464\r\n15.3.2 许可控制 468\r\n15.4 资源管理 469\r\n15.5 流适应 470\r\n15.5.1 调整 471\r\n15.5.2 过滤 471\r\n15.6 实例研究:Tiger视频文件服务器 472\r\n15.7 小结 475\r\n第16章 分布式共享内存 477\r\n16.1 简介 477\r\n16.1.1 消息传递机制和DSM的比较 478\r\n16.1.2 DSM的实现方法 479\r\n16.2 设计问题和实现问题 481\r\n16.2.1 结构 481\r\n16.2.2 同步模型 482\r\n16.2.3 一致性模型 483\r\n16.2.4 更新选项 486\r\n16.2.5 粒度 487\r\n16.2.6 系统颠簸 488\r\n16.3 顺序一致性和Ivy 488\r\n16.3.1 系统模型 488\r\n16.3.2 写失效 489\r\n16.3.3 失效协议 491\r\n16.3.4 一个动态分布式管理器算法 492\r\n16.3.5 系统颠簸 494\r\n16.4 释放一致性和Munin 494\r\n16.4.1 内存访问 495\r\n16.4.2 释放一致性 496\r\n16.4.3 Munin 497\r\n16.5 其他一致性模型 499\r\n16.6 小结 500\r\n第17章 CORBA实例研究 503\r\n17.1 简介 503\r\n17.2 CORBA RMI 504\r\n17.2.1 CORBA客户和服务器举例 506\r\n17.2.2 CORBA体系结构 509\r\n17.2.3 CORBA接口定义语言 511\r\n17.2.4 CORBA远程对象引用 515\r\n17.2.5 CORBA语言映射 515\r\n17.3 CORBA服务 516\r\n17.3.1 CORBA命名服务 517\r\n17.3.2 CORBA事件服务 519\r\n17.3.3 CORBA通知服务 520\r\n17.3.4 CORBA安全服务 522\r\n17.4 小结 522\r\n第18章 Mach实例研究 527\r\n18.1 简介 527\r\n18.1.1 设计目标和主要设计特点 528\r\n18.1.2 Mach主要的抽象概述 529\r\n18.2 端口. 命名和保护 530\r\n18.3 任务和线程 531\r\n18.4 通信模型 533\r\n18.4.1 消息 533\r\n18.4.2 端口 534\r\n18.4.3 mach_msg 系统调用 535\r\n18.5 通信实现 535\r\n18.5.1 透明消息传递 535\r\n18.5.2 开放性:协议和驱动程序 537\r\n18.6 内存管理 537\r\n18.6.1 地址空间结构 538\r\n18.6.2 内存共享:继承和消息传递 538\r\n18.6.3 对写时复制的评价 539\r\n18.6.4 外部分页 540\r\n18.6.5 对访问内存对象的支持 541\r\n18.7 小结 542\r\n参考文献 545\r\n索引 575
在分布式系统,特别是Web和其他基于互联网的应用和服务变得备受关注和空前重要之时,这本教材的第3版问世了.本书旨在传授基于互联网(及其他)的分布式系统的设计原理和实践知识.全书提供了充足的信息,供读者评价已有的系统或设计一个新系统,并且还包含了详细的实例研究,用于进一步阐明每个主题的概念.
分布式系统技术,如进程间通信.远程调用.分布式命名.密码安全.分布式文件系统.数据复制和分布式事务机制,是在过去二三十年中发展起来的,它提供运行时的基础结构,以支持当今的网络计算机应用.
软件框架提供对诸如分布式共享对象的抽象,以及包括安全通信.认证和访问控制.移动代码.事务和永久存储机制等服务,软件框架的使用意味着分布式系统的开发日益依赖中间件支持.
在不久的将来,分布式应用将通过复制数据和多媒体数据流促进用户之间更加紧密的协作,同时,通过使用无线和自发网络支持用户和设备的移动性.
分布式系统和应用的开发者可从许多语言.工具和环境中受益.学生和专业开发人员可利用它们来构造可运行的分布式应用.
目的和读者对象
本书可用做本科生教材和研究生的入门教材,也可作为自学教材.本书采用自顶向下的方法,首先叙述在分布式系统设计中要解决的问题,然后,通过抽象模型.算法和对广泛使用的系统实例进行详细研究的方式,描述成功开发分布式系统的方法.本书覆盖的领域有足够的深度和广度,为读者继续研究大多数分布式系统文献提供了良好的基础.
本书针对具有面向对象编程.操作系统.初级计算机体系结构等基础知识的学生.全书覆盖与分布式系统有关的计算机网络部分,包括因特网.广域网.局域网和无线网的基本技术.本书中的算法和接口大部分用Java描述,少部分用ANSI C描述.为了表述上的简洁明了,还使用一种从Java/C中派生出来的伪代码.
本书的组织结构
下图表明本书的章节可归结在5个主题下.它提供了本书的一个结构指南,为教师.读者提供了一个推荐的导航路径,以便于他们理解分布式系统设计中的不同子领域.
参考文献
万维网的存在改变了书(比如本书)与资料(包括研究论文.技术规范和标准)的链接方式.许多源文件现在可从Web上获取,有一些甚至只能从Web上获取.出于简洁和可读性的考虑,本书对Web参考资料采用了一种特殊的类似URL的格式,诸如[www.omg.org]和[www.rsasecurity.com I]指的是仅能从Web上获得的文档.在书后的参考文献列表中可以找到它们,但是完整的URL仅在本书参考文献的联机版本(www.cdk3.net/refs)上给出.两个版本的参考文献列表都包含对这种机制的更详细的解释.
第3版所做的修改
第3版在第2版出版6年后问世.下表总结了这版书稿所做的工作.相对于第2版,我们已经重写了大量介绍性的章节和其他一些章节,新增的几章旨在反映新的观点和技术方向.有些章节进行了重组织,包括覆盖的主题.内容的深度.资料的位置.为了给新的主题留出篇幅,本书压缩了原来的内容.有些材料被移到更为显著的位置以突出它的重要性.可从本书的Web网站(见以下介绍)找到从第2版中移走的实例研究.
重写和扩展的章节:
1 分布式系统的特征
3 网络和网络互联
4 进程间通信
5 分布式对象和远程调用
7 安全性
10 时间和全局状态
14 复制
完全新增的章节:
2 系统模型
11 协调和协定
15 分布式多媒体系统
17 CORBA实例研究
修改的章节:
6 操作系统支持
8 分布式文件系统
9 名字服务
12 事务和并发控制
13 分布式事务
16 分布式共享内存
18 Mach实例研究
致谢
感谢玛丽女王与韦斯特菲尔德学院的学生,他们在讲座和讨论会中提供的内容帮助我们形成此新版本.也感谢其他教师提出的有益的建议,Kohei Honda在QMW的教学中试用过该版本的草稿,提出了一些相当有价值的意见.
Angel Alvarez.Dave Bakken.John Barton.Simon Boggis.Brent Callaghan.Keith Clarke.Kurt Jensen.Roger Prowse倾注了大量的时间,复审了完成稿的关键部分,并给出了参考意见.
还要感谢下列人员,他们允许我们使用其资料,或对本书应该包括的主题给出了建议:Tom Berson.Antoon Bosselaers.Ralph Herrtwitch.Frederick Hirsch.Bob Hopgood.Ajay Kshemkalyan.Roger Needham.Mikael Pettersson.Rick Schantz.David Wheeler.
感谢玛丽女王与韦斯特菲尔德学院计算机科学系提供Web网站,感谢Keith Clarke和Tom King对建立网站的支持.
最后,感谢Pearson Education/Addison-Wesley的Keith Mansfield.Bridget Allen.Julie Knight以及Kristin Erickson为本书的出版.付印全过程提供的支持.
Web网站
我们维护的Web网站提供了大量的材料,可以帮助教师和读者更好地理解本书内容.可通过下列URL访问该网站:www.cdk3.net和www.booksites.net/cdkbook.
该Web网站包括:
●参考文献列表:书后的参考文献列表也可在Web网站上找到.参考文献列表的Web版本包含可联机获得的资料的Web链接.
●勘误表:给出书中的错误和修正列表.
●补充材料:我们计划为每一章保留一套补充材料.最初,包括书中程序的源代码和相关的阅读材料(主要是本书上一版本中的但在此版本中出于篇幅上的考虑而被删除的材料),该类的补充材料在本书中用类似www.cdk3.net/ipc的链接表示.
●他人贡献的教学材料:我们希望扩展补充材料以涵盖在本书写作和出版后出现的新主题.我们邀请教师提供教学材料,包括讲座笔记和实验项目.Web网站给出了提交补充材料的方法,提交的材料将由使用本书的几位教师组成的一个小组进行复审.
●使用本书的课程的网站链接:要求使用该书的教师告知我们他们的URL,以便包含在我们的链接列表中.
●教师指南.
George Coulouris
Jean Dollimore
Tim Kindberg
2000年6月于伦敦&Palo Alto