【前言】
Distributed Systems:Concepts and Design,Fifth Edition
在互联网和Web持续发展并且对我们社会的每个方面都产生影响的时候,这本教材的第5版问世了。本书的介绍性章节提到互联网和Web对诸多(如金融、商业、艺术、娱乐等)应用领域的影响以及对信息社会的普遍影响。它还强调了诸如Web搜索和多人在线游戏等应用领域中的需求。从分布式系统的角度出发,这些开发在应用的范围、多个现代系统所支持的工作负载和系统大小等方面正在对底层系统架构提出实质性的新需求。重要的趋势包括网络技术上不断增加的多样性和普遍性(包括不断增加的无线网络的重要性)、移动和无处不在计算元素及分布式系统架构的集成(这导致了相当不同的物理体系结构),还包括支持多媒体服务的需求和云计算模式���出现,这些都对分布式系统服务的观点提出了挑战。
本书旨在提供对互联网和其他分布式系统原理的理解,提供这些系统的体系结构、算法和设计,展示它们如何满足当代分布式应用的需求。本书的前7章覆盖分布式系统研究的基础部分。前两章提供对主题的概念性概述,介绍了分布式系统的特征和在系统设计中所必须解决的挑战:*重要的可伸缩性、异构性、**性和故障处理。这两章还开发了用于理解交互过程、故障和**性的抽象模型。随后是其他基础性章节,这些章节介绍了网络研究、进程间通信、远程调用、间接通信和操作系统支持。
后续的章节涉及中间件这个重要的主题,考察了支持分布式应用的不同的方法,包括分布式对象和组件、Web服务和对等解决方案。接下来的章节涉及**、分布式文件系统和分布式命名系统这些已被完善的主题,然后介绍了与数据相关的重要方面(包括分布式事务和数据复制)。与这些主题相关的算法也在它们出现时被论及,或者在专门论述定时、协调和协定等单独的章节中介绍。
本书接着论述移动和无处不在计算以及分布式多媒体系统这些新出现的领域,然后给出了一个内容充实的实例研究,从搜索功能和由Google提供的不断扩展的附加服务(例如,Gmail和Google Earth)两个角度,关注支持Google的分布式系统基础设施的设计和实现。*后一章综述了本书所介绍的所有这些体系结构概念、算法和技术,诠释了如何在一个给定应用领域的整体设计中将这些内容组织在一起。
第5版新增部分
新的章节
间接通信(第6章),包括组通信、发布-订阅,对JavaSpaces、JMS、WebSphere和Message Queues的实例研究。
分布式对象和组件(第8章),包括基于组件的中间件和对企业版JavaBeans、Fractal和CORBA的实例研究。
分布式系统设计:Google实例研究(第21章),专门针对Google基础设施的新的大的实例研究。
新增到其他章节中的主题 云计算、网络虚拟化、操作系统虚拟化、消息传递接口、无结构的P2P、元组空间、与Web服务相关的松耦合。
其他新的实例研究 Skype、Gnutella、TOTA、L2imbo、BitTorrent、End System Multicast。
关于内容更新的更详细的情况,参见Ⅷ页中的表。
目的和读者群
本书可用做本科生教材和研究生的入门教材,也可作为自学教材。本书采用自顶向下的方法,首先叙述在分布式系统设计中要解决的问题,然后,通过抽象模型、算法和对广泛使用的系统进行详细的实例研究,描述成功开发系统的方法。本书覆盖的领域有足够的深度和广度,以便读者能继续研究分布式系统文献中大多数的研究论文。
本书针对具有面向对象编程、操作系统、初级计算机体系结构等基础知识的学生。本书覆盖与分布式系统有关的计算机网络,包括互联网、广域网、局域网和无线网的基本技术。本书中的算法和接口大部分用Java描述,小部分用ANSI C描述。为了表述上的简洁明了,还使用一种从Java/C派生出来的伪码。
本书的组织
下图显示的本书章节可归在7个主要的主题领域。该图提供了本书的结构指南,也为教师、读者提供了一个导航路径,以便于他们理解分布式系统设计中的不同子领域。
参考文献
万维网的存在改变了书(例如本书)与源材料(包括研究论文、技术规约和标准)的链接方式。许多源文件现在可从Web上获取,有一些甚至只能从Web上获得。出于简洁和可读性的考虑,本书对Web参考材料采用了一种特殊的格式,类似URL参考文献,诸如[www.omg.org]和[www.rsasecurity.com I]的参考文献指的是仅能从Web上获得的文档。在本书结尾的参考文献清单中可以找到它们,但是完整的URL仅在本书参考文献的联机版本(www.cdk5.net/refs)上给出。两个版本的参考文献都有对这种机制的详细解释。
与第4版相关的改变
在开始新版本写作之前,我们针对使用第4版的教师做了一个调查,并根据调查结果识别出所需要的新材料和需要做的修改。此外,我们认识到不断增加的分布式系统的多样性,特别是从当前可用于分布式系统***的体系结构方法的范围来说。这些都要求本书做重要的改变,特别是前面(基础性)的章节。
总之,这些使得我们编写了全新的3章,对其他一些章节做了实质性的修改,并在书中多处补充了新的内容。对许多章节进行了改变以反映所描述系统的新的、可用的信息。这些修改总结在下面的表格中。为了帮助已使用过第4版的教师,只要可能,我们就保留了前一版本采用的结构。对于已被删除的材料,我们把它放在与书配套的Web网站上,并与以前版本中被删除的材料放在一起。这些被删除的材料包括关于ATM的实例研究、UNIX中的进程间通信、CORBA(其精减的版本仍然保留在第8章中)、Jini分布式事件规约和(以OGSA和Globus工具集为特色的)网格中间件,以及关于分布式共享内存的章节(对它的简明总结现在被包含在第6章中)。
在本书的一些章节中,例如新的关于间接通信的章节(第6章)包含了许多材料。教师在选择2~3项技术做详细的讲解之前可以选择广泛的内容(例如,组通信,假定它的基本角色,以及发布-订阅或消息队列,假定它们在商业分布式系统中的盛行)。
章节的顺序已经修改以容纳新的材料,并反映对某些主题相对重要性的改变。为了完全理解某些主题,读者可能发现附带一个参考文献是必要的。例如,如果第9章引用的第11章**的章节被理解,那么第9章关于XML**技术的内容可以被更好地理解。
本书结构变动如下表所示:
新增的章:第6章 间接通信 包括了第4版的事件和通知第8章 分布式对象和组件 全部包括了来自第4版的CORBA实例研究第21章 分布式系统设计:Google实例研究 包含一个新的关于Google的大的实例研究有实质性改变的章:第1章 分布式系统的特征 重要材料的重构:新增1.2节和1.3.4节关于云计算的介绍第2章 系统模型
重要材料的重构:新增2.2节,2.3节重写以反映新书的内容和相关的体系结构观点第4章 进程间通信
几处更新:客户-服务器通信移到了第5章;新增4.5节(包括了关于Skype的实例研究);新增4.6节;删除了对UNIX的IPC的实例研究第5章 远程调用
重要材料的重构:客户-服务器通信移到该章;介绍了从客户-服务器通信到RPC以及RMI的发展;事件和通知移到了第6章增加了新内容或删除了内容的章,但没有结构性改变:第3章 网络和网际互连 几处更新:3.5节删除了ATM的材料第7章 操作系统支持 新增7.7节第9章 Web服务 9.2节新增了松耦合的讨论第10章 对等系统 新增10.5.3节讨论了非结构化对等系统(包括了新的Gnutella实例研究)第15章 协调和协定 组通信的材料移到了第6章第18章 复制 组通信的材料移到了第6章第19章 移动和无处不在计算 19.3.1节增加了元组空间(TOTA和L2imbo)的材料第20章 分布式多媒体系统 20.6节补充了新的实例研究,增加了BitTorrent和End System Multicast
剩下的章节仅做了少量的修改。
致谢
我们非常感谢下列参加了我们调查的教师:Guohong Cao、Jose Fortes、Bahram Khalili、George Blank、Jinsong Ouyang、JoAnne Holliday、George K.Thiruvathukal、Joel Wein、Tao Xie和Xiaobo Zhou。
我们要感谢下列审阅新章节或提供其他实质性帮助的人:Rob Allen、Roberto Baldoni、John Bates、Tom Berson、Lynne Blair、Geoff Coulson、Paul Grace、Andrew Herbert、David Hutchison、Laurent Mathy、Rajiv Ramdhany、Richard Sharp、Jean-Bernard Stefani、Rip Sohan、Francois Taiani、Peter Triantafillou、Gareth Tyson和已故的Maurice Wikes先生。我们还要感谢Google的员工,他们的见解剖析了Google基础设施的设计合理性,他们是:Mike Burrow、Tushar Chandra、Walfredo Cirne、Jeff Dean、Sanjay Ghemawat、Andrea Kirmse和John Reumann。
这本书的编辑Rachel Head也提供了重要的支持。
Web站点
和以前一样,我们在一个Web站点中提供了大量的材料,用于帮助教师和读者。读者可通过URL访问该网站:www.cdk5.net。
该Web网站包括:
教师指导 我们为教师提供下列辅助性材料:
本书全部的插图(以PowerPoint文件的方式);
按章给出的教学提示;
练习的答案(有口令保护,仅对教师开放)。
参考文献清单 本书结尾处的参考文献清单也可在Web网站上找到。参考文献清单的Web版本包含可联机获得的材料的Web链接。
勘误表 给出书中的错误和改正清单。错误在本书重印时被更正,针对每次印刷提供一个单独的勘误表。(鼓励读者报告遇到的任何明显的错误到下面的电子邮件地址。)
补充材料 我们为每一章提供一套补充材料。包括书中程序的源代码和相关的阅读材料,主要是本书上一版本有的但在本版本中因篇幅的缘故而被删除的材料,该类补充材料在本书中用类似www.cdk5.net/ipc(该URL提供与第4章“进程间通信”相关的补充材料)的链接表示。第4版的两个完整的章在新版中不再出现,它们可以在下面的URL处找到:
CORBA实例研究:www.cdk5.net/corba。
分布式共享内存:www.cdk5.net/dsm。
George Coulouris
Jean Dollimore
Tim Kindberg
Gordon Blair
伦敦,布里斯托尔,兰开斯特,2011
authors@cdk5.net