系统编程:分布式应用的设计与开发
作者 : [英]理查德·约翰·安东尼(Richard John Anthony)著
译者 : 张常有 封筠 等译
丛书名 : 计算机科学丛书
出版日期 : 2017-10-27
ISBN : 978-7-111-58256-4
定价 : 129.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 442
开本 : 16
原书名 : Systems Programming: Designing and Developing Distributed Applications
原出版社: Elsevier (Singapore) Pte Ltd
属性分类: 教材
包含CD : 无CD
绝版 :
图书简介

本书阐述了分布式系统的理论、设计挑战与解决方案,采用一种易于理解和阅读的写作风格,尽量避免难懂的术语。本书的独特之处是,它围绕着四个视角(进程、通信、资源及体系结构)组织内容,以横跨多门传统学科领域界限的方式讲解分布式系统的基本特性,特别强调透明性这一重要设计目标。本书鼓励读者从不同的角度探究这些概念,以达到从组件层面和整体层面深入地理解系统的目的。

图书特色

本书作者讲授分布式系统课程超过十年,深知传统教学方法的壁垒和教材的局限性。为此,本书在两大方面着力创新:跨学科,强调全局视角和系统思维;重实践,配备可行方法和实用工具。书中为初学者和程序员铺设了不同的学习路径,理论知识和案例活动穿插有序,习题及解答、源代码和仿真工具配备齐全。本书在英国多所高校的教学实践中广受好评,对于国内计算机学科的相关课程也颇具借鉴价值。
本书特色
四个视角,一套体系。从“进程、通信、资源、体系结构”四个视角建立全局观,以系统思维打破学科界限,将计算机网络、操作系统、分布式系统、软件工程等单一专业的知识集成起来,从底层基础到顶层架构,透彻讲解分布式应用的开发方法,培养系统设计能力。
教学有方,实践有道。主案例井字棋游戏贯穿所有视角,最后两个综合案例融会全书知识,深度探索应用开发的全生命周期,特别强调系统的“透明性”。每个视角都包含精心设计的实践活动,操作方法、仿真工具、结果分析皆细致清晰,全方位提升实践教学质量。
免费教辅,自主进阶。Workbench软件专为本书打造,可进行调度算法、TCP协议和死锁等仿真实验,动态呈现系统的复杂特性。其配置灵活且无需编写底层代码的特点,适合不同层次的读者定制个性化学习进度,此外,还提供C++、Java、C#三种语言的示例代码。

理查德·约翰·安东尼(Richard John Anthony) 博士毕业于英国约克大学计算机专业,拥有20多年的教育教学和技术研发经验。现任教于格林威治大学计算与信息系统系,还曾作为技术顾问和系统开发人员从事商业项目的研发和管理工作。

张常有 博士毕业于北京理工大学计算机专业。现任中国科学院软件研究所研究员,主要研究方向为并行与分布式系统、智能信息网络等。

图书前言

本书全面讲解分布式应用程序的设计和开发,主要强调多组件系统的通信特性,以及系统设计与底层操作系统、网络、协议等行为的相互影响方式。
当前,商业乃至全社会对分布式系统和应用日益依赖。对于有能力设计优质解决方案的训练有素的工程师而言,其需求也在同步增长。这需要高超的设计技能和优秀的实现技术。同样,工程师们更愿意让应用程序以全局方式使用系统资源,并受控于宿主系统的整体配置和行为表现。
本书采用综合的方法,讲解了多门传统的计算机科学学科,包括操作系统、网络、分布式系统、编程等,并将需要的背景和理论以多种运行案例形式置入应用程序和系统环境中。这本书是多维的,它具有问题剖析的风格,并通过分布式应用程序用例的开发,实现了理论基础与实战之间的平衡。
通过穿插的实践活动,读者在阅读中真正体验了书本内容、实验操作和模拟执行。在这些实践环节中,系统的动态特性以生动的方式呈现,可以传达更多信息,让系统的复杂特性变得容易理解。大多数配套实验和模拟是用户可配置的,以支持“假设”探究,留给读者深入理解的机会。实践性编程的挑战涵盖系统的诸多方面,包括构建完整的分布式应用程序。本书提供了文档齐全的示例源代码以及清晰的任务指南,通过扩展示例代码来添加功能并构建系统,使这些挑战变得易于教学。
初衷和目标
分布式应用程序的设计与开发是计算机科学领域中的交叉课题。从根本上说,它基于的概念和机制抽取自几门传统的核心学科方向,包括计算机网络、操作系统、分布式系统(理论而非开发)以及软件工程。目前,绝大多数高质量教材只关注单一学科方向,有传统意义上划定的清晰范围边界。它们多数在风格和方法上以理论为主。
编写本书初期,我已讲授了多年分布式应用这门面向实践的课程,很清楚没有一本教材能以实践为中心,全面讲解分布式应用程序的设计和开发这一主题。实际上,我当时想要的是一本指导书,既用作我自己课程的主教材,也能为其他喜欢的人所使用。我也曾想有一本能被我的学生读懂的书。学生是多样性群体,他们的学习经验不同,自信心也有强有弱。我曾想,用一本书来鼓励那些在软件工程方面刚刚起步的人,同时,也能满足那些期望更高挑战的、较有经验的学习者的需要。我的课程强调理论与实践相结合,教学工作开展13年来,效果良好,并深受学生喜爱。有时,在讨论课程配套教材缺乏可用性时,学生们建议我自己直接在这门课程的基础上编写一本。
本书内容填补了一项清晰定义的空白。它是一本综合性教程,以“自成体系”方式讲述了多种底层概念,以便读者能在领会跨系统全局的同时,理解关键基础理论,并能在支撑实践活动中进行探索。这全部源自“自成体系”。就这一点而论,本书区别于其他主流教材。传统教材倾向于专注单一的传统主题领域,更侧重理论性基础教学。
本书专门用于讲授以“理论与实践相结合”为重点的分布式应用程序设计课程。本书主要聚焦于应用程序开发,以及为确保高质量教学效果而必需的支撑知识。这种组织方式使得本书能自然地连接计算机科学的相关领域。它没有尝试像传统方式一样组织教材(例如,仅关注网络或者操作系统),也没有试图囊括该领域尽可能宽广的内容(传统教材往往如此)。相反,它提供了横跨这些学科的非常重要的集成。本书的主要设计专注于易于教学,基于示例程序来阐述分布式系统和应用的关键特性,同时基于案例研究、互动教学工具和实践活动来展开细节讨论。主要目的是便于读者理解基于套接字应用的实际示例程序,进而起步开发他们自己的应用程序,并以此作为与书本阅读同步的指导性环节。
本书的理论方面和大部分实践方面具备跨语言的可移植性,但其实现方面有语义上的语言依赖性。为尽可能易于学习,部分示例代码采用了3种流行的编程语言:C++、Java和C#。
附加资源代码库内容丰富,包括各种课内实例的示例程序代码和章末编程任务的示例方案,以及全部三个案例研究的完整源代码。
附加资源还包括作者搭建的教学工具Workbench套装的特定版本。这个工具可用于课内活动,也可用于不同主题的独立研究或导师指导下的科学探索,或者用于给课堂教学或实验项目注入活力。Workbench的灵感源自对以逼真且易理解的方式表现系统动态特性方面的需求,曾经尝试用一系列静态图表讲授调度(一个包含更多动态特性的例子)的教师,一定能体会到静态方法的局限性。静态方法在表达动态行为所能展现的真正含义方面存在困难。Workbench专门为克服系统动态性和复杂性教学方面的局限性而设计,支持用户自行配置具体实验和模拟,涵盖了网络、分布式系统和操作系统领域的很多不同内容。每章都包含相应的实践活动,引导读者在实践学习和基础理论概念之间建立联系。
本书非常强调针对核心理论的有指导的实践探索,使其既适合用作自学教程,又适合用作课程的辅助教材。
预期读者
本书的预期读者对象比较广泛,包括:
讲授分布式系统的教师,需要一本“自成体系”的教材,包含实践活动、编程练习和案例研究,能用作生动有趣的课堂读物。
正在学习应用程序开发的学生,需要一本书汇聚分布式系统、操作系统、网络等多个不同方面,配以众多清晰的实践案例和丰富的样例代码库。
对于分布式应用程序设计与开发或套接字编程有经验的程序员,或许需要一本快速入门资料,以启动一个分布式应用项目。
正在学习C++、Java或C#语言的初级程序员,期望提高挑战性,编写套接字网络应用程序。
熟悉本书支持的语言之一的套接字程序员,需要仿照样例程序资源,以便在两门语言之间展开交叉训练。
学习计算机科学其他方向的学生,希望在分布式系统方面找到自学导读形式的、注重实践的基础读物。
组织结构
本书的核心部分包括四章(第2~5章,即四个视角),涵盖背景概念、技术需求、当前挑战以及构建分布式应用程序的必备技术和支持机制。本书选定这四个特定视角,以便材料分门别类,从设计和操作角度看都很有意义。该方法使读者能够以结构化的思维方式仔细理解系统的底层概念和系统机制,跨越了传统教学学科的界限。
随后的第6章定位于高级分布式系统本身。该章的重要工作是将前述核心章节中讨论的思想、概念、机制等融进总体系统环境,并关注公共服务,以确保系统在功能和非功能需求方面的高质量。
各章都强调实践,穿插着实验和实践探索活动,以及一个贯穿各核心章节的案例研究,从而整合和交叉连接各章。为拓展介绍分布式应用程序的体系结构、组成、行为、运行环境等,最后一章附加两个容易操作的案例研究,并提供清晰的文档和完整代码。
绪论(第1章)开始本书,也启动了本书采用的综合系统方法。它针对分布式计算的兴起及其在现代环境中的重要性,提供了简明的历史回顾。它还简短地介绍了一些将在后面章节中深入讲述的关键主题。但对于读者来讲,在起初建立基本的认识是有必要的。这些基本主题包括:分布式系统的大体特性、分布式系统的主要优势、构建分布式应用程序必须面临的主要挑战、分布式系统的质量和性能的度量标准以及透明性的主要形式等。其中还介绍了三个案例研究、本书配套网站上的教辅材料、课内实践活动以及互动教学工具Workbench套件。
进程视角(第2章)考察进程的管理方式及其对低层通信的影响,涉及进程调度与阻塞、消息的缓冲与传送、端口和套接字的使用以及进程与端口的绑定机制等。绑定机制使操作系统能代表本地进程,在计算机层面管理通信。还讨论了多进程环境概念、线程以及操作系统资源,如定时器。
通信视角(第3章)考察网络和通信协议的运行方式,及其功能性和行为对应用程序的设计和表现的影响。本视角关注的主题包括:通信机制和不同的通信模式,比如单播、多播和广播,且选定的方式能影响应用程序的行为、性能和扩展性。描述了传输层协议TCP和UDP的功能和特点,并对比了其性能、延迟和开销方面。从开发者的视角,检测了通信的底层细节,包括套接字API原语的作用和操作。同时,还检测了远程过程调用和远程方法调用等更高级的通信机制。
资源视角(第4章)阐述计算机系统资源的本质及其对分布式应用程序通信的帮助作用。感兴趣的物理资源包括处理能力、网络通信带宽和内存。讨论聚焦于有限资源的高效使用方面的需求等,它直接影响到应用程序和系统自身的性能和可扩展性。还讨论了内存在消息的组装、发送、接收缓冲器方面的使用情形。
体系结构视角(第5章)阐述分布式系统及应用程序的结构。主要聚焦于把应用程序逻辑划分为若干功能组件的各种模型,以及这些功能组件互连互访的方式。还讨论了系统组件映射到系统底层资源的方式,以及映射关系引出的附加功能需求,例如,对灵活的运行时配置的需求。分类讨论了不同架构模型对关键非功能性质量度量的影响,如可扩展性、健壮性、效率、透明性。
分布式系统(第6章)紧随四个核心视角章节,形成了前面各章节的大背景。四个视角分别阐述了某一方面的支撑理论的特性、概念和机制,而这一章定位于较高层面,重点关注分布式系统本身,及其关键特征和功能性需求,以及与设计和开发相关的特殊挑战等。因此,该章从更宽泛的系统角度审视核心章节的内容,讨论因分布式特性本身而导致的问题,以及解决这些问题的技术。“透明性”是追求分布式应用程序质量的关键,因此“透明性”成为贯穿各章的主题,既与各章涵盖的不同专题相关,同时也成为案例研究讨论中的主要关注方面。为进一步强调其重要性,这一章全面讲述了“透明性”,使其成为一个独立的主题,定义了“透明性”的10种重要形式,并根据各自的重要性以及对系统和应用的影响方式进行探讨,解释了实现不同形式的“透明性”需要采用的技术。此外,还介绍了公共服务、中间件以及异构环境下支持互操作能力的技术。
案例研究:融会贯通(第7章)以两个详尽的分布式应用程序案例研究的形式,把前面章节的内容联系起来。以这两个案例为载体,阐明了许多不同的问题、挑战、技术以及机制。目标是提供一个综合的全貌,用于审查应用程序贯穿的全生命周期。这一章采用了“问题-求解”的方法,该方法基于提供的可行应用程序、程序源代码以及详尽文档。这些应用程序建立并加强了理论与实践之间的联系,阅读过程中有必要参考前面的章节。
课内活动
一系列实践活动贯穿于第2~6章,用于借助实验强化关键概念。各活动都基于特定概念或机制植入系统或应用环境中。
如何使用本书
本书采用这样的设计风格是为了灵活地支持读者需求的广泛性和多样性。建议用途如下。
用作一门课程的主教材。这是编写本书的主要动机。本书以一门成功的“设计和构建分布式应用系统”课程为基础,全面讲述了分布式应用程序的核心主题,辅以详细的实践活动、可用示例、案例研究、章末问题以及带解决方案的编程挑战等。本书还包含范围广泛的基础支撑技术资料,包括概念、问题、机制以及需要理解的系统特性相关策略。
鉴于采用了交叉综合方法并提供了扩展的资源库,本书准备了理想的课程大纲。教师可以根据他们希望达到的技术深度和学生的知识水平,围绕本书灵活地编排课程。本书的资源网站上提供了以C++、Java和C#三种语言编写的示例程序的源代码。
基于Workbench的活动可用于课堂演示或指导性练习,或者用于指定的自学过程。这些环节也可以用于模拟调度、线程优先级或死锁等活动,用图解方式解释相关的动态行为(众所周知,有些内容很难仅使用静态图表的手法教会学生)。生动的模拟可以产生令人兴奋的教学效果。比如,通过暂停模拟,请学生猜想接下来会发生什么,或者通过多次使用不同条件运行模拟实验,展示特定配置怎样影响系统行为。
网络版Workbench实验可以用来演示在进程间建立通信和通过网络发送消息的过程。它可用于探索套接字原语的使用,诸如阻塞和缓冲机制的性能特性,以及TCP和UDP传输协议的行为。例如,在课堂上,可使用动态的真实多进程,探索TCP中“绑定-侦听-连接-接受”序列对建立连接的必要性。
Workbench活动还可用于建立多种多样的学生实验室练习或家庭作业,例如,用于评估通信效率、通信死锁可能发生的情景,或者可能使用详尽的统计结果,从效率、公平性、吞吐率方面对比多个调度算法。
分布式系统版Workbench可帮助我们搭建分布式实验,如一个运行在实验室中全部计算机上的选举算法实验。学生们能够测试一些场景,如终止当前主进程并预测下一步表现。我们可以启动多个主进程实例,观察算法如何应对这种情形。配备的日志程序记录进程状态变化的运行时序列,用于后期分析。另一个例子是探索“客户端-服务器”游戏应用程序,并要求学生根据观察到的游戏过程,尝试通过逆向工程方法推测出发生的消息序列。这类挑战非常有利于鼓励深度探索。
全部用例均可运行,且可改编成学习和评估练习,或者作为开发更大型项目的起点。
章末编程练习可用作测评活动或补习活动。既可以直接使用,也可以强化挑战,视班上学生的知识水平而定。
用作自学辅导书。本书是一本独立学习的理想辅导书。书中提供了大量辅助实践的技术文档,便于读者自学。阅读过程中对照示例解决方案(针对编程挑战)、解释预期输出结果(针对课内活动)和章末问题答案,能够检查自己的学习进展。Workbench提供的实验和模拟工具支持用户自行配置参数,便于自学者保持自己的学习进度,同时探索自己想要的深度。开发Workbench的主要原因之一是我发现大家的学习速度各不相同。对于相同内容,有的读者轻松领会,而有的读者却可能起步蹒跚。因此,Workbench支持个性化和渐进式的学习。
通过提供以三种流行的语言编写的示例应用程序,本书还可以用作套接字API和传输层协议(TCP和UDP)的“罗塞塔石碑”—一旦读懂其中一门语言的实现,就能够贯通使用该示例的其他语言版本。这对特定场景很有帮助,例如,正在开发的系统中有一部分组件用一种语言开发(比如服务器端用C++),而另一部分组件用另一种语言开发(如客户端用C#)。在第7章中最后的案例研究中,专门强调了异构特性和互操作特性。从制定自学目标和学习效果的角度看,这些用例是一种强有力的学习资源,能帮助读者逐个掌握这些知识点,并且完全按照适合自己的时间进度,兼顾了读者在这方面的起步知识准备。
用作辅助教材。本书的主题交叉集成了传统的主题领域,包括网络、操作系统、程序设计、分布式系统理论。鉴于其清晰的解释和对实践能力的重点强调,本书是一本理想的辅助教材,适用于网络、应用程序开发、操作系统等课程,附加的多种活动和编程练习更添加了趣味性。与强调传统知识结构和面向理论的教材相比,它风格迥异,适合与其他专门的教材共同使用,为学生补充不同的信息来源。同时,还有助于在一定程度上填补主要教学内容与其他课程之间的交叉形成的缺口(本书很擅长)。
基于Workbench的活动都适合单独拿出来使用。例如,读者也许只选用操作系统版Workbench活动的一个子集(或者其他子集),为部分难学的课程内容添加些生动性,或者只是想用现场实验或模拟替换一长串的幻灯片。
用作带实践示例的参考教材。本书讲述了分布式系统领域宽泛的主题,涉及计算机网络、程序设计和操作系统等。本书有别于主流同类教材的是宽泛且大量的实践示例和源码资源。因此,它可用作一本变革性的参考指导书。对于大部分主题,读者都能找到相关的带指导的实践环节,或者带解决方案的编程挑战,或者一个或多个用例形式的上下文情景。
教辅资源
本书配套网站上提供了教辅材料,网址为booksite.elsevier.com/9780128007297。
材料在网站上的组织方式对应于书中相关章节,类型如下。
示例程序代码。本书为课内活动、相关举例、用例程序、编程练习的解决方案提供了示例代码,可按以下方式使用:
多数情况下,提供了完整的应用程序源代码,使读者能够学习整体应用程序逻辑,并把它和教材中的解释相联系。有些情况下,教材中提供了简短的代码片段来解释一个关键知识点,那么,读者可以检测整个应用程序代码,把程序片段插入程序逻辑的正确位置。许多示例代码都以三种语言提供:C++、Java、C#。
示例应用程序代码可用作开发章末练习解决方案的起点,在这种情况下,我们给出了最合适资源的相关指导。
也有一些针对章末编程练习的特定的示例解决方案(如果这些解决方案还没有在其他部分资源中给出示例)。
可执行文件。许多应用程序也提供了可执行文件的形式。读者可以直接运行应用程序,研究其表现,而不用先编译。在读者跟随着课内活动和例子学习时,这点尤其重要,它减少了花费在阅读和实践之间的切换时间。
Workbench教学工具。本书配有一组复杂的交互式教学应用程序(称为工作台)。我已经花了超过13年的时间开发它,提升了以学生为中心的灵活的教学方法,使学生能够远程、交互式、按照自己的节奏学习。三种版本的Workbench提供了可配置的模拟、仿真、实现组合功能,以方便读者针对系统中的许多基本概念展开实验。目前,Workbench已经在许多学生群体中尝试和测试,在一些教师的课上也用作了辅助支撑工具。书中特定的技术内容与特定的练习和实验相关联,可用Workbench软件工具开展实验。例如,网络版Workbench中有特定的实验,可处理寻址、缓存、阻塞或非阻塞的套接字I/O模式以及TCP和UDP传输协议的操作。
致谢
我谨向技术评审人员表示诚挚的感谢。他们抽出宝贵时间仔细阅读书稿,并提供了一些非常有价值的反馈意见和建议。
我还要感谢Morgan Kaufmann编辑团队在规划和撰写本书的过程中给予的建议和指导。
同时也要感谢过去学习我的系统编程课程的许多学生。他们提供了关于课程结构和内容的反馈,或者直接通过评论与建议,或者间接通过他们日后所取得的出色成就。特别感谢那些多年来建议我写这本书的学生们,我终于做到了。
还要感谢许多同事、朋友和家人给予我的鼓励。特别是,永远感谢可爱的Maxine一直以来给予我的极大耐心和支持,以及在我学习期间的端茶倒水。

上架指导

计算机\分布式

封底文字

本书作者讲授分布式系统课程超过十年,深知传统教学方法的壁垒和教材的局限性。为此,本书在两大方面着力创新:跨学科,强调全局视角和系统思维;重实践,配备可行方法和实用工具。书中为初学者和程序员铺设了不同的学习路径,理论知识和案例活动穿插有序,习题及解答、源代码和仿真工具配备齐全。本书在英国多所高校的教学实践中广受好评,对于国内计算机学科的相关课程也颇具借鉴价值。

本书特色:
·四个视角,一套体系。从“进程、通信、资源、体系结构”四个视角建立全局观,以系统思维打破学科界限,将计算机网络、操作系统、分布式系统、软件工程等单一专业的知识集成起来,从底层基础到顶层架构,透彻讲解分布式应用的开发方法,培养系统设计能力。
·教学有方,实践有道。主案例井字棋游戏贯穿所有视角,最后两个综合案例融会全书知识,深度探索应用开发的全生命周期,特别强调系统的“透明性”。每个视角都包含精心设计的实践活动,操作方法、仿真工具、结果分析皆细致清晰,全方位提升实践教学质量。
·免费教辅,自主进阶。Workbench软件专为本书打造,可进行调度算法、TCP协议和死锁等仿真实验,动态呈现系统的复杂特性。其配置灵活且无需编写底层代码的特点,适合不同层次的读者定制个性化学习进度,此外,还提供C++、Java、C#三种语言的示例代码。

作者简介

[英]理查德·约翰·安东尼(Richard John Anthony)著:
理查德·约翰·安东尼(Richard John Anthony) 博士毕业于英国约克大学计算机专业,拥有20多年的教育教学和技术研发经验。现任教于格林威治大学计算与信息系统系,还曾作为技术顾问和系统开发人员从事商业项目的研发和管理工作。 张常有 博士毕业于北京理工大学计算机专业。现任中国科学院软件研究所研究员,主要研究方向为并行与分布式系统、智能信息网络等。

译者序

本书的作者Richard John Anthony就职于格林威治大学(University of Greenwich),通过本书,他分享了13年的分布式系统教学和开发经验,以及多年来开发的配套模拟实验工具,还有用C++、C#、Java三种语言编写的实例程序的源代码。
随着互联网的加速发展,分布式系统已经延伸到人们工作、生活的深处。本书融会了分布式系统设计与开发方面完整的知识体系,以四个核心视角(进程、通信、资源、体系结构)为基础,再汇总到分布式系统,最后用两个编程实例总结。本书特别强调理论与实践的紧密结合,在实践活动中借助作者提供的Workbench教学工具,可深入理解分布系统的理论知识和运行行为。透明性是分布式系统的重要目标之一,这一目标贯穿了全书各章节。
张常有(中国科学院软件研究所)和封筠(石家庄铁道大学)是本书翻译工作的主要负责人。本书的前言由张常有负责,党云龙参加;第1章由张常有负责,许家栋参加;第2章由段淑凤负责,党云龙、胡晶晶、王婷、刘博参加;第3章由张常有负责,李震宇、居文军参加;第4章由封筠负责,段淑凤、王峰、王兵茹参加;第5章由封筠负责,王兵茹参加;第6章由张常有负责,党云龙参加;第7章由张常有负责,籍晨晖、赵朝栋参加;索引由张常有负责。此外,张常有还负责全书的统稿和审校。段淑凤和党云龙为翻译过程的组织付出了努力,感谢他们的贡献。
在翻译过程中,我们尽量反映原作者的思想和风格,同时也融入了自己的经验和理解。希望它的出版能够帮助读者在分布式系统设计与开发方面奠定理论基础,顺利开始实践之旅。
本书非常适合用作分布式系统设计与开发方面的教材,也适合用作相关课程的参考资料。同时,对于正在学习和练习编程的学习者,这也是一本很好的参考资料,因为书中用C++、C#、Java三种不同的语言开发了实例和源代码,它们都是分布式程序的范例,可作为项目开发的起点。
由于时间仓促,加之水平有限,书中翻译错误和不准确之处在所难免,敬请广大读者指正。

译者
changyou@iscas.ac.cn
于中国科学院软件园区

图书目录

出版者的话
译者序
前言
第1章 绪论1
1.1 基本原理1
1.1.1 计算机科学的传统讲授方法1
1.1.2 本书采用的系统方法2
1.2 网络和分布式系统在现代计算中的重要性—简明历史回顾4
1.3 分布式系统简介6
1.3.1 分布式系统的优势和挑战6
1.3.2 分布的本质7
1.3.3 分布式应用程序的软件体系结构8
1.3.4 分布式系统与应用的质量度量指标9
1.3.5 透明性简介9
1.4 案例研究简介10
1.4.1 主案例研究(分布式游戏)11
1.4.2 附加案例研究11
1.5 教辅材料和练习简介12
1.6 交互式教学工具Workbench套件14
1.7 示例代码和相关练习14
第2章 进程视角16
2.1 基本原理和概述16
2.2 进程16
2.2.1 基本概念16
2.2.2 创建进程16
2.3 进程调度21
2.4 实时系统调度46
2.5 在现代操作系统中使用的特定调度算法及其变体56
2.6 进程间通信57
2.7 线程:导论62
2.7.1 一般概念62
2.7.2 线程实现62
2.7.3 线程调度方法63
2.7.4 同步(顺序的)与异步(并发的)线程操作64
2.7.5 线程带来的额外复杂性68
2.7.6 多线程IPC举例70
2.8 操作系统的其他角色77
2.9 程序中使用定时器77
2.10 进程视角的透明性80
2.11 进程视角的案例研究80
2.11.1 调度要求80
2.11.2 定时器的使用81
2.11.3 多线程需求81
2.11.4 IPC、端口和套接字81
2.12 章末练习82
2.12.1 问题82
2.12.2 基于Workbench的练习83
2.12.3 编程练习87
2.12.4 章末问题答案88
2.12.5 本章活动列表88
2.12.6 配套资源列表89
第3章 通信视角90
3.1 基本原理和概述90
3.2 通信视角90
3.3 通信技术91
3.3.1 单向通信91
3.3.2 请求-应答通信96
3.3.3 双向数据传输100
3.3.4 寻址方法100
3.3.5 远程过程调用103
3.3.6 远程方法调用105
3.4 通信的分层模型107
3.4.1 OSI模型109
3.4.2 TCP/IP模型110
3.5 TCP/IP协议簇111
3.5.1 IP112
3.5.2 TCP113
3.5.3 TCP连接115
3.5.4 UDP116
3.5.5 TCP和UDP的比较118
3.5.6 TCP和UDP的选择119
3.6 地址119
3.6.1 扁平与分级编址120
3.6.2 链路层地址120
3.6.3 网络层地址121
3.6.4 传输层地址(端口)123
3.6.5 熟知端口号124
3.7 套接字125
3.7.1 套接字API:概述126
3.7.2 套接字API:UDP原语序列126
3.7.3 套接字API:TCP原语序列130
3.7.4 绑定(进程到端口)132
3.8 阻塞和非阻塞套接字行为135
3.8.1 非阻塞套接字行为的处理138
3.8.2 通信死锁138
3.9 错误检测与校正140
3.10 应用特定协议142
3.11 面向业务逻辑的通信整合143
3.12 帮助组件相互定位的技术144
3.13 通信视角的透明性需求145
3.14 通信视角的案例研究146
3.15 章末练习154
3.15.1 问题154
3.15.2 基于Workbench的练习154
3.15.3 编程练习157
3.15.4 章末问题答案157
3.15.5 Workbench练习的答案/结果158
3.15.6 本章活动列表159
3.15.7 配套资源列表159
第4章 资源视角169
4.1 基本原理和概述169
4.2 CPU资源169
4.3 通信中的存储器资源170
4.4 内存管理175
4.5 资源管理185
4.5.1 私有存储空间资源的静态分配与动态分配185
4.5.2 共享资源189
4.5.3 事务190
4.5.4 锁190
4.5.5 死锁193
4.5.6 资源复制196
4.6 网络资源197
4.6.1 网络带宽197
4.6.2 数据压缩技术202
4.6.3 消息格式205
4.6.4 序列化206
4.6.5 网络链路序列209
4.6.6 路由器与路由210
4.6.7 通信额外开销215
4.6.8 恢复机制及其与网络拥塞的相互作用215
4.7 虚拟资源217
4.7.1 套接字218
4.7.2 端口218
4.7.3 网络地址218
4.7.4 资源名称219
4.8 分布式应用程序设计对网络效率的影响220
4.9 资源视角的透明性220
4.10 资源视角的案例研究220
4.11 章末练习223
4.11.1 问题223
4.11.2 基于Workbench的练习223
4.11.3 编程练习226
4.11.4 章末问题答案226
4.11.5 Workbench练习的答案/结果227
4.11.6 本章活动列表228
4.11.7 配套资源列表228
第5章 体系结构视角229
5.1 基本原理和概述229
5.2 体系结构视角229
5.2.1 关注点分离230
5.2.2 网络化与分布性230
5.2.3 分布式系统的复杂性231
5.2.4 分层体系结构232
5.2.5 层级体系结构234
5.3 异构性234
5.3.1 异构性的定义和来源235
5.3.2 性能异构性235
5.3.3 平台异构性236
5.3.4 操作系统异构性236
5.3.5 异构性影响238
5.3.6 软件移植239
5.4 硬件和系统级体系结构240
5.4.1 紧耦合(硬件)系统240
5.4.2 松散耦合(硬件)系统240
5.4.3 并行处理241
5.5 软件体系结构242
5.6 软件体系结构分类法246
5.6.1 单层应用程序247
5.6.2 双层应用程序247
5.6.3 三层应用程序248
5.6.4 多层应用程序248
5.7 客户端-服务器249
5.7.1 客户端和服务器的生命周期249
5.7.2 连接的主动方和被动方250
5.7.3 CS体系结构模型250
5.7.4 CS模型的变体251
5.7.5 有状态服务与无状态服务252
5.7.6 模块化和层级CS系统253
5.8 三层和多层体系结构254
5.9 对等体系结构263
5.9.1 对等应用程序的特性264
5.9.2 对等体系结构连接的复杂性264
5.9.3 探索对等行为265
5.10 分布式对象268
5.11 中间件对软件体系结构的支持270
5.12 提供集体资源和计算资源的系统模型271
5.12.1 集群272
5.12.2 网格272
5.12.3 数据中心272
5.12.4 云273
5.13 软件库273
5.13.1 软件库案例275
5.13.2 静态链接和动态链接280
5.13.3 语言相关的特性:C/C++头文件281
5.14 硬件虚拟化283
5.14.1 虚拟机283
5.14.2 Java虚拟机284
5.15 静态和动态配置285
5.15.1 静态配置285
5.15.2 动态配置286
5.15.3 上下文感知286
5.16 分布式应用程序的非功能性需求287
5.16.1 复制288
5.16.2 复制的语义291
5.16.3 复制的实现291
5.17 分布式应用程序与网络之间的关系299
5.18 体系结构视角的透明性300
5.19 体系结构视角的案例研究301
5.19.1 有状态服务器设计301
5.19.2 游戏组件的关注点分离302
5.19.3 游戏应用程序的物理和逻辑体系结构302
5.19.4 游戏的透明性303
5.20 章末练习304
5.20.1 问题304
5.20.2 编程练习305
5.20.3 章末问题答案305
5.20.4 本章活动列表307
5.20.5 配套资源列表307
第6章 分布式系统309
6.1 基本原理和概述309
6.2 透明性309
6.2.1 访问透明性310
6.2.2 位置透明性311
6.2.3 复制透明性313
6.2.4 并发透明性316
6.2.5 迁移透明性319
6.2.6 故障透明性320
6.2.7 规模扩展透明性322
6.2.8 性能透明性323
6.2.9 分布透明性324
6.2.10 实现透明性324
6.3 公共服务324
6.4 名称服务325
6.4.1 名称服务的运行326
6.4.2 目录服务327
6.4.3 名称服务设计和实现的挑战332
6.5 域名系统333
6.5.1 域名空间334
6.5.2 DNS实现336
6.5.3 DNS名称服务器:权威和授权338
6.5.4 复制339
6.5.5 名称解析的进一步细节340
6.5.6 DNS中的缓存341
6.5.7 探索地址解析341
6.5.8 反向DNS查找344
6.6 时间服务344
6.6.1 时间服务简介344
6.6.2 物理时钟同步346
6.6.3 逻辑时钟与同步350
6.7 选举算法352
6.7.1 操作简介353
6.7.2 bully选举算法354
6.7.3 ring选举算法355
6.7.4 领导者预选356
6.7.5 针对一个选举算法的探索356
6.8 组通信 362
6.9 通知服务363
6.10 中间件:机制和操作365
6.11 中间件例子和支持技术367
6.11.1 公共对象请求代理体系结构367
6.11.2 接口定义语言373
6.11.3 可扩展标记语言375
6.11.4 JavaScript对象表示法376
6.11.5 Web服务与REST376
6.11.6 简单对象访问协议378
6.12 分布式系统的确定性和不确定性379
6.13 章末练习380
6.13.1 问题380
6.13.2 编程练习380
6.13.3 章末问题答案381
6.13.4 本章活动列表382
6.13.5 配套资源列表382
第7章 案例研究:融会贯通384
7.1 基本原理和概述384
7.2 用例说明384
7.3 案例研究1:时间服务客户端(基于库)385
7.3.1 学习目标385
7.3.2 需求分析385
7.3.3 体系结构和代码结构386
7.3.4 关注点的分离390
7.3.5 组件之间的耦合与绑定390
7.3.6 设计的通信特性391
7.3.7 实现394
7.3.8 测试395
7.3.9 用例的透明性396
7.3.10 案例研究资源397
7.4 案例研究2:事件通知服务397
7.4.1 学习目标398
7.4.2 需求分析398
7.4.3 体系结构和代码结构399
7.4.4 关注点的分离399
7.4.5 组件之间的耦合与绑定400
7.4.6 设计的通信特性401
7.4.7 事件通知服务的应用程序使用场景示例405
7.4.8 测试407
7.4.9 事件通知服务的透明性410
7.4.10 案例研究资源410
7.5 分布式应用程序的优秀设计实践410
7.5.1 需求分析410
7.5.2 架构方面411
7.5.3 通信方面412
7.5.4 尽可能重用代码412
7.5.5 为通过测试的代码和信任的代码创建库412
7.5.6 测试方面413
7.6 章末练习414
7.6.1 编程练习414
7.6.2 配套资源列表414
索引416

教学资源推荐
作者: 张建林 刘玉铭 申贵成 编著
作者: Hong Zhang;Y. Daniel Liang
作者: [德]贝特霍尔德·弗金(Berthold Vöcking) 赫尔穆特·阿尔特(Helmut Alt) 马丁·迪茨费尔宾格(Martin Dietzfelbinger) 吕迪格·赖舒科(Rüdiger Reischuk) 克里斯蒂安·沙伊德勒(Christian Scheideler) 黑里贝特·沃尔默(Heribert Vollmer) 多萝西娅·瓦格纳(Dorothea Wagner) 编著
参考读物推荐
作者: 高扬 卫峥 尹会生 著 万娟 插画设计
作者: 邹恒明 著
作者: 华诚科技 编著