网格的产生
网格(Grid)这个词来自于电力网格(PowerGrid)。“网格”与“电力网格”形神相似。一方面,计算机网纵横交错,很像电力网;另一方面,电力网格用高压线路把分散在各地的发电站连接在一起,向用户提供源源不断的电力。用户只需插上插头、打开开关就能用电,一点都不需要关心电能是从哪个电站送来的,也不需要知道是水力电、火力电还是核能电。建设网格的目的也是一样,其最终目的是希望它能够把分布在因特网上数以亿计的计算机、存储器、贵重设备、数据库等结合起来,形成一个虚拟的、空前强大的超级计算机,满足不断增长的计算、存储需求,并使信息世界成为一个有机的整体。
电网和网格对照表
电网
当你用洗衣机洗衣服时,你只关心衣服什么时候洗好。而不在乎洗衣机用的电是来源于水力发电,火电厂还是核电。你只需要把插头插入插座就行了。
网格
当你在电脑前工作时,你唯一关心的是要做的事(比如一项计算,设计等等)无论电脑连上什么网路,你都可以得到所需的计算能力出储存容量。
电网
我们现在用电的基础建设是“电网“。就是利用输电站,电力站,变电所和电线等等,把许多不同种类的发电厂和你家联系起来。
网格
对于上述的基础建设就叫“网格“。就是把电脑,工作站,服务器等计算资源连起来,而且提供必要的使用机制。
电网
电网是显而易见的:你不必担心你所用的电力是从哪里或者如何产生的。
网格
网格也将成为显而易见:你不必担心你所使用的电脑程序和资料在那里,网格中间服务器都会把最适合的计算资源分配给你的工作。
电网
电网很普遍:电力到处都有。只要插上插座就能获得电力资源。
网格
网格也将很普遍:电脑,笔记本,或者是掌上电脑,手机,甚至是一般的家用电器都可以通过网格插口连 上网格。
电网
电网是公共设施:你只要付钱就可以用电。
网格
网格也试图想为广大民众服务:只要付钱,都可以享用网格无穷无尽的计算资源和储存能力
备注
注:另一种说法是网格就像一个巨大的网,里面有很多格子.每个格子就是一个局域网格,每个节点就是一台计算机.这种说法可能起源于中国。
究竟什么是网格
定义
网格是一种新兴的技术,正处在不断发展和变化当中。目前学术界和商业界围绕网格开展的研究有很多,其研究的内容和名称也不尽相同因而网格尚未有精确的定义和内容定位。比如国外媒体常用“下一代互联网”、“Internet2”、“下一代Web”等来称呼网格相关技术。但“下一代互联网(NGI)”和“Internet2”又是美国的两个具体科研项目的名字,它们与网格研究目标相交叉,研究内容和重点有很大不同。企业界用的名称也很多,有内容分发(Contents Delivery)、服务分发(Service Delivery)、电子服务(e-service)、实时企业计算(Real-Time Enterprise Computing,简称RTEC)、分布式计算Peer-to-Peer Computing(简称P2P)、Web服务(Web Services)等。中国科学院计算所所长李国杰院士认为,网格实际上是继传统互联网、Web之后的第三次浪潮,可以称之为第三代互联网应用。
网格是利用互联网把地理上广泛分布的各种资源(包括计算资源、存储资源、带宽资源、软件资源、数据资源、信息资源、知识资源等)连成一个逻辑整体,就像一台超级计算机一样,为用户提供一体化信息和应用服务(计算、存储、访问等),虚拟组织最终实现在这个虚拟环境下进行资源共享和协同工作,彻底消除资源“孤岛”,最充分的实现信息共享。
满足条件
网格必须同时满足三个条件:在非集中控制的环境中协同使用资源;使用标准的、开放的和通用的协议和接口;提供非平凡的服务。
网格技术的特征及其体系结构
网络技术的特征
网格技术的特征
在介绍网格的特征之前,我们首先要解决一个重要的问题:网格是不是分布式系统?这个问题之所以必须回答,因为人们常常会问另一个相关的问题:"为什么我们需要网格?现在已经有很多系统(比如海关报关系统、飞机订票系统)实现了资源共享与协同工作。这些系统与网格有什么区别?"
对这个问题的简要回答是:网格是一种分布式系统,但网格不同于传统的分布式系统。IBM Global Service与EDS是在这个分布式领域最著名的公司。构建分布式系统有三种方法:即传统方法(我们称之为EDS方法)、分布自律系统(Autonomous Decentralized Systems, ADS)方法,网格(grid)方法。ADS通常用于工业控制系统中。网格方法与传统方法的区别见下表:
特征 传统分布式系统 网格
开放性 需求和技术有一定确定性、封闭性 开放技术、开放系统
通用性 专门领域、专有技术 通用技术
集中性 很可能是统一规划、集中控制 一般而言是自然进化、非集中控制
使用模式 常常是终端模式或C/S模式 服务模式为主
标准化 领域标准或行业标准 通用标准(+行业标准)
平台性 应用解决方案 平台或基础设施
通过以上对比,网格具有以下四点优势:
(1)资源共享,消除资源孤岛:网格能够提供资源共享,它能消除信息孤岛、实现应用程序的互连互通。网格与计算机网络不同,计算机网络实现的是一种硬件的连通,而网格能实现应用层面的连通。
(2)协同工作:网格第二个特点是协同工作,很多网格结点可以共同处理一个项目。
(3)通用开放标准,非集中控制,非平凡服务质量:这是Ian Foster最近提出的网格检验标准。网格是基于国际的开放技术标准,这跟以前很多行业、部门或者公司推出的软件产品不一样。
(4)动态功能,高度可扩展性:网格可以提供动态的服务,能够适应变化。同时网格并非限制性的,它实现了高度的可扩展性。
网格的体系特征
2.网格的体系特征
网格之所以能有以上所说的种种优势特征,是由网格的体系结构赋予它的。网格体系结构的主要功能是划分系统基本组件,指定组件的目的与功能,刻画组件之间的相互作用,整合各部分组件。科研工作者已经提出并实现了若干种合理的网格体系结构。下面介绍目前影响比较广泛的两个网格体系结构:网格计算协议体系结构(Grid Protocol Architecture,GPA)和计算经济网格体系结构(GRACE)模型。
OGSA(Open Grid Services Architecture)被称为是下一代的网格体系结构,它是在原来“五层沙漏结构”的基础上,结合最新的Web Service 技术提出来的。OGSA包括两大关键技术即网格技术和Web Service 技术。
随着网格计算研究的深入,人们越来越发现网格体系结构的重要。网格体系结构是关于如何建造网格的技术,包括对网格基本组成部分和各部分功能的定义和描述,网格各部分相互关系与集成方法的规定,网格有效运行机制的刻画。显然,网格体系结构是网格的骨架和灵魂,是网格最核心的技术,只有建立合理的网格体系结构,才能够设计和建造好网格,才能够使网格有效地发挥作用。
OGSA最突出的思想就是以“服务”为中心。在OGSA框架中,将一切都抽象为服务,包括计算机、程序、数据、仪器设备等。这种观念,有利于通过统一的标准接口来管理和使用网格。Web Service提供了一种基于服务的框架结构,但是,Web Service 面对的一般都是永久服务,而在网格应用环境中,大量的是临时性的短暂服务,比如一个计算任务的执行等。考虑到网格环境的具体特点,OGSA 在原来Web Service 服务概念的基础上,提出了“网格服务(Grid Service)”的概念,用于解决服务发现、动态服务创建、服务生命周期管理等与临时服务有关的问题。
基于网格服务的概念,OGSA 将整个网格看作是“网格服务”的集合,但是这个集合不是一成不变的,是可以扩展的,这反映了网格的动态特性。网格服务通过定义接口来完成不同的功能,服务数据是关于网格服务实例的信息,因此网格服务可以简单地表示为“网格服务=接口/行为+服务数据”。
在目前,网格服务提供的接口还比较有限,OGSA 还在不断的完善过程之中,下一步将考虑扩充管理、安全等等方面的内容。
网络协议体系结构
3.网格协议体系结构
Ian Foster于2001年提出了网格计算协议体系结构,认为网格建设的核心是标准化的协议与服务,并与Internet网络协议进行类比(如图1)。该结构主要包括以下五个层次:
构造层(Fabric):控制局部的资源。由物理或逻辑实体组成,目的是为上层提供共享的资源。常用的物理资源包括计算资源、存储系统、目录、网络资源等;逻辑资源包括分布式文件系统、分布计算池、计算机群等。构造层组件的功能受高层需求影响,基本功能包括资源查询和资源管理的QoS保证。
连接层(Connectivity):支持便利安全的通信。该层定义了网格中安全通信与认证授权控制的核心协议。资源间的数据交换和授权认证、安全控制都在这一层控制实现。该层组件提供单点登录、代理委托、同本地安全策略的整合和基于用户的信任策略等功能。
资源层(Resource):共享单一资源。该层建立在连接层的通信和认证协议之上,满足安全会话、资源初始化、资源运行状况监测、资源使用状况统计等需求,通过调用构造层函数来访问和控制局部资源。
汇集层(Collective):协调各种资源。该层将资源层提交的受控资源汇集在一起,供虚拟组织的应用程序共享和调用。该层组件可以实现各种共享行为,包括目录服务、资源协同、资源监测诊断、数据复制、负荷控制、账户管理等功能。
应用层(Application):为网格上用户的应用程序层。应用层是在虚拟组织环境中存在的。应用程序通过各层的应用程序编程接口(API)调用相应的服务,再通过服务调动网格上的资源来完成任务。为便于网格应用程序的开发,需要构建支持网格计算的大型函数库。
当今网格的运用
4. 当今网格的运用
现在国内国外运用得最多的可能是在一些大型院校的计算网格(实现计算资源的共享。 什么是计算资源: 简单来说就是计算能力,CPU。 计算资源共享就是CPU计算的共享)。人们把一个集群(cluster, 也就是常说的机房,通常有几十台操作系统为Linux的计算机)的计算机连成一个局域型网格。这样就好像把这几十台电脑连成了一台超级计算机,计算能力当然大大提高了。这种局域计算网格主要运用于一些科研的研究。比如说生物科学。当生物科学的研究员需要高性能的计算资源来帮助他们分析试验的结果时,他们就把这些分析试验的程序提交(submit)给网格,网格通过计算再把结果返回给这些研究员。计算结果可能是一些图像(rendering)也可能是一些数据。这些计算如果在单一PC(Personal computer, 个人计算机)上运行的话,往往会花费几个月的时间,然而在网格中运行一,两天也就完成了。这就是网格技术最直观的优点之一。当然现在有一些大型主机(super-mainframe)也有很强的计算能力(比如常说的IBM deepblue,打败人类国际象棋大师Kasparov那位),但是这种主机太昂贵,而且配置(deploy)往往不方便,是名副其实的重量级(heavyweight)计算。SETI@Home (SETI@Home's,一个分布式计算的项目,通过互联网络上的计算机搜索地球外智慧讯息,网格在分布式计算的成功运用。 参见:http://www.equn.com/info/n-18.html )的网站指出,世界上最强大的计算机IBM 的 ASCI White,可以实现每秒12万亿次的浮点运算,但是花费了1亿千万美元;然而SETI@HOME 只用了50万美元却实现了每秒15万亿次浮点运算。
网格另外一个显著的运用可能就是虚拟组织(Virtual Organisations)。这种虚拟组织往往是针对与某一个特定的项目,或者是某一类特定研究人员。在这里面可以实现计算资源、存储资源、数据资源、信息资源、知识资源、专家资源的全面共享。比如说中国2008年奥运会开幕式研究组就可以运用网格组成一个虚拟组织。在这个虚拟组织里,任何成员不管在哪个地方都可以有权访问组织的共享资源(如 开幕式场地图纸,开幕式资金,开幕式节目单);而且可以和另一地方的虚拟组织成员进行交流。这个虚拟组织就像把所有奥运会开幕式的资源,信息,以及人员集中到了一个虚拟的空间,让人们集中精力研讨开幕式项目的问题,而不必考虑其他的问题。据个实例,由英国利兹大学,牛津大学,约克大学和谢菲尔德大学合作的DAME项目就是致力于研究和运用虚拟组织。DAME架构在这四个大学合建的白玫瑰网格White Rose Computational Grid (WRCG)上,运用于对飞机故障的快速检测和维修。
网格基础设施组件
5.网格基础设施组件
首先,我们来看看有哪些典型的网格基础设施组件,每一种组件如何对应用程序的架构、设计和部署产生影响。下面是网格基础设施中的一些主要组件:
安全性。安全性是网格计算中的重要问题。每一种网格资源都可能需要遵从多种不同的安全策略。单点登录认证是一种必不可少的方法。得到普遍遵守的协商授权机制也是很必要的。
资源管理。当提交一项任务的时候,网格资源管理器需要考虑如何为该任务指派资源、如何监视其状态以及如何返回它的执行结果。
信息服务。由于网格资源管理器在指派资源之前要经过综合全面的考虑,因此它需要知道哪些网格资源是可用的,以及这些资源的容量与当前使用的情况。这些有关网格资源的知识是通过网格信息服务(Grid Information Service,GIS)维护和提供的,又称为监视与发现服务(Monitoring and Discovery Service,MDS)。
数据管理。数据管理主要解决任务如何传输数据以及如何访问共享存储的问题。
下面让我们以Globus Toolkit为例分别详细讨论一下每一种组件。
安全性
如果您是一名用户,要在远程系统上运行一项任务,您会关心远程系统是否安全,是否能保证其他人不能访问到您的数据。如果您是提供资源的一方,用户可以在您的系统中执行任务,那么您必须确信所有的任务都不会遭到破坏和干扰,也不能访问您系统中的其他私有数据。除了这两方面的内容之外,网格环境也面临着一般分布式计算环境中存在的其他所有安全问题。
网格安全基础设施(Grid Security Infrastructure,GSI)是 Globus Toolkit 的基础,它提供了很多工具,可以帮助我们对网格环境中的安全问题进行管理。在您开发面向网格环境的应用程序时,您的脑子里必须时刻考虑到安全问题,并用 GSI 提供的工具来解决这些问题。网格架构中与安全性有关的功能主要负责完成认证、授权以及实现网格资源之间的安全通信。
在应用程序中启用网格时的考虑:安全性。当我们设计一个能够使用网格的应用程序时,安全性问题必须考虑在内。下面的列表总结了需要考虑的一些问题:
单点登录。跨系统的 ID 映射。如上所述,GSI 提供了认证、授权以及安全的通信。然而,您需要对安全性管理及其含义有深刻完整的理解。比如说:您是否可以将多个用户映射到目标系统中的同一个用户 ID 上?是否需要特定的审计机制来确定实际发起应用程序的是哪一个用户?应用程序不应该要求在使用网格上的不同资源时使用不同的用户 ID 映射机制。
多种平台。尽管 GSI 基于开放的标准化软件,可以在多种平台上运行,然而各种不同的平台其底层的安全机制并不总是一致。比如说,在传统的 UNIX 或基于 Linux 的系统上,读、写、执行等操作的安全机制就与微软的 Windows 环境不同。您应该考虑应用程序可能运行的平台。
使用 GSI。对于任何应用程序特有的、且可能需要进行认证或特殊授权的功能而言,应用程序的设计应该使用 GSI,这样能够简化开发,并通过维护单一的登录机制,使用户的体验也得到简化。
数据加密。尽管 GSI 与后文将要讨论到的数据管理工具一起,提供了跨网络的安全通信与数据加密,但是您也应该考虑到,当数据到达目的地的时候会发生什么事情。比如说,如果一些敏感的数据传递到某项资源上供任务使用,随后又以非加密的格式保存到本地磁盘上,那么其他的用户或应用程序也就能访问这些数据了。
资源管理
网格资源管理器致力于在任务提交时进行资源指派。它的角色就像是异质网格资源的抽象接口。资源管理组件提供的工具可以将任务分配给特定的资源,可以提供一种手段,在任务运行过程中获取任务状态信息,并获取任务完成的信息,还可以提供终止任务或对其进行管理的能力。在 Globus 中,远程任务提交是由 Globus Resource Allocation Manager(GRAM)负责处理的。
在应用程序中启用网格时的考虑:资源管理。在与资源管理相关的应用程序架构、设计和部署方面,有一些问题需要考虑。GRAM 最简单的形式是用于发出 globusrun 命令,在特定系统上发起一项任务。然而,应用程序必须与 MDS 一起(通常是通过一个代理函数)保证使用了适当的目标资源。下面列出一些需要考虑的内容:
选择适当的资源。通过与代理联合工作,来保证选择适当的目标资源。这就要求应用程序能够正确地指定所需的环境(操作系统、处理器、速度、内存,等等)。您为排除特定的依赖关系付出的努力越多,找到可用资源完成任务的机率也就越高。
多子任务。如果应用程序中包含多个任务,您必须理解(并降低)它们之间的相互依赖关系。否则,您就不得不构建一段逻辑来处理下面这些问题:
进程间通信
数据共享
并行任务提交
访问任务的执行结果。
如果一项任务返回的是一个简单的状态值,或是输出数据量很少,那么应用程序可以仅仅通过 stdout 和 stderr 来获取这些数据。要是必须获取相当复杂的结果,这时就可能需要将结果写入一个文件,并通过适当的工具,供目标机获取/传输这个文件。
任务管理。GRAM 提供了查询任务状态的机制,还可以执行诸如终止任务之类的操作。应用程序可能会在必要的时候使用这些功能为用户提供反馈、清除或释放资源的操作。比如说,如果应用程序内有一项任务失败了,其他依赖于这项任务的结果的任务可能就需要终止,以免无端消耗过多资源。
信息服务
信息服务是网格基础设施中至关重要的组件。它们维护了关于资源可用性、处理能力、当前使用情况的知识。不论在哪个网格中,CPU 和数据资源的情况都是不断变动的,这种变动与其处理任务与共享数据的能力有关。随着网格中的资源不断被释放,资源的状态可以在网格信息服务中得到更新。客户机、代理、网格资源管理器等等综合这部分信息来进行资源的指派。信息服务提供方是指那些为目录提供资源状态信息的程序。下面列出一些如何收集信息的实例:
静态主机信息
操作系统名称、版本号、处理器提供商/类型/版本/速率/缓存大小、处理器数量、物理内存总量、虚存总量、设备、服务类型/协议/端口号等。
动态主机信息
负载水平、队列入口等。
存储系统信息
磁盘空间总量、可用磁盘容量等。 网络信息。
网络带宽、延迟、是否可测量与可预报。
高度动态的信息
空闲物理内存,空闲虚拟内存、空闲处理器数量等。
网络信息服务
网格信息服务,又称为监视与发现服务,在 Globus 中负责提供信息服务。MDS 使用轻量级目录访问协议(Lightweight Directory Access Protocol,LDAP)作为访问资源信息的接口。
在应用程序中启用网格时的考虑:信息服务。对信息服务来说,需要考虑下面这些问题:
必须完全理解特定任务的需求,这样才能对查询进行正确地格式化,以返回适当的资源。这一点非常重要。 必须保证 MDS 中保存有适当的信息。在 MDS 中,缺省情况下包含大量关于网格中所含资源的数据。不过,如果您的应用程序要求使用特定的资源或信息,而缺省情况下没有提供,您就需要编写您自己的信息提供方,并把适当的资源加入模式中。这样,您的应用程序或代理就可以进行查询,看特定的资源或请求是否已经存在。
MDS 可以用匿名帐号访问,或是经由一台已经通过 GSI 认证的代理来访问。应用程序开发人员需要保证,能够在必要的时候通过一台经过认证的代理。您的网格环境可能具有多级别的目录结构。根据环境及其拓扑的复杂程度不同,您应该保证能够访问适当的目录,在其中搜索您所要求的资源。
数据管理
当您在构建网格的时候,网格中最重要的资产就是您的数据。在您的设计当中,您将必须确定您对数据的需求,以及如何在整个基础设施中移动数据,要么就是如何用一种安全有效的方式访问所需的数据。您可以通过一组标准化的网格协议与您设计的任何数据资源进行通信。您也可以选择构建一个联邦数据库,创建一个虚拟的数据存储。还有其他一些选择,如存储区域网(Srorage Area Network)、网络文件系统,以及专用的存储服务器等。
Globus 为网格环境提供了 GridFTP 和 Global Access to Secondary Storage(GASS)两种数据传输机制。此外,它还提供了一种复制管理机制,可以帮助您管理和访问数据集的副本。在应用程序中启用网格时的考虑:数据管理。数据管理问题源自如何最大化地使用有限的存储空间、网络带宽、计算资源等。下面列出一些在应用程序设计和实现中需要考虑的数据管理问题:
数据集的大小。对于大的数据集来说,要想将它移动到实际运行任务的系统上是不现实,甚至是不可能的。可能的解决方案是使用数据复制、或将完整数据集的一个子集拷贝到目标系统中。地理上分散的用户、数据、计算以及存储资源。如果您的目标网格在地理上是分散的,网络连接的速度也有限,那么您在设计的时候就必须考虑到如何进行慢速和受限的数据访问。
在广域网上进行数据传输。当您要在 Internet 或者其他的 WAN 上移动数据时,必须考虑安全性、可靠性以及性能等问题。您必须构建一些必要的逻辑来处理数据访问速度慢,甚至被阻断的情况。数据传输的调度。下面两种情况至少要考虑一种:第一个是数据传输的调度,这样当需要某项数据的时候数据就在它适当的位置上了。比如说,如果数据传输需要进行一个小时,而使用这项数据的任务必须在凌晨两点钟开始运行,那么您就应该提前对数据传输进行调度,这样,当需要它的任务运行的时候,数据就是可用的了。第二个是了解进出任何一项资源的任何并发文件传输的数量与规模。
选择数据副本。如果您使用 Globus Data Replication 服务,也许想向应用程序中增加一段选择适当副本的逻辑,也就是说,您想要选择一个包含所需数据的副本,同时还要满足您对性能的要求。
调度器
Globus Toolkit 没有提供任务调度器,也没有提供元任务调度器(meta-scheduler)。不过,有一些任务调度器已经和 Globus 集成起来了,还有一些也可以集成进来。
在网格中,任务调度与负载平衡是十分重要的功能。大多数网格系统中都包括某种任务调度软件。这种软件可以查找到某台机器的位置,并在上面执行用户提交的网格任务。有些调度器实现了按照任务优先级进行调度的系统。优先级的实现方式有时是使用多个任务队列,其中每一个队列都代表不同的优先级。当网格计算机可以执行任务的时候,就从优先级最高的队列中取出第一个任务。通过调度器还可以实现各种不同类型的策略。策略中可以包含多种对任务、用户、以及资源的约束。比如说,可能有一种策略限制在一天的某些特定时间执行网格任务。
调度器通常会对实时网格负载做出反应。它们在提交任务之前,会用反映当前机器使用情况的量测信息来确定哪些机器不忙。调度器可以组织成层次结构。比如说,元调度器将任务提交给群集调度器,或其他低层调度器,而不直接提交给独立的计算机。更高级些的调度器可以对所调度的任务的执行过程进行监视,从而对整体工作流实施管理。如果由于系统或网络的原因而导致一些任务丢失,好的调度器会自动在别的地方重新提交任务。然而,如果某个任务进入死循环,运行的时间超过了某个最大时间,那么这样的任务就不应该再重新调度了。典型情况下,各种任务具有不同类型的结束代码,其中一些结束代码适合于用于重新提交任务,而另一些则不适合。
我们通过一个预约系统可以实现在网格中提前保留资源。这种机制不仅仅是调度器。它首先是一种基于日历的系统,可以在特定的时间段内保留资源,防止其他任务在同一时间内使用该资源。它还必须能在预约的时间到达的时候将任意机器或资源上正在执行的任务删除或挂起。
在应用程序中启用网格时的考虑:调度器。当您为网格环境启用应用程序的时候,需要考虑一些与调度有关的问题。下面列出其中一些:
数据管理。意思是保证当所调度的任务运行时具备可用的数据。如果需要将数据移动到待执行的节点上,那么我们还需要对数据的移动操作也进行调度。
通信。任何相关任务的进程间通信都要求对任务进行并行调度。
调度器的作用域。在具有多个调度器(如具备元调度器)的环境中,要协调并发任务,或保证特定的任务在指定的时间执行,这些工作的复杂程度很高,当不同的调度器具有不同的作用域时,情况就更加复杂。
调度策略。调度可以有不同的实现目标。
面向应用程序——调度的优化目标是实现最佳运行时间。
面向系统——调度的优化目标是实现最大吞吐量。任务可能不会立即开始。在执行的过程中也可能被终端或抢占。也可以将任务调度为通宵执行。
网格信息服务。调度器和信息服务之间的交互可能十分复杂。比如说,如果在任务实际运行之前通过 MDS 找到了某项资源,然后,我们可以假设在任务实际运行之前该资源的状态不会发生变化。或者我们可以建立一种预测能力更强的机制,提前预测资源状态可能发生的变化,从而提前做出调度决定。
资源代理。通常情况下,资源代理必须与调度器接口。
负载平衡。负载平衡问题是由于工作负载在网格系统资源中的分散特性所引起的。尽管 Globus Toolkit 没有提供负载平衡的功能,而在某些特定环境中,负载平衡服务却是必需的特性。当作业被提交到网格任务管理器中时,工作负载可以通过推模式(push model)、拉模式(pull model)或组合模式(combined model)进行分布。推模式的简单实现是通过循环的方式将任务发送到网格资源上。然而,这个模型没有考虑到任务队列的长度。如果每一个网格资源上都发送到相同数目的任务,那么在速度较慢的机器上会形成较长的任务队列,而一个长时间运行的任务在不受到细心监视的情况下可能阻塞其他的任务,使之根本无法启动。对于这个问题,一种解决方案是使用加权循环的方案。
在拉模式中,网格资源从任务队列中获取任务。在这样的模式下,任务队列的同步化与串行化就成为协调多个网格资源的任务获取的必要手段。本地及全局任务队列的策略也是可行的。在本地拉模式策略中,每一组网格资源都指派为从一个本地任务队列获取任务。在全局拉模式策略中,所有的网格资源都被指派使用同一个任务队列。本地拉模式的优势在于能够对网格资源进行分片。比如说,离数据比较接近的,或相互有关的,或要求使用相似资源的某些任务,都可以用这种方法进行控制。
推模式和拉模式的组合模式可以解决前面提到的一些问题。每一个网格资源可以决定何时能接收更多的工作,并向网格任务服务器发送工作请求。然后,任务服务器就向其发送新的工作。
在这两种负载平衡模式下,都需要考虑故障恢复的条件。我们需要检测出哪些网格资源已经无法继续操作了,在推模式中,不能把新的工作发送给已经失效的资源。此外,无论是在推模式还是在拉模式中,我们必须细心控制所有已经提交的但尚未完成的任务。失效主机上的所有未完成任务都需要进行重新分配,或者由同一组中的其他可运行主机接管过来。
在应用程序中启用网格时的考虑:负载平衡。当您为网格环境启用应用程序的时候,还需要考虑与负载平衡有关的设计问题。应用程序设计和开发人员需要理解目前的负载平衡机制是什么样子(手工、推、拉、或是某种混合模式),这会对应用程序,特别是它的性能和运行时间产生影响。如果应用程序中具有大量独立的任务,每一个都可能受到负载平衡系统的影响或控制,那么这样的应用程序就可以从网格整体性能和吞吐量的提高当中获益,不过这个应用程序也可能需要建立更加复杂的机制,以便处理将任务延迟、或在整个网格内移动任务所带来的复杂性问题。
代理。在网格环境中,代理的职责非常重要。在很多网格环境中都可能需要实现这个组件,而实现它的方法可以相对简单,也可能十分复杂。代理的基本职责是在服务请求者和服务提供者之间提供匹配服务。在网格环境中,服务请求者可能是应用程序,也可能是被提交执行的任务。服务提供者就是网格资源。
Globus 工具箱并没有提供代理的功能。不过它通过监视与发现服务(MDS)提供了网格信息服务。您可以对 MDS 进行查询,从而发现主机、计算机和网络的属性,如当前可用处理器个数、所提供的带宽以及可用的存储类型等等。
在应用程序中启用网格时的考虑:代理。当您设计在网格环境中运行的应用程序时,很重要的一点是理解资源是如何被发现和分配的。可能需要应用程序告诉代理它的资源要求是什么,这样代理就可以保证给这个应用程序分配适当的资源。
进程间通信(IPC)网格系统中可能包含帮助任务之间相互通信的软件。比如说,应用程序可能会将自身划分为大量的子任务。这些子任务当中的每一个都是网格中的一个独立的任务。不过,应用程序的算法可能要求子任务之间相互通信,传递一些信息。这些子任务要能够定位其他特定的子任务,与之建立通信连接,并发送适当的数据。消息传递接口(Message Passing Interface,MPI)是一项开放标准,它及其若干变种经常作为网格系统的一部分来解决诸如此类的问题。
在应用程序中启用网格时的考虑:IPC。在任务之间进行进程间通信的需求总是会增加应用程序的复杂程度,因此只要有可能,您就应该将这种通信减到最少。然而,在大规模的复杂应用程序中,进程间通信通常是不可避免的。在这种情况下,您应该充分理解可用的 IPC 机制,并将失败或通信速度变慢带来的影响降到最低,这样有助于保证整个应用程序的成功。
非功能性需求
下面我们将讨论一些与基础设施有关的其他问题。这些问题被称为非功能性需求,是因为它们与网格中某项特定的功能单元没有关系,如任务管理、代理等。
性能
当您考虑在网格环境中启用应用程序时,网格的性能以及应用程序对性能的要求必须被考虑在内。服务请求者对服务的质量比较感兴趣,如可接受的运行时间等。当然了,如果您要构建一个网格及一个或多个应用程序,用来在网格中提供服务,那么服务提供者也希望能最大程度地利用网格中的功能和吞吐量。
可靠性
可靠性是计算领域内永恒的话题,网格环境也不例外。实现这一难题最好的方法是预见所有可能出现的失败情况,并提供解决这些情况的手段。最可靠的方法能够“容纳异常情况的出现”(surprise tolerant)。网格计算的基础设施必须处理主机中断和网络中断等情况。下面列出一些需要考虑的方法:
使用检查点-重启机制。
用持久性存储保存中间结果。
用心跳监视机制跟踪系统状态。
用健壮的系统管理解决方案最大程度地提高网格及其组件的可用性。
拓扑问题
网格计算的分布式本质使地理上和组织机构上的大跨度变得不可避免。随着内部网格的拓扑扩展为外部网格拓扑,复杂程度也逐渐提高。比如说,非功能性操作需求,安全性、目录服务、可靠性、性能等都变得更加复杂。让我们来研究一下拓扑的问题。
网络拓扑。网格架构内的网络拓扑可能在很多不同方面上呈现出来。网络组件可以表示 LAN 或校园网的连通性,甚至还能表示网格网络之间 WAN 的通信情况。网络的职责是为所有的网格系统提供充足的带宽。像基础设施中其他的组件一样,我们可以通过定制网络来提供更高级别的可用性、性能以及安全性。
出于安全性以及其他一些架构性的限制,网格系统从很大程度上来说是网络密集型的。尤其是数据网格,它可能在整个企业的网络内散布着一些存储资源,因此在基础设施的设计中,为了保证足够的性能,关键因素就在于处理数量巨大的网络负载。
启用应用程序时应该考虑的问题包括如何使网络通信量最小,如何使网络延迟最短。假设应用程序的设计已经能够保证最小的网络通信量,那么就有几种方法可以使网络延迟最短。比如说,千兆以太局域网可以用来支持高速群集,或实现远程网络之间的高速 Internet 骨干网。
数据拓扑。我们最希望把任务指派到距离它所使用的数据最近的机器上执行。这样可以降低网络的通信量,还可能降低可测量性方面的限制。
数据需要存储空间。在一个网格的设计中,存储的可能性问题是没有止境的。存储要求一定的安全性、要可以进行备份、要可管理,还/或要进行复制。在网格的设计中,您需要确定您的数据对于需要它的资源来说一直是可用的。除了可用性之外,您还需要保证数据得到适当的保护,因为您不能让未经授权的人访问到敏感的数据。最后,您需要最佳的数据访问性能。显然,带宽和访问数据的距离两者是相互有关的,但是您不会希望让 I/O 问题阻碍网格应用程序的运行速度。对于那些磁盘密集型的应用程序,或是数据网格而言,您可以将工作重点更多地放在存储资源上,比如您可以使用那些能够提供更高容量、冗余程度或容错机制的存储。
混合平台环境
网格环境是一组异质的主机,它们具有不同的操作系统和软件栈。为了执行应用程序,网格基础架构需要知道应用程序能够找到所匹配的网格主机环境的先决条件。您必须考虑多种不同的因素,然后才能使应用程序在类型与数量都尽可能多的环境中执行,这一点十分重要。
运行时需要考虑的问题。应用程序的运行时需求及网格主机的运行时环境必须相匹配。例如,下面列出 Java 应用程序在这方面的一些要求。用其他编程语言开发的应用程序也可能存在类似的要求。
Java 虚拟机(JVM)。用 Java 编程语言编写的应用程序要求具备 Java 虚拟机(JVM)。Java 应用程序可能对 JVM 的版本变化很敏感。为了解决这种敏感性,应用程序需要对 JVM 版本号进行识别,这是匹配的先决条件。这项先决条件的内容可能是要求某种 JVM 版本号,或是某个最小 JVM 版本号。Java 应用程序也可能对 Java 堆的大小敏感。Java 应用程序需要把最小堆容量作为先决条件。Java 包的类型,如 J2SE、或 J2EE 等,也可能是先决条件的一部分。
应用程序的跨平台可用性(可移植性)。应用程序的可执行性是与特定的平台有关的。比如说,用 C 或 C++ 语言编写的应用程序需要在目标平台上进行重新编译,然后才能运行。您可以为每一种平台重新编译一次应用程序,得到的可执行程序就标记为目标平台上的。这种做法能够增加应用程序能够运行的网格主机数目。它的局限性在于将应用程序移植到其他平台上时所花费的成本。
了解 OS 环境。网格是一组异质计算资源。如果应用程序依赖于某种特定的操作系统。那么该应用程序就需要验证网格中是否具有正确的环境,并处理环境不同所带来的问题。
输出文件格式。当一台网格主机上运行的应用程序的输出信息被另一台网格主机上运行的应用程序所访问的时候,了解输出文件的格式就显得十分必要了。这两台网格主机可能具有不同的平台环境。您可以考虑用 XML 作为数据交换的格式。XML 现在已经十分流行,它不仅仅是一种用于数据交换的标记语言,还是一种用于存储半结构化的数据格式。
当您要在网格环境中启用某个应用程序时,必须充分理解网格环境中的功能性组件和非功能性因素,如性能要求或操作系统要求等。
评论
查看更多