本节给出能激发读者学习积极性的当代分布式系统的例子,用于说明分布式系统所扮演的无处不在的角色和相关应用的多样性。如1.1节所提及的那样,网络无处不在,成为我们现在认为理所当然的日常服务(互联网和相关的万维网、Web搜索、在线游戏、电子邮件、社会网络、电子商务,等等)的基础。为了进一步说明这一点,可参考图1-1,它描述了一系列所选的关键商务或社会应用部门,强调了相关的分布式系统技术已公认或新出现的应用。
正如所看到的,分布式系统包含近些年许多最重要的技术发展,因此理解底层技术绝对是现代计算知识的核心。图1-1也展示了当前广泛的应用,从相对本地化的系统(例如汽车或飞机中的系统)到全球范围的涉及上百万结点的系统,从以数据为中心的服务到处理器密集型任务,从由非常小相对原始的传感器构建的系统到那些包含强大计算元素的系统,从嵌入式系统到那些支持复杂交互式用户体验的系统,等等。下面给出分布式系统更特定的例子,进一步说明今天分布式系统的多样性和复杂性。
在过去的10年,Web搜索已经成为一大迅速发展的行业,最近的数字表明每个月的全球搜索量已经超过100亿。Web搜索引擎的任务是为万维网的3~4所有内容建立索引,其中含有各种信息类型,包括Web页面、多媒体资源和(扫描后的)书。这是一个非常复杂的任务,因为当前的估计是Web由超过630亿个页面组成,包含1万亿个Web地址。考虑到大多数搜索引擎是分析整个Web内容,并在这个巨大的数据库上完成复杂的处理,那么这个任务自身就是对分布式系统设计的一个巨大挑战。Google,Web搜索技术上的市场领导者,在支持用于搜索(与其他Google应用和服务,如Google Earth)的复杂的分布式系统基础设施的设计上已做出了巨大的努力。它代表了计算历史上最大和最复杂的分布式系统设施之一。该基础设施最突出的亮点包括:
一个底层物理设施,它由超大数目的位于全世界多个数据中心的联网计算机组成;一个分布式文件系统,支持超大文件,并根据搜索和其他Google应用的使用方式(特别是在文件中以快速而持久的速度读取)进行了深度优化;一个相关的结构化分布式存储系统,它提供对超大数据集的快速访问;一个锁服务,它提供诸如分布式加锁和协定等分布式系统功能;一个编程模式,它支持对底层物理基础设施上的超大并行和分布式计算的管理。关于Google分布式系统服务和底层通信支持的进一步细节可以参见第21章,该章研究了在线运行的现代分布式系统。大型多人在线游戏(Massively Multiplayer Online Game,MMOG)提供了一种身临其境的体验,超大数目的用户通过互联网在一个持久的虚拟世界中交互。此类游戏的主要例子包括Sony的EverQuest Ⅱ和芬兰CCP Games公司的EVE Online。这种游戏的复杂性迅速增加,现在包括复杂的游戏舞台(例如,EVE Online由一个超过5000个星系的宇宙组成)以及多种社会和经济系统。玩家的数目也在上升,而系统能支持超过50000个并发在线用户(玩家的总数目可能是这个数字的10倍)。MMOG工程体现了分布式系统技术面临的巨大挑战,尤其是它对快速响应时间的需求,唯有如此,才能维持较好的用户体验。其他挑战包括事件实时传播给多个玩家和维护对共享世界的一个一致的视图。因此,这是一个很好的例子,能说明现代分布式系统设计者要面对的挑战。针对大型多人在线游戏,提出了许多解决方案:
可能有点出人意料,最大的在线游戏EVE Online,采用了客户-服务器体系结构,在一个集中式服务器上维护了游戏世界状态的单个拷贝,5供运行在玩家终端或其他设备上的客户程序访问。为了支持大量客户,服务器自身是一个复杂的实体,拥有由上百个计算机结点组成的集群结构(该客户-服务器方法在1.4节详细讨论,集群方法将在1.3.4节讨论)。从虚拟世界的管理看,集中式体系结构有极大的益处,单个拷贝也简化了一致性问题。接着,目标是通过优化网络协议和快速响应到达事件来确保快速的响应。为了支持这点,对负载进行了分区,把单个“星系”分配给集群中指定的计算机,这样,高负载星系会拥有自己的专用计算机而其他星系则共享一台计算机。通过跟踪玩家在星系之间的移动,到达的事件被导向集群中正确的计算机上。其他MMOG采用更多的分布式体系结构,宇宙被划分到大量(可能是超多)服务器上,这些服务器可能地理上分散部署。接着,用户基于当前的使用模式和到服务器的网络延迟(例如基于地理最近)被动态地分配到一个特定服务器。这种体系结构风格被EverQuest采用,它通过增加新的服务器,可自然地扩展。大多数商业系统采用上述两个模型中的一个,但研究者现在也在寻找更极端的体系结构,即不基于客户-服务器原理而是基于对等技术采用完全分散的方法。采用对等技术,意味着每个参与者贡献(存储和处理)资源来容纳游戏。对对等解决方案的进一步研究将推迟到第2章和第10章。最后一个例子,我们看一下金融交易市场的分布式系统支持。金融行业以其需求一直处在分布式系统技术的最前沿,特别是在实时访问大范围的信息源方面(例如,当前的股票价格和趋势,经济和政治发展)。金融行业采用自动监控和交易应用。注意,此类系统的重点是对感兴趣数据项的通信和处理。感兴趣数据项在分布式系统中称为事件,在金融行业中的需求是可靠和及时地传递事件给可能是大量对此信息有兴趣的客户。此类事件的例子包括股价的下跌,最新失业数据的发布,等等。这要求底层的体系结构具有与前述风格(例如客户-服务器)完全不同的风格,这样的系统通常采用分布式基于事件的系统。我们下面给出此类系统的一个典型应用,第6章再对这个重要的话题进行深入讨论。图1-2举例说明了一个典型的金融交易系统。它显示了一系列事件进入一个指定的金融机构。这样的事件输入具有下列特征。6首先,事件源通常具有多种格式,例如路透社的市场数据事件和FIX事件(符合金融信息交换协议特定格式的事件),事件源还来自不同的事件技术,这说明了在大多数分布式系统中会遇到的异构性问题(参见1.5.1节)。图中使用了适配器,它把异构格式转换成一个公共的内部格式。其次,交易系统必须处理各种各样的事件流,这些事件流高速到达,经常需要实时处理来检测表示交易机会的模式。这在过去曾经是手工处理的,但在竞争压力下变成自动处理,这就是所谓的复杂事件处理(Complex Event Processing,CEP),它提供了一种方法来将一起发生的事件组成逻辑的、时序的或空间的模式。
这种方法主要用于开发定制的算法的交易策略,包括股票的买入和卖出,特别是可以寻找表示交易机会的模式,然后通过下单和订单管理系统自动地回复。作为一个例子,考虑下面的脚本:
这个脚本基于Apama[www.progress.com]提供的功能,Apama是金融领域的一个商业产品,最初是根据剑桥大学的研究工作开发的。脚本根据微软、HP的股价和一组其他股价检测一个复杂的时序序列,决定买入或卖出特定的股票。在金融系统的其他领域,包括通过监控交易活动来管理风险(特别是跟踪曝光),这种类型的技术的使用也在增加,用于确保遵从规则和监控有诈骗交易倾向的活动模式。在这种系统中,事件在处理之前通常会被截获,然后通过一个合规的防火墙(参见下面1.3.1节关于防火墙的讨论)。
相关资源:分布式系统常用技术及案例分析