标题：分布式系统原理与范型
版权信息
书名：分布式系统原理与范型
作者： Andrew S.Tanenbaum、Maartenvan Steen 著 杨剑峰、常晓波、李敏 译 
出版社： 清华大学出版社
ISBN： 9787302172796
出版时间： 2008
开 本： 16 
定价： 68 .oo
本书适用对象广泛。对于学习分布式计算机的本科生和研究生，本书是优选教材。对于从事分布式计算研究和工程应用的科技人员和工程技术人员，本书也是一本优秀的基础性读物。
前言
随着计算机网络，特别是Internet的迅猛发展，传统的信息系统概念发生了巨大的变化，这些变化突出地表现在信息的存储、传递、发布以及获取方式所发生的革命性变革。与此同时，基于网络的分布式信息系统在各个领域得到了广泛的应用，在整个社会生活中正发挥着日益突出的作用。Internet已经越来越多地成为构建信息系统的一个关键组成部分。如何在更为广域和异构的计算环境中有效地发布和获取信息，已成为亟待解决的问题。分布式系统正是解决了上述问题。现在分布式系统的研究、应用日益广泛深入，分布式系统的学习也成为计算机及相关专业必不可少的教学环节。 
本书是Tanenbaum先生在所著的《分布式操作系统》的基础上，总结了分布式系统方面的最新进展，重新撰写的力作，是分布式系统的权威教材。本书循序渐进地、全面地、深入地讲解了分布式系统的原理，并列出了大量的范型。本书的结构分为两部分： 原理和范型。第一部分（第1~8章）详细讨论了分布式系统的原理、概念和技术，其中包括通信、进程、命名、同步、一致性和复制、容错以及安全。第二部分（第9~12章）给出了一些实际的分布式系统，即基于对象的分布式系统、分布式文件系统、基于文档的分布式系统以及基于协作的分布式系统，介绍了一些实际系统的设计思想和实现技术。全书结构清晰，内容全面经典，系统性与先进性并茂。 
本书的目标读者是计算机及相关专业的高年级学生或研究生。从事分布式计算研究和工程应用的科研人员和工程技术人员也会从本书中受益匪浅。 
本书是多人共同努力的成果，参与本书翻译、审稿、录排的人员包括： 杨剑峰、常晓波、梁金昆、张丽萍、汪青青、朱志博、李敏、李静、李娟、张颖、朱剑平、刘颖、吴东升、杨战伟、郭宁宁、李楠、聂晶、刘恒、刘敏、刘洋、吕喜熹、马睿倩等。全书由杨剑峰、常晓波和李敏负责统稿。 
限于译者水平，难免有错误和疏漏之处，恳请读者不吝指正。希望这本书能成为您工作的好帮手。 
杨剑峰常晓波2004年5月前言本书的出发点是对Distributed Operating Systems一书进行再版修订，但笔者很快就发现自1995年以来很多技术发生了改变，要完全体现出这些变化，仅仅对该书进行修订是不够的，而是需要写一本全新的书。因此，这本新书有了一个新的标题： 《分布式系统原理和范型》。标题的改变体现了对重点的调整。虽然我们仍然讨论一些操作系统的问题，但现在这本书还从更广泛的意义上研究分布式系统。例如，WWW作为已建立的最大的分布式系统，在Distributed Operating Systems一书中完全没有提到，因为它并不是一个操作系统。而在本书中，它几乎占去整整一章。 
本书分为两部分： 原理和范型。第1章是对主题的总体介绍。接下来的第2~8章分别讨论我们认为最重要的原理： 通信、进程、命名、同步、一致性和复制、容错以及安全性。 
实际的分布式系统通常是围绕一些范型来组织的，例如“所有事物都是文件”。接下来的第9~12章分别介绍一个不同的范型，并描述使用该范型的一些重要系统。涉及到的范型包括基于对象的系统、分布式文件系统、基于文档的系统以及基于协作的系统。 
第13章包含一份附有说明的参考书目，可供该主题的进一步学习使用，还包含本书中引用的著作列表。 
本书是作为计算机科学的大学高年级学生或研究生课程而编写的。因此，本书有一个Web站点，站点中以各种格式放置了本书中用到的PowerPoint表和图。要访问该站点，在页面上点击本书标题即可。将本书作为教材使用的教授可以通过联系当地的Prentice Hall代理机构得到一本习题解答手册。当然，本书也十分适合希望更多地了解这一重要主题的社会人士。 
许多人以多种方式对本书作出了贡献。我们尤其要感谢Arno Bakker、Gerco Ballintijn、Brent Callaghan、Scott Cannon、Sandra Cornelissen、Mike Dahlin、Mark Darbyshire、GuyEddon、Amr el Abbadi、Vincent Freeh、Chandana Gamage、Ben Gras、Bob Gray、Michael van Hartskamp、Philip Homburg、Andrew Kitchen、Ladislav Kohout、Bob Kutter、Jussipekka Leiwo、Leah McTaggert、Eli Messenger、Donald Miller、Shivakant Mishra、Jim Mooney、Matt Mutka、Rob Pike、Krithi Ramamritham、Shmuel Rotenstreich、Sol Shatz、Gurdip Singh、Aditya Shivram、Vladimir Sukonnik、Boleslaw Szymanski、Laurent Therond和Leendert van Doom，感谢他们阅读了部分书稿并提出了宝贵意见。 
最后，我们还要感谢我们的家庭。Suzanne已经经历过很多次这样的情况了。她从未说过“我受够了”，尽管这个念头肯定在她脑海里出现过。谢谢你！Barbara和Marvin现在对教授们为谋生所做的工作有了更好的了解，并且认识到好教材和坏教材之间的差别。现在，对我来说他们是我努力创作出更多好教材的动力所在。本书使用指南我们使用本书中的材料已经很多年了，主要是用作大学高年级学生和研究生的教材。而且，这些材料还曾经作为为时1~2天的有关分布式系统和中间件的研讨会的基本资料，参加这些研讨会的人包括ICT专家（技术上的）。下面是我们根据经验对本书使用方式提出的一些建议。 
大学高年级学生和研究生教材 
如果作为大学高年级学生和研究生的教材，本书通常可以在12~15周内完成教学。我们发现，在大多数学生看来，分布式系统由很多似乎彼此紧密结合的主题所组成。在本书的组织上，我们按照不同的原理介绍这些主题，分别讲授各个原理，这对学生领会重点内容有很大帮助。这样安排的效果是当第一部分（第1~8章）结束时，即在讨论范型之前，学生已经对本书主题在整体上有了一个相当好的把握。 
然而，分布式系统的领域涵盖许多不同的主题，其中一些主题在初次学习时很难理解。因此，我们强烈建议学生们随着课程的进展学习适当的章节。从Web站点可以获得所有PowerPoint表，将它们预先分发下去，以便学生在课堂中能够积极参与讨论。这种方法非常成功，并得到了学生们的高度评价。 
所有的材料都包括在一个为时15周的课程中。大多数时间花费在讲授分布式系统的原理，也就是前8章所包括的材料上。在讨论范型时，我们的经验是： 只需要介绍要点。直接从书中学习每个案例的详细内容比在课堂上听授更加容易。例如，尽管书中有关基于对象的系统的内容达80页之多，但我们只用一周的时间讲授这类系统。下面是一个课程进度安排建议表（表0.1），其中包括每次讲座中包括的主题。表0.1课程进度安排建议周主题章讲授内容1绪论1全部2通信22.1~2.33通信22.4~2.54进程3全部5命名44.1~4.26命名44.36同步55.1~5.2续表 
周主题章讲授内容7同步55.3~5.68一致性和复制66.1~6.49一致性和复制66.5~6.69容错77.1~7.310容错77.4~7.611安全性88.1~8.212安全性88.3~8.713基于对象的系统9全部14文件系统10全部15基于文档的系统11全部15基于协作的系统12全部并不是所有材料都需要在课堂上讲授；我们希望学生能够自学特定的部分，尤其是细节部分。在讲授时间少于15周的情况下，我们建议跳过有关范型的章节，让感兴趣的学生自己学习这些部分。 
如果用于低年级的课程，我们推荐将本书的学习延长至两个学期，并增加实验作业。例如，可以通过让学生修改一些组件，使这些组件具有容错性、处理多播RPC等功能来使学生理解简单的分布式系统。 
行业的专业研讨会 
在1~2天的研讨会上，通常将本书作为主要的背景材料使用。然而，如果跳过所有细节，仅将重点放在分布式系统的本质上，则有可能在两天内讲完整本书。此外，要使内容的表达更加生动实用，有必要重新安排章节的顺序，以提早说明原理是如何得到应用的。对于研究生来说，一般是在了解原理的应用之前（有时甚至根本不了解原理的具体应用）先对原理进行为期10周的学习，但专业人士如果能了解这些原理的实际应用，就会有更大的学习动力。下面是一个为期2天课程的试验性进度表（表0.2），该表按照逻辑单元进行划分。表0.2按逻辑单元划分的课程进度第1天单元时间（分）主题章重点190绪论1客户?服务器体系结构260通信2RPC/RMI和消息传递360基于协作的系统12消息传递问题460进程3移动代码和代理530命名4位置跟踪690基于对象的系统9CORBA续表 
第2天单元时间（分）主题章重点190一致性和复制6模型和协议260基于文档的系统11Web缓存/复制360容错7进程组与2PC490安全性8基本思想560分布式文件系统10NFS v3和v4个人学习 
本书同样也适用于个人学习。如果具有足够的时间和动力，建议读者仔细阅读整本书。 
如果没有足够的时间仔细阅读所有材料，我们建议只集中学习最重要的主题。下面的表格中列举一些章节，我们认为这些章节涵盖了关于分布式系统的最重要的主题（表0.3）。表0.3自学内容章主题小节1绪论1.1、1.2、1.4.3、1.52通信2.2、2.3、2.43进程3.3、3.4、3.54命名4.1、4.25同步5.2、5.3、5.66一致性和复制6.1、6.2.2、6.2.5、6.4、6.57容错7.1、7.2.1、7.2.2、7.3、7.4.1、7.4.3、7.5.18安全性8.1、8.2.1、8.2.2、8.3、8.49基于对象的系统9.1、9.2、9.410分布式文件系统10.1、10.411基于文档的系统11.112基于协作的系统12.1、12.2或12.3比较好的做法是对学习这些建议的材料需要花费的时间进行估算，但这在很大程度上取决于读者的背景知识，对各种背景的读者很难做一个一般性的估计。然而，如果一个具有全职工作的人抽出晚上的时间阅读本书，则可能至少花费几周时间。
目录
第1章绪论1 
1.1分布式系统的定义1 
1.2目标3 
1.2.1让用户连接到资源3 
1.2.2透明性4 
1.2.3开放性6 
1.2.4可扩展性7 
1.3分布式系统的硬件12 
1.3.1多处理器系统13 
1.3.2同构式多计算机系统15 
1.3.3异构式多计算机系统16 
1.4分布式系统的软件17 
1.4.1分布式操作系统18 
1.4.2网络操作系统26 
1.4.3中间件28 
1.5客户?服务器模型33 
1.5.1客户与服务器33 
1.5.2应用程序的分层38 
1.5.3客户?服务器体系结构40 
1.6小结43 
习题43第2章通信45 
2.1分层协议45 
2.1.1低层协议48 
2.1.2传输协议50 
2.1.3高层协议52 
2.2远程过程调用54 
2.2.1基本的RPC操作55 
2.2.2参数传递58 
2.2.3扩展的RPC模型61 
2.2.4实例： DCE RPC64 
2.3远程对象调用68 
2.3.1分布式对象68 
2.3.2将客户绑定到对象70 
2.3.3静态远程方法调用与动态远程方法调用72 
2.3.4参数传递73 
2.3.5实例1： DCE远程对象74 
2.3.6实例2： Java RMI76 
2.4面向消息的通信79 
2.4.1通信中的持久性和同步性79 
2.4.2面向消息的暂时通信83 
2.4.3面向消息的持久通信86 
2.4.4示例： IBM MQSeries91 
2.5面向流的通信95 
2.5.1为连续媒体提供支持95 
2.5.2流与服务质量98 
2.5.3流同步101 
2.6小结103 
习题104第3章进程107 
3.1线程107 
3.1.1线程简介107 
3.1.2分布式系统中的线程112 
3.2客户114 
3.2.1用户界面114 
3.2.2客户端软件与分布透明性116 
3.3服务器117 
3.3.1设计上常见的重要问题117 
3.3.2对象服务器120 
3.4代码迁移125 
3.4.1代码迁移方案125 
3.4.2迁移与本地资源128 
3.4.3异构系统中的代码迁移131 
3.4.4实例： D’Agents132 
3.5软件代理136 
3.5.1分布式系统中的软件代理136 
3.5.2代理技术138 
3.6小结140 
习题141第4章命名144 
4.1实体的命名144 
4.1.1名称、标识符和地址144 
4.1.2名称解析148 
4.1.3名称空间的实现152 
4.1.4示例： 域名系统158 
4.1.5示例： X.500161 
4.2移动实体的定位165 
4.2.1实体命名与定位165 
4.2.2简单方法167 
4.2.3基于起始位置的方法169 
4.2.4分层方法171 
4.3删除无引用的实体176 
4.3.1无引用对象的问题177 
4.3.2引用计数178 
4.3.3引用列表181 
4.3.4标识不可到达实体182 
4.4小结187 
习题188第5章同步190 
5.1时钟同步190 
5.1.1物理时钟191 
5.1.2时钟同步算法194 
5.1.3使用同步时钟197 
5.2逻辑时钟198 
5.2.1Lamport时间戳199 
5.2.2向量时间戳201 
5.3全局状态203 
5.4选举算法206 
5.4.1欺负（Bully）算法206 
5.4.2环算法207 
5.5互斥208 
5.5.1集中式算法208 
5.5.2分布式算法209 
5.5.3令牌环算法211 
5.5.4三个算法的比较212 
5.6分布式事务213 
5.6.1事务模型213 
5.6.2事务的分类216 
5.6.3实现218 
5.6.4并发控制220 
5.7小结226 
习题227第6章一致性和复制229 
6.1简介229 
6.1.1复制的目的230 
6.1.2对象复制230 
6.1.3作为扩展技术的复制232 
6.2以数据为中心的一致性模型233 
6.2.1严格一致性234 
6.2.2线性化和顺序一致性236 
6.2.3因果一致性239 
6.2.4FIFO一致性240 
6.2.5弱一致性242 
6.2.6释放一致性244 
6.2.7入口一致性245 
6.2.8一致性模型小结247 
6.3以客户为中心的一致性模型248 
6.3.1最终一致性249 
6.3.2单调读250 
6.3.3单调写251 
6.3.4写后读252 
6.3.5读后写253 
6.3.6实现254 
6.4分发协议256 
6.4.1副本放置256 
6.4.2更新传播259 
6.4.3epidemic协议262 
6.5一致性协议264 
6.5.1基于主备份的协议264 
6.5.2复制的写协议267 
6.5.3高速缓存相关性协议270 
6.6实例271 
6.6.1Orca272 
6.6.2因果一致的懒惰复制276 
6.7小结279 
习题280第7章容错性283 
7.1容错性简介283 
7.1.1基本概念283 
7.1.2典型故障285 
7.1.3使用冗余来掩盖故障287 
7.2进程恢复288 
7.2.1设计问题288 
7.2.2故障掩盖和复制290 
7.2.3故障系统的协议290 
7.3可靠的客户?服务器通信293 
7.3.1点到点通信293 
7.3.2出现失败时的RPC语义293 
7.4可靠的组通信298 
7.4.1基本的可靠多播方法298 
7.4.2可靠多播中的可扩展性299 
7.4.3原子多播301 
7.5分布式提交307 
7.5.1两阶段提交307 
7.5.2三阶段提交312 
7.6恢复313 
7.6.1简介314 
7.6.2检查点316 
7.6.3消息日志318 
7.7小结320 
习题321第8章安全性323 
8.1安全性介绍323 
8.1.1安全威胁、策略和机制323 
8.1.2设计问题328 
8.1.3加密331 
8.2安全通道337 
8.2.1身份验证338 
8.2.2消息完整性和机密性344 
8.2.3安全组通信346 
8.3访问控制349 
8.3.1访问控制中的一般问题349 
8.3.2防火墙352 
8.3.3保护移动代码354 
8.4安全管理359 
8.4.1密钥管理359 
8.4.2安全组管理363 
8.4.3授权管理364 
8.5实例： KERBEROS368 
8.6实例： SESAME370 
8.6.1SESAME组件370 
8.6.2PAC372 
8.7实例： 电子付费系统373 
8.7.1电子付费系统373 
8.7.2电子付费系统中的安全性375 
8.7.3协议实例377 
8.8小结381 
习题382第9章基于对象的分布式系统384 
9.1CORBA384 
9.1.1CORBA概述385 
9.1.2通信390 
9.1.3进程395 
9.1.4命名399 
9.1.5同步402 
9.1.6缓存与复制403 
9.1.7容错性404 
9.1.8安全性406 
9.2分布式组件对象模型(DCOM)408 
9.2.1DCOM概述408 
9.2.2通信413 
9.2.3进程415 
9.2.4命名417 
9.2.5同步420 
9.2.6复制420 
9.2.7容错性420 
9.2.8安全性421 
9.3Globe423 
9.3.1Globe概述423 
9.3.2通信430 
9.3.3进程430 
9.3.4命名432 
9.3.5同步435 
9.3.6复制435 
9.3.7容错性437 
9.3.8安全性438 
9.4CORBA、DCOM和Globe的比较439 
9.4.1基本原理439 
9.4.2通信440 
9.4.3进程441 
9.4.4命名441 
9.4.5同步442 
9.4.6缓存与复制442 
9.4.7容错性442 
9.4.8安全性442 
9.5小结444 
习题444第10章分布式文件系统446 
10.1SUN网络文件系统446 
10.1.1NFS概述447 
10.1.2通信450 
10.1.3进程451 
10.1.4命名452 
10.1.5同步458 
10.1.6缓存和复制462 
10.1.7容错性464 
10.1.8安全性466 
10.2Coda文件系统469 
10.2.1Coda概述469 
10.2.2通信471 
10.2.3进程472 
10.2.4命名473 
10.2.5同步474 
10.2.6缓存和复制477 
10.2.7容错性480 
10.2.8安全性482 
10.3其他分布式文件系统484 
10.3.1Plan 9： 资源统一为文件485 
10.3.2xFS： 无服务器的文件系统489 
10.3.3SFS： 可扩展的安全性494 
10.4分布式文件系统的比较496 
10.4.1设计理念497 
10.4.2通信497 
10.4.3进程497 
10.4.4命名498 
10.4.5同步499 
10.4.6缓存和复制499 
10.4.7容错性499 
10.4.8安全性500 
10.5小结501 
习题501第11章基于文档的分布式系统503 
11.1WWW503 
11.1.1WWW概述504 
11.1.2通信511 
11.1.3进程515 
11.1.4命名520 
11.1.5同步522 
11.1.6缓存和复制522 
11.1.7容错性526 
11.1.8安全性526 
11.2Lotus Notes527 
11.2.1Lotus Notes概述527 
11.2.2通信529 
11.2.3进程530 
11.2.4命名531 
11.2.5同步533 
11.2.6复制533 
11.2.7容错性535 
11.2.8安全性535 
11.3WWW和Lotus Notes的比较538 
11.4小结542 
习题542第12章基于协作的分布式系统544 
12.1协作模型介绍544 
12.2TIB/Rendezvous546 
12.2.1TIB/Rendezvous概述546 
12.2.2通信548 
12.2.3进程551 
12.2.4命名551 
12.2.5同步553 
12.2.6缓存和复制554 
12.2.7容错性554 
12.2.8安全性556 
12.3Jini557 
12.3.1Jini概述558 
12.3.2通信560 
12.3.3进程561 
12.3.4命名563 
12.3.5同步565 
12.3.6缓存和复制567 
12.3.7容错性567 
12.3.8安全性567 
12.4TIB/Rendezvous和Jini的比较568 
12.5小结571 
习题571第13章阅读材料和参考书目573 
13.1对进一步阅读的建议573 
13.1.1介绍性和综述性的著作573 
13.1.2通信574 
13.1.3进程575 
13.1.4命名576 
13.1.5同步576 
13.1.6一致性与复制577 
13.1.7容错性578 
13.1.8安全性579 
13.1.9面向对象的分布式系统580 
13.1.10分布式文件系统581 
13.1.11基于文档的分布式系统582 
13.1.12基于协作的分布式系统583 
13.2参考书目列表583