第一章:分布式系统的特征
分布式系统是其组件分布在联网的计算机上,组件之间通过传递消息进行通信和动作协调的系统。该定义引出了分布式系统的下列重要特征:组建的并发性、缺乏全局时钟、组件故障的独立性。
我们看一下现代分布式系统的几个例子:Web搜索、多人在线游戏和金融交易系统,也考察今天推动分布式系统发展的关键趋势:现代网络的泛在特性,移动和无处不在的计算的出现,分布式多媒体系统不断增加的重要性,以及把分布式系统看作一种实用系统的趋势。接着本章强调资源共享是构造媒体系统的主要动机。资源可以被服务器管理,由客户访问,或者它们被封装成对象,由其他客户对象访问。
构造分布式系统的挑战是处理器组件的异构性、开放性(允许增加或替换组件)、安全性、可伸展性(用户的负载或数量增加时能正常运行的能力)、故障处理、组建的并发性、透明性和提供服务质量的问题。最后以Web作为一个大规模分布式系统的例子进行讨论,并介绍它的主要特征。
我们把分布式系统定义成一个其硬件或软件组件分布在联网的计算机上,组件之间通过传递消息进行通信和动作协调的系统。
我们定义的分布式系统具有如下的具体特征:
构造和使用分布式系统的主要动力来源于对共享资源的期望。
“资源”一次是抽象的,但它很好地描述了能在连网计算机系统中共享的事务的范围。它涉及的范围从硬件组件(如硬盘、打印机)到软件定义的实体(如文件、数据库和所有的数据对象)。它包括来自数字摄像机的视频流和移动电话呼叫所表示的音频连接。
领域 | 分布式系统的例子 |
---|---|
金融和商业 | 电子商务(亚马逊、淘宝)、底层支付技术(PayPal)、在线银行、用于金融市场的复杂信息分发系统 等 |
信息社会 | Web搜索引擎(Google)、YouTube、Facebook等 |
创意产业和娱乐 | YouTube等 |
医疗保健 | 远程医疗 等 |
教育 | 网课系统等 |
交通和物流 | GPS、Google Earth等 |
科学 | 网格,作为eScience的基础技术,以使用复杂计算机网络对(经常是超大数量的)科学数据的存储、分析和处理提供技术等 |
环境管理 | 使用(网络化)传感器技术等 |
Web搜索引擎的任务是为万维网的所有内容建立索引,其中包含各种信息类型,例如Web页面、多媒体资源和扫描后的书。考虑到大多数搜索引擎是分析整个Web内容,并在这个巨大的数据库上完成复杂的处理,那么这个任务自身就是对分布式系统涉及的一个巨大挑战。
Google,Web搜索技术上的市场领导者,在支持用于搜索(与其他Google应用和服务,如Google Earth)的复杂的分布式系统基础设施上做出了巨大努力。该设施最突出的两点包括:
大型多人在线游戏(Massively Multiplayer Online Game,MMOG)提供了一种身临其境的体验,超大数目用户通过互联网在一一个持久的虚拟世界中交互。这类游戏的主要例子是Sony的EverQuest Ⅱ和芬兰公司CCP Games公司的EVE Online。
MMOG工程体现了分布式系统技术面临的巨大挑战,尤其是它对快速响应时间的需求。其他挑战包括事件实时传播给多个玩家和维护对共享世界的一个一致的视图。
针对大型多人在线游戏,提出了许多解决方案:
金融行业以其需求一直处在分布式系统技术的最前沿,特别是在实时访问大范围的信息源方面(例如,当前股票价格和趋势,经济和政治发展)。金融行业采用自动监控和交易应用。
此类系统的重点是对感兴趣数据项的通信和处理。感兴趣数据项在分布式系统中称为事件,在金融行业中的需求是可靠和及时地传递事件给可能是大量对此信息有兴趣地客户。这要求底层地体系结构具有与前述风格(例如CS)完全不同的风格,这样的系统通常采用分布式基于事件的系统。
下图说明了一个典型的金融交易的例子。它显示了一系列事件进入一个指定的金融机构。这样的事件输入具有下列特征。
首先,事件源通常具有多种格式,例如路透社的市场数据事件和FIX事件(符合金融信息交换协议特定格式的事件),事件源还来自不同的事件技术,这说明了在大多数分布式系统中回到异构性问题。图中使用了适配器,它把异构性格式转换成一个公共的内部格式。
其次交易系统必须处理各种各样的事件流,这些事件流高速到达,经常需要实时处理来检测表示交易机会的模式。这在过去曾今是手工处理的,但在竞争压力下变成自动处理,这就是所谓的复杂事件处理(Complex Event Processing,CEP),它提供了一种方法来将一起发生的事件组成逻辑的、时序的或空间的模式。
分布式系统正在经历巨大的变化,这可追溯到一系列有影响力的趋势:
互联网上的计算机程序通过传递消息进行交互,采用了一种公共的通信手段。互联网通信机制(互联网协议)的设计和构造是一项重大的技术成果,它使得一个在某处运行的程序能给另一个地方的程序发送消息。
互联网是一个超大的分布式系统。互联网和其支持得服务的实现,使得必须开发实用解决方案来解决分布式系统中的许多问题。
设备小型化和无线网络方面的技术进步已经逐渐使得小型和便携式计算设备集成到分布式系统中。这些设备包括:
这些设备大多具有可便携性,再加上它们可以在不同的地方方便地连接到网络的能力,使得移动计算成为可能。移动计算是指用户在移动或访问某个非常规环境时执行计算任务的性能。
无处不在计算是指对用户的的物理环境(包括家庭、办公室和其他自然环境)中存在的多个小型、便宜的计算设备的利用。
移动和无处不在计算是一个热门的研究领域。
另一个重要趋势是在分布式系统中支持多媒体服务的需求。多媒体支持可以定义为以集成的方式支持多种媒体类型的能力。人们可以期望分布式多媒体系统支持离散型媒体(如图片或正文消息)的存储、传输和展示。分布式多媒体系统应该能对连续类型媒体(如音频和视频)完成相同的功能,即它应该能存储和定位音频或视频文件,并通过网络传输它们(可能需要以实时的方式,因为流来自摄像机),从而能给用户展示多种媒体类型,以及在一组用户中共享多种类型的媒体。
连续媒体的重要特点时它们包括一个时间维度,媒体类型的完整性从根本上依赖于在媒体类型的元素之间保持实时关系。
分布式多媒体计算的好处时相当大的,因为能在桌面环境提供大量的新(多媒体)服务和应用,包括访问实况或预先录下的电视广播、访问提供视屏点播服务的电影资料库、访问音乐资料库、提供音频和视频会议设施、提供集成的电话功能。
网络播放(webcasting) 是分布式多媒体技术的应用。网络播放是在互联网上广播连续媒体(典型是音频和视频)的能力,现在常见以这种方式广播主要的体育或音乐事件。
分布式多媒体应用(例如网络播放)对底层的分布式基础设施提出了大量的要求,包括:
随着分布式下基础设施的不断成熟,不少公司在推广这样的观点:把分布式资源看作一个商品或公共设施,把分布式资源和其他公共设施进行类比。采用这种模型,资源通过合适的服务提供者提供,能被最终用户有效地租赁而不是拥有。这种模型可以应用到物理资源和更多的逻辑服务上。
关于计算作为公共设施,术语云计算(cloud computi)被用来刻画其前景。云被定义成一组基于互联网的应用,并且足以满足大多数用户需求的存储和计算服务的集合,这使得用户能大部分或全部免于本地数据存储和应用软件的使用。该术语也推广“把每个事物看成一个服务”的观点。
通常,云实现在集群计算机上,从而提供每个服务所要求的必须的伸缩性和性能。**集群计算机(cluster computer)**是互联的计算机集合,它们密切协作提供单一的、集成的高性能计算能力。
关于集群与分布式的区别可见:单机、集群和分布式的区别
集群服务器的总目的时提供一系列的云服务,包括高性能计算能力、大容量存储能力(例如通过数据中心)、丰富的应用服务(如Web搜索——Google依赖大容量集群计算机体系结构来实现其搜索引擎和其他服务)
网格计算也能被看作时一种云计算。但网格计算通常被看作时云计算这种更通用模式的先驱,它只是偏重于支持科学计算。
从硬件资源来看,大家共享设备可以减少花费,但对用户具用更大意义的是共享与用户应用、日常工作和社会活动有关的更高层的资源。例如用户惯性以共享数据库或Web页面集方式出现的共享数据,而不是实现上述服务的硬盘和处理器。类似的,用户关心诸如搜索引擎或货币换算器之类的共享资源,而不关心提供这些服务的服务器。
实际上,资源共享的模式随着其工作范围和与用户工作的密切程度的不同而不同。一种极端是,Web上的搜索引擎是给全世界的用户提供工具,而用户之间并不需要直接接触;另一种极端是,在计算机支持协调工作(Computer Supported Working。CSCW) 中,若干直接进行合作的用户在一个小型封闭的小组中共享诸如文档之类的资源。用户在地理上的分布以及用户之间进行共享的模式决定了系统必须提供协调用户动作的机制。
我们使用属于服务表示计算机系统中管理相关资源并提供功能给用户和应用的一个单独的部分。
服务将资源访问限制为一组定义良好的操作,这在某种程度上属于标准的软件工程实践。同时它也反映出分布式系统的物理组织。分布式相同的资源是物理地封装在计算机内,其他计算机只能通过通信访问。为了实现有效的共享,每个资源必须由一个程序管理,这个程序提供通信接口使得对资源进行可靠和一致的访问和更新。
随着分布式系统的应用范围和规模扩大,可能会遇到相同的和其他的挑战。
互联网使得用户能在大量异构计算机和网络上访问服务和运行应用程序。 下面这些均存在异构性(即存在多样性和差别):
中间件:指一个软件层,它提供了一个编程抽象,同时屏蔽了底层网络、硬件、操作系统和编程语言的异构性。有些中间件。如Java远程方法调用(Remote Method Invocation,RMI),仅支持一种编程语言。大多数中间件在互联网协议上实现,由这些协议屏蔽了底层网路的差异,但所有的中间件要解决操作系统和硬件的不同。
处理解决异构性问题之外,中间件为服务器和分布式应用的程序员提供了一致的计算模型。这些模型包括远程方法调用、远程时间通知、远程SQL访问和分布式事务处理。
异构性和移动代码中移动代码是指能从一台计算机发送到另一台计算机发送到另一台计算机,并在目的计算机上执行的代码,Java applet是一个例子。适合在一种计算机上运行的代码未必适合在另一种计算机上运行,因为可执行程序通常依赖于计算机的指令集和操作系统。
虚拟机方法提供了一种使代码可在任何计算机上运行的方法:某种语言的编译器生成一台虚拟机的代码而不是某种硬件代码,例如,Java编译器生成Java虚拟机的代码,虚拟机通过解释的方法来执行它。为了使Java程序嫩个运行,要在每种计算机上实现一次Java虚拟机。
今天,最常使用的移动代码是将一些Web页面的JavaScript程序装载到客户端浏览器中。
计算机系统的开放性是决定系统能否以不同的方式被扩展和重新实现的特征。分布式系统的开放性主要取决于新的资源共享服务能被增加和供多种客户程序使用的程度。
除非软件开发者能获得系统组件的关键软件接口的规范和文档,否则无法实现开放性。一句话发布关键接口。这个过程类似接口的标准化,但它进程避开官方的标准化过程,官方的标准化过程非常繁琐且进度缓慢。
然而发布接口仅是分布式系统增加和扩展服务的起点。设计者所面临的挑战是解决由不同人构造的由许多组件组成的分布式系统的复杂性。
互联网协议的设计者引入了一系列称为“征求意见文档”(Requests For Comments,RFC)的文档,每个文档有一个编号。
按这种方式支持资源共享的系统之所以被称为开放的分布式系统,主要是强调它们是可扩展的。它们通过在网络中增加计算机实现在硬件层次上的扩展,通过引入新的服务、重新实现旧的服务实现在软件层次上的扩展,最终使得应用程序能够共享资源。开放系统常被提到的好处是它们与销售商无关。
开放的分布式系统的特征总结如下:
分布式系统中维护和使用的众多信息资源对用户具有很高的内在价值,因此它们的安全相当重要。信息资源的安全性包括三个部分:机密性(防止泄露给未授权的个人)、完整性(防止被改变或被破坏)、可用性(防止对访问资源的手段的干扰)。
安全性不止涉及对消息的内容保密,还涉及确切知道用户或代表用户发送消息的其他代理的身份。利用机密技术可满足这两个挑战。
然而,下面两个安全方面所面临的挑战目前还没有完美解决:
分布式系统可在不同的规模(从小型企业内部网到互联网)下有效且高效地运转。如果资源数量和用户数量激增,系统仍能保持其有效性,那么该系统就被称为可伸缩性。
可伸缩性分布式系统的设计面临下列挑战:
计算机系统有时会出现故障。当硬件或软件发生故障时,程序可能会产生不正确的结果或者在它们完成应该进行的计算之前就停止了。
分布式系统的故障时部分的,也就是说,有些组件出了故障而有些组件运行正常。因此故障的处理相当困难。接下来我们讨论一下处理故障的技术:
在分布式系统中,服务和应用均提供可被客户共享的资源。因此,可能有几个客户同时试图访问一个共享资源的情况。
管理共享资源的进程可以一次接受一个客户请求,但这种方法限制了吞吐量。因此,服务和应用通常被允许并发地处理多个客户请求。
在分布式系统中,代表共享资源的任何一个对象必须负责确保它在并发环境中操作正确,这不仅适用于服务器,也适用于服务器,也适用于应用中的对象。因此,持有未打算用于分布式系统的对象实现的程序员必须做一些事情,使得对象在并发环境中能安全使用。
为了使对象在并发环境中能安全使用,它的操作必须在数据一致的基础上同步。者可通过标准的技术(如大多数操作系统所采用的信号量)来实现。
透明性被定义成对用户和应用程序员屏蔽分布式系统的组件的分离性,使系统被认为是一个整体,而不是独立组件的集合。
ANSA参考手册和国际化标准化组织的开放分布式处理的参考模型(RM-ODP)识别出八种透明性(并用范围更广的移动透明性替换迁移透明性):
最重要的两个透明性是访问透明性和位置透明性,它们的有无对分布式资源的利用有很大影响,又是它们被统一称为网络透明性。
一旦提供给用户他们要求的功能,例如在一个分布式系统中的文件服务,我们就能继续探寻所提供的服务质量。系统的主要的非功能特性,即影响客户和用户体验的服务质量是可靠性、安全性和性能。满足变化的系统配置和资源可用性的适用性已被公认为服务质量的一个重要方面。
可靠性和安全性问题再设计大多是计算机系统时时关键的。服务质量的性能源于及时性和计算吞吐量,但它已被重新定义成满足及时性保证的能力。
一些应用,包括多媒体应用,处理时间关键性数据,这些数据是要求以固定速度处理或从一个进程传送到另一个进程的数据流。例如,一个电影服务可能由一个客户程序组成,该程序从一个视频服务器中检索电影并把它呈现到用户的屏幕上。该视频的连续帧在指定时间限制内显示给用户,才算是一个满意的结果。
在1989年3月,互联网还只属于少数人。在这一互联网的黎明期,HTTP诞生了。
蒂姆·伯纳斯-李博士提出了一种让远隔两地的研究者们共享知识的设想,这一最初设想的基本理念是:借助多文档之间相互关联形成的超文本(HyperText),连成可相互参阅的WWW(World Wide Web,万维网)。
超文本(Hypertext):在互联网早期的时候,我们输入的信息只能保存在本地,无法和其他电脑交互。我们保存的信息通常都以文本即简单字符的形式存在,文本是一种能够被计算机解析的有意义的二进制数据包。而随着互联网的高速发展,两台电脑之间能够进行数据的传输后,人们不再满足只能在两台电脑之间传输文字,还想要传输图片、音频、视频,甚至是超链接,那么文本的语义就被扩大了,这种语义扩大后的文本就被称为超文本(HyperText)。
而为了实现这一理念,现在已经提出了3项WWW构建技术,分别是:
WWW这一名称,是Web浏览器当年用来浏览超文本的客户端应用程序是的名称。现在则用来表示这一系列的集合,也可简称为Web。
除了这三样技术外,还有Javascript,提供比HTML标准化窗口部件质量更好的用户交互,用于更新Web页面的部分内容而不必取得该页面的全新版本并重新显示。AJAX处理异步情况等等技术。
Web之所以取得巨大的成功,是因为许多个人或机构能比较容易地发布资源,它的超文本结构适合组织多种类型的信息,而且Web体系结构具有开放性。Web体系结构所基于的标准很简单,且早被广泛发布。它使得许多新的资源类型和服务可以集成到一起。
Web成功的背后也存在一些设计问题,首先,它的超文本模型再某些方面有所欠缺。如果删除或移动了一个资源,那么就会存在对资源所谓“悬空”链接,会使用户请求落空。此外,还存在用户“在超空间迷失”这个常见的问题。用户经常发现自己处于混乱状态下,跟随许多无关的链接打开完全不同的页面,使得有些情况下可靠性值得怀疑。
在Web上查找信息的另一种方法是使用搜索引擎,但这种方法在满足用户真正需求方面是相当不完美的。要解决这个问题,资源描述框架[www.w3.org V]中介绍过,一种方法是生成标准的表达事务元数据的词汇、语法和语义,并将元数据封装在相应的Web资源中供程序访问。除了查找Web页面中出现的词组外,从原理上讲,程序可以完成对针对元数据的搜索,然后,根据语义匹配编译相关的链接列表。总而言之,由互连的元数据资源组成的Web就是语义Web。
作为一个系统体系结构,Web面临规模的问题。常见的Web服务器会在一秒中有很多点击量,结果导致对用户的应答变慢。
分布式系统无处不在。
资源共享是构造分布式系统的主要因素。
分布式系统的构造面临许多挑战: