集群的可扩展性及其分布式体系结构(2)-下
2008-11-25 10:59:50 来源:WEB开发网可扩展的并行计算体系结构
首先,我们先来看一下计算机系统体系结构发展的几个主要类型。每种体系结构的差别并不大,关键在于互联技术、结点的复杂度和耦合程度的不同。在集群计算和分布式系统中,以下这三种体系结构是比较具有代表性的。
无共享体系结构
无共享体系结构(目前大多数集群采用的方式。每个节点都是独立的PC或者工作站)
我们研究的集群系统大多数属于这一类的体系结构。集群的每一个结点都是完整独立的操作系统和硬件设备集合。结点之间通过局域网或者开关阵列以松耦合的方式连接起来,彼此分享结点的部分甚至全部可用资源:CPU、内存、磁盘、IO设备等等,以形成一个对外单一、强大的计算机系统。这类系统对SSI的能力较弱,需要特殊的中间件或者OS扩展加以支持。
共享磁盘体系结构
共享磁盘体系结构(结点基本上仍是独立的计算机,没有或者不使用本地的磁盘文件系统)分布式文件系统正是这类体系结构的应用体现。常见的NFS、AFS或者GFS都属于这个范畴。而硬件上的解决常常通过共享磁盘阵列或者SAN来实现。该体系结构主要能够解决区域存储空间的容量问题,通过构造单一的虚拟的文件系统,提供给整个集群一个巨大的存储设备。尤其在一些高可用的场合,共享磁盘阵列常常能够解决文件系统容错和数据一致等可靠性问题。
共享存储器体系结构
共享存储器体系结构(最不易实现,具有较强的SSI能力)从实现的难度上讲,不论是硬件制造的复杂性还是软件的实现难度,这种体系结构都大大超过其他几类体系结构的实现。实现这类体系结构的集群系统有DSM(分布式共享存储集群)、NUMA、ccNUMA等技术。在这类体系结构中,可以将多个节点的计算资源集合在一起,形成一个内存空间一致的单一系统。在随后的学习中我们知道,这样的系统具有最好的SSI(单一系统映像)能力。
可扩展与单一系统映象
我们最终希望,我们所面对的并行集群,不管适用于密集计算还是高可靠商用环境,都要有良好的可扩展性,可接受的单位计算成本,可预期的技术前景。因此,设计一个计算系统特别是并行环境下的集群系统,时时刻刻别忘了可扩展性这一核心的要求。
但我们从另外一个角度来看待并行计算集群的时候,就会有不同的结论了。其实,对于最终用户和编程人员来说,并行计算机模型的重点在于他们所看到的计算机是什么样的,也就是我们通常所称的SSI(单一系统映像)。
如果作为编程者,当然希望自己所面对的是一台机器而不是一堆机器,一台机器意味着单一的寻址空间,无须处理消息传递或者远程调用这样复杂的编程技术。那么,在这样的观点下,具有单一地址空间的集群系统就具备了这个能力;或者使用者希望拥有一个巨大的一致的(只有一个根目录)的文件系统,那就需要在文件系统层次上进行SSI的工作。
但从用户的角度来看,他并不关心你是如何处理诸如地址空间、消息传递这些看起来和他毫无关系的东西,用户只关心他用的是一台独立的计算机系统,这样可以减少他使用的复杂度,不需要在多个系统之间来回切换,可以方便的管理他所面对的"一台机器"。那么,提供管理层次和使用层次的SSI就是必要的了。
所以,并行计算模型就是由使用者(包括程序员、用户)看到的一个抽象并行计算机,和冯氏结构计算机相似,能够进行顺序计算(其背后可能是并行的运算程序)和并行计算任务的计算机系统。
按照处理器、内存、OS以及互联方法来进行并行系统的分类,在参考彼此可扩展性和单一系统映像的这两个方面,我们能够得到下面的图形:
集群、分布式系统、MPP、SMP的体系结构比较
上图中,节点可以是一台PC、一台工作站或者SMP服务器。节点的复杂性指的是软件和硬件的能力。一般来说,集群节点要比MPP复杂一些,因为每个集群结点都有独立的操作系统和外围设备,而MPP中的结点可能仅仅是操作系统的一个微内核。
SMP服务器的节点复杂性和PC以及商用集群相比,相对高一些。拿最常见的x86构架SMP服务器来说吧,不但主板、总线技术都远远比PC复杂。而且为了支持企业级应用环境,SMP还需要支持更多的高端外设,提供存储设备的热拔插能力,内存数据纠错等等高端技术,这些技术的应用势必增加SMP的复杂程度。
MPP通常是指采用无共享资源结构的大型并行处理系统,一般包括几百个处理器节点,节点一般运行一个不完整的OS(也叫微内核),结点之间通过高速开关互联。这样的专有系统往往具有比较好的可扩展能力,但是在技术换代上受限于专有系统本身。
SSI作为集群实现的一大要素,其范围包括了单一的应用层次、子系统,运行时系统、操作系统内核以及硬件层次。或者说,SSI不是绝对的,是一个相对的概念,取决于用户从什么样的角度看待系统,是IP层面上还是内存空间上或者是文件系统的SSI,这都由最终的应用环境决定。
到了分布式系统的这个范畴,系统往往提供多个系统映象,呈现出一个多入口、多映象的系统集合,每个节点具有很高的自治能力。而MPP、SMP则以紧凑的方式提供相对单一的计算资源,如同一个巨大的工作站。在分布式系统中,除了使用同构结点外,还根据需要常常使用异构的平台,这势必增加分布式系统的设计难度和管理复杂性。其他特性见下表:
特征 | MPP | SMP | 集群 | 分布式系统 |
结点个数 | 100~1000数量级 | 10~100数量级 | 100左右的数量级 | 10~1000以上数量级 |
结点复杂性 | 细粒度到中粒度 | 中或粗粒度 | 中粒度 | 大范围 |
结点间通信 | 消息传递或者共享变量 | 共享存储器 | 消息传递 | 共享文件、RPC、消息传递 |
任务调度 | 主机单一队列 | 单一运行队列 | 多队列协同运行 | 独立的运行队列 |
单一系统映像 | 部分支持 | 支持完全的SSI | 某一层次支持 | 目前不支持 |
结点操作系统 | 一个主要的内核和多个微内核 | 独立的完整的OS | N个同类OS | 同类OS或异构OS |
地址空间 | 多/单地址空间(分布式共享内存) | 单一 | 多 | 多 |
系统可用性 | 低或中 | 低 | 高或者容错 | 中等 |
归属单位 | 一个组织 | 一个组织 | 可以多个组织(复用) | 多组织 |
连接距离 | 紧耦合,在一个物理空间内 | 紧耦合,在一个机箱内 | 松耦合,楼区范围(依赖于连接介质) | 松耦合,跨地域(地区或国家) |
对于这四类系统来说,SMP的SSI程度最高,它是在所有的层次上提供SSI,即共享一切系统资源:单一地址空间、单一的文件系统、单一的操作系统内核等等,看起来和一台单独的单CPU没什么两样。MPP仅仅在某些应用层和系统层支持SSI。集群提供的SSI程度更低,一般只能满足某一两个方面的SSI要求。而对于分布式系统,比如网格,其SSI的实现程度就低的多了。通过类似JAVA这样的跨平台工具,分布式系统或许可以提供某一定义下的SSI能力,比如单一的JAVA运行空间。
集群的重要指标
对于集群,我们可以得到这样的一个简单的概念:集群是全体计算机(也叫节点)的集合,这些计算机由高性能网络或者LAN物理的相连。典型的情况下,每个计算机结点可以是一台SMP一台工作站或者是最普通不过的PC。最重要的是,这些各自独立的计算机要能够同心协力一起工作,而且在"外"看上去是单一的集成的计算机资源。
如果只是简单的用LAN把集群连接起来,就称之为集群,是不可能具备实用价值的。考察集群很重要的是看待集群的几个性能、功能指标。
能用性:由于集群中的每个节点都是运行传统平台,故用户能在熟悉和成熟的环境中开发和运行他们的程序。通用平台提供编程环境、操作界面、控制监控系统的工具甚至是GUI,允许用户们运行他们原来在工作站上的大量程序而无需修改。所以,我们可以把集群系统看作一个大型的工作站,作为使用者,和平时操作没什么两样,只是性能提高了许多。
可用性:可用性是指一个系统从事生产性使用的时间百分比(MTBF平均无故障时间)。传统的整体系统,比如主机系统和容错系统依靠昂贵的定制设计来实现高可用性。集群不使用定制组件,而使用廉价的商品化组件以提供高可用性,而高度的设备冗余则是集群最常使用的方式:
处理器和存储器:集群有多个处理器和存储器部件,当某个部件失效时,其他的仍然可以使用,不影响集群整体的运行。与此相反,在SMP中,由于处理器通过共享存储器和总线通信,所以存储器一旦失效将会导致系统崩溃。存储器就成了SMP的"单点失效"。
磁盘阵列:我们常见的RAID 0或者5,都能够满足计算机的磁盘冗余容错需求。在集群中,往往使用多个局部磁盘,通过标准的共享协议(NFS,IFS等)以支持容错需求。当某个节点的本地磁盘失效时,可以通过远程磁盘继续运行。常见的有NAS设备,一种专用于集群网络存储的磁盘设备。或者借助分布式文件系统软件,实现多个集群节点之间的磁盘容错。
操作系统:一般的说,集群在某一层次上体能够实现单一系统映像。但是多个操作系统映像还是存在的,每个节点都有一个独立的操作系统。当某个节点因为软件或硬件故障而崩溃,其他的节点仍然不受影响继续工作,而整个集群也和原先没有什么两样。我们有时也把这一特性叫做"节点容错能力"。
通信网络:好的集群设计充分考虑了各种可能出现的故障情况,并采取一切可行的措施加以避免。集群结点的通信故障也是必须考虑的。在一个大型的复杂的集群中,一段通信链路的故障可能导致不止一个的节点失效,甚至会使得整个集群变得不可用。因此,在集群的关键点之间采取合适的冗余链路就非常必要了。一般考虑到集群的入口节点、主控结点、或者监视节点比较容易成为单点失效,那么在这些节点的接入策略中,使用备份链路可以达到比较好的效果。
可扩展性:一个集群的计算能力随结点增多而增加。其次,集群的可扩展性是群体可扩展性。因为是松耦合的结构,集群能扩展至几百个结点,而对于SMP来讲,要超过几十个结点就非常困难。
在SMP中,共享存储器以及存储器总线是系统性能的瓶颈。相同的程序集运行于集群时,不存在存储器瓶颈。每个结点可在一个结点上执行,充分使用局部存储器。对于这类应用,集群可提供更高的总体存储器带宽和减少存储器时延。集群的局部磁盘也聚集为大磁盘空间,可容易地超过集中式RAID磁盘空间。增强的处理、存储和I/O能力使得集群只要使用经良好开发的、如PVM或MPI那样的并行软件包,就可求解大型应用问题。
SMP不具有高可扩展能力,因为它使用竞争总线和集中式共享存储器。单操作系统映像及共享存储器是两个潜在的单失效点,会降低SMP的可用性。
容错系统有极高的可用性,但扩展的代价昂贵。而MPP的扩展能力要更强一些,而且可以保持比较好的SSI能力。目前,集群处于相对折衷的位置,将向着更高性能更高可用性的方向扩展。
性能价格比:集群能成本有效的获取上述优点。传统的超级计算机以及MPP的成本很易达到几千万美元。与此相比,具有相同峰值性能的集群价格则要低1到2个数量级。集群大量的采用商品化部件,他们的性能和价格遵循摩尔定律,从而使集群的性能/成本比的增长速率远快于MPP。
可用性与可伸缩性的综合比较
设计一个具有良好的扩展集群系统,就要兼顾上述的方方面面。
首先尽量使集群的各个组成部件相互独立,以使独立的局部扩展成为可能,并且保证向后兼容的特性。还要尽可能采用商品化的组件,包括OS、互联网络、主机系统甚至是应用编程环境。最终实现:算法独立于体系结构、应用独立于平台、语言独立于机器、结点独立于网络。
其次就是选择合适的实现模型来进行集群系统的设计任务,尽量使用流行的开放的标准件,以降低单位成本。
最后,在设计的时候还要尽量平衡性能,避免系统里出现的"木桶原理"(众所周知,木桶的装水量受限于木桶最短的那块木板);此外在考虑可用性的时候也要注意单点失效的问题,以免实际应用中因为小的错误导致整个系统不可用。
那么,让我们来看一下经过一番讨论之后,我们所期望的集群是什么样子的。
结束语
我们之所以花费大量的篇幅介绍集群的几个重要的体系结构概念,是因为这些概念构成了集群的最终整体。最后就让我们来看一下,综合了上述的方方面面后,我们可以得到以下几点关于集群的要素:
独立的结点:每个节点是一台完整的计算机,一般是单一的系统。
单一系统映像能力:一个集群是一个单一的计算资源。集群将结点作为单独的资源,借助于单一系统映像技术,实现统一资源单一入口的概念。SSI使得集群更加易于使用和管理。
有效的结点间连接:集群中的结点,通常使用商品化网络,如以太网、FDDI或者光纤、ATM等等。此外,还使用标准的网络协议以建立进行节点间的通讯机制。这些都保证集群通信的有效进行。
增强的可用性:集群化提供了一个成本有效的方法以增加一个系统的可用性,比起主流的部件级容错产品,集群往往能够提供更合理的花费以达到效果。商用领域多数以加强系统的可用性为设计目标,因此可以使用集群中的技术加以实现。
更好的性能:平心而论,集群的诞生多少是因为性能驱动所促成的。在科学计算、工程应用、远程虚拟现实仿真等服务领域中,集群应该能够提供更高的性能,允许将集群作为超级服务器使用,在最短的时间内完成原本单机系统无法顺利完成的任务,或者是提供巨大的磁盘和内存空间,实现那些"不可能的任务"。
赞助商链接