65.9K
CodeProject 正在变化。 阅读更多。
Home

集群计算

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.40/5 (14投票s)

2005年9月20日

11分钟阅读

viewsIcon

87605

集群(Cluster)是指通过软件和网络将独立的计算机组合成一个统一的系统。集群通常用于高可用性(High Availability)以提高可靠性,或用于高性能计算(High Performance Computing)以提供比单台计算机更强的计算能力。

引言

集群(Cluster)是一个广泛使用的术语,指的是通过软件和网络将独立的计算机组合成一个统一的系统。在最基本的层面上,当两台或多台计算机协同工作解决一个问题时,就被认为是一个集群。集群通常用于高可用性(HA)以提高可靠性,或用于高性能计算(HPC)以提供比单台计算机更强的计算能力。

随着高性能计算(HPC)集群规模的不断扩大,其管理变得越来越复杂且耗时。使用自动化的集群计算解决方案可以有效地管理这些集群的部署、维护和监控等任务。

为什么选择集群

集群并行处理提供了几项重要优势

  • 集群中的每台机器都可以是一个完整的系统,可用于广泛的其他计算应用。这导致许多人建议集群并行计算可以简单地利用人们办公桌上闲置工作站的“浪费周期”。实际上,回收这些周期并没有那么容易,而且可能会减慢你同事的屏幕保护程序,但这是可以做到的。
  • 当前网络系统的爆炸式增长意味着构建集群所需的大部分硬件都以高销量出售,从而导致相应的低“商品化”价格。进一步的节省来自于这样一个事实:每个集群只需要一个视频卡、显示器和键盘(尽管在安装Linux时,你需要将它们切换到每台机器上;一旦运行起来,典型的Linux PC就不需要“控制台”了)。相比之下,SMP*和附加处理器是小得多的市场,倾向于每单位性能的价格略高。
  • 集群计算可以扩展到非常大的系统。虽然目前很难找到拥有四个以上处理器的Linux兼容SMP,但大多数市售网络硬件可以轻松构建多达16台机器的集群。通过少量工作,可以连接数百甚至数千台机器。事实上,整个互联网都可以被看作是一个真正巨大的集群。
  • 与修复部分故障的SMP相比,替换集群中的“故障机器”非常简单,这为精心设计的集群配置提供了更高的可用性。这不仅对于不能容忍重大服务中断的特定应用程序很重要,而且对于拥有足够多处理器以至于单机故障相当常见的系统来说也很重要。(例如,即使PC的平均故障间隔时间为两年,在拥有32台机器的集群中,在6个月内至少有一台发生故障的概率也非常高。)

好的,所以集群是免费或廉价的,并且可以非常大且高度可用……为什么不是每个人都使用集群呢?嗯,也有问题。

  • 除少数例外,网络硬件并非为并行处理而设计。与SMP和附加处理器相比,延迟通常非常高,带宽相对较低。例如,SMP的延迟通常不超过几微秒,而集群通常为数百或数千微秒。SMP通信带宽通常超过100兆字节/秒,而即使是最快的ATM网络连接也慢了五倍以上。
  • 将集群视为一个单一系统的软件支持非常少。

因此,基本情况是集群提供了巨大的潜力,但对大多数应用程序来说,要实现这种潜力可能非常困难。好消息是,有相当多的软件支持可以帮助你为适合这种环境的程序获得良好的性能,也有专门设计的网络可以拓宽获得良好性能的程序范围。

    *SMP:多处理器曾经是大型机和高端服务器的专属领域。如今,它们在各种系统中都很常见,包括高端PC和工作站。这些设备中最常用的架构是对称多处理(SMP)。“对称”一词既重要又具有误导性。多处理器,顾名思义,如果任何一个处理器都可以执行任何给定功能,那么它们就是对称的。

    集群计算与网格计算

    集群计算的特点

    • 紧密耦合的计算机。
    • 单一系统镜像。
    • 集中式作业管理和调度系统。

    集群计算用于高性能计算和高可用性计算。

    网格计算的特点

    • 松散耦合。
    • 分布式作业管理和调度。
    • 无单一系统镜像。

    网格计算是分布式计算的超集。根据底层的安装设置,它既用于高吞吐量计算,也用于高性能计算。

    与这种演变同步,更强大的仪器、更强大的处理器和更高保真度的计算机模型不断增加这些集群所需的数据吞吐量。这种趋势对支持这些I/O密集型应用程序的存储系统造成了压力,并促使基于与集群计算相同的横向扩展方法出现了一系列新的存储解决方案。

    高吞吐量计算应用程序生产的解剖

    大多数这些高吞吐量应用程序可以归类为两种处理场景之一:数据缩减(Data Reduction)或数据生成(Data Generation)。前者处理大型输入数据集——通常来自某种科学仪器——以识别模式和/或生成输入数据的聚合描述。这是地震处理以及类似结构的分析应用(如微阵列数据处理或遥感)最常见的场景。在后一种场景中,小型输入数据集(参数)用于驱动仿真,生成大型输出数据集——通常是时间序列的——这些数据集可以进一步分析或可视化。这里的例子包括碰撞分析、燃烧模型、天气预报以及用于生成特效和全长动画电影的计算机图形渲染应用程序。

    图 1

    分而治之

    为了解决这些问题,当今的集群计算方法采用了通常称为横向扩展(scale-out)或共享无(shared nothing)的并行计算方法。在横向扩展模型中,应用程序使用分而治之(divide-and-conquer)的方法进行开发——问题被分解成数百、数千甚至数百万个任务,每个任务独立(或近乎独立)执行。最常见的分解方法利用问题的固有数据并行性——通过识别构成单个任务的数据子集或分区来分解问题,然后将这些任务和相应的数据分区分发到计算节点进行处理。

    这些横向扩展方法通常采用单处理器或双处理器计算节点,采用1U配置,便于机架式部署。数百甚至数千个这样的节点通过高速、低延迟的专有互连(如Myricom的Myrinet®、Infiniband或商品化的千兆以太网交换机)相互连接。每个计算节点可以处理一个或多个应用程序数据分区,具体取决于节点配置以及应用程序的计算、内存和I/O需求。这些分区应用程序通常使用消息传递接口(MPI)程序开发和执行环境进行开发。

    横向扩展环境允许熟练的程序员利用一组通用的库来控制整体程序执行,并支持分布式高性能计算应用程序所需的处理器间通信。横向扩展方法为高性能计算所解决的许多问题提供了有效的解决方案。这两种数据密集型场景如图1所示。

    一切都关乎数据管理

    然而,可伸缩性和性能是有代价的——即需要额外的复杂性来将问题分解成块(数据分区),在必要时跨块交换或复制信息,然后将部分结果集重新组合成最终答案。这种数据并行方法需要创建和管理由计算节点使用的数据分区和副本。管理这些分区和副本带来了许多操作上的挑战,尤其是在大型集群和网格计算环境中,这些环境由多个项目或组织共享,以及在核心数据集经常发生变化的环境中。这通常是采用集群计算的组织面临的最耗时和最复杂的发展问题之一。

    可伸缩的共享数据存储,集群中所有节点都可以平等访问,是为计算集群客户端提供所需数据存储和访问服务的明显途径。除了为集群节点提供高带宽的聚合数据访问外,这类系统还可以为计算检查点提供非易失性存储,并充当结果网关,使结果能够立即提供给下游的分析和可视化工具,以实现一种称为计算转向(computational steering)的新兴方法。

    然而,直到最近,这些使用传统SAN和NAS架构实现的存储系统——才只能支持中等规模的集群,通常不超过32或64个节点。

    共享存储架构

    存储区域网络(SAN)和网络附加存储(NAS)是当今主流的存储架构。SAN将基于块的直连存储模型扩展到高性能专用交换 fabric 上,以提供设备共享功能,并允许更灵活地利用存储资源。LUN和卷管理软件支持将驱动器和存储阵列分区并分配给多个文件或应用程序服务器(历史上,是RDBMS系统)。基于SATA的SAN存储以及FC交换和HBA的进一步商品化推动了SAN市场的近期增长——以及在高性能计算应用中的更广泛采用。

    网络附加存储(NAS)系统利用商品化的计算和网络组件,通过标准的客户端互连基础设施(100Mbit或1 GB以太网)使用共享文件访问协议(NFS和CIFS)直接向用户提供可管理的存储。这类存储包括NAS设备以及由DAS和SAN组件构建的系统,这些系统通过NFS和CIFS导出其文件系统。NAS设备为大量客户端(数百或数千用户)提供大量的文件“事务”(ops),但在实现上可能会受到被称为filer瓶颈的限制。图2描绘了传统的DAS、SAN和NAS存储架构。

    图 2

    这些传统方法在高性能计算场景中都有其局限性。SAN架构通过提供一个可根据需要分配和重新分配给服务器的物理存储池化资源模型,改进了DAS模型。但数据不在服务器之间共享,并且服务器数量通常限制在32或64个。NAS架构为成千上万的客户端提供了文件共享,但随着客户端数量的增加,会遇到性能限制。

    尽管这些存储架构多年来一直很好地服务于企业计算市场,但集群计算代表了一类新的存储系统交互——一种需要高并发性(数千个计算节点)和高聚合I/O。这种模型将传统存储系统的能力推向了极限。

    进入横向扩展存储

    那么,为什么不以与计算集群相同的方式“横向扩展”存储架构——即使用多个文件服务器来支持大型集群呢?事实上,许多组织已经尝试过。然而,将更多文件服务器引入环境会大大增加存储管理的复杂性。新的卷和挂载点被引入到应用程序套件中,开发人员必须设计新的策略来在多个服务器或NAS头之间平衡容量和带宽。此外,这种方法通常需要定期重新评估和重新平衡存储资源——通常伴随着系统停机。简而言之,这些方法“无法扩展”——尤其是在可管理性方面。

    现在,前沿出现了一些集群存储系统,它们能够支持多PB级别的容量和数十GB/秒的聚合吞吐量——所有这些都在单个全局命名空间中,具有动态负载均衡和数据重分发功能。这些系统扩展了现有的SAN和NAS架构,并由Panasas(ActiveScale)、Cluster File Systems(Lustre)、RedHat(Sistina GFS)、IBM(GPFS)、SGI(CxFS)、Network Appliance(SpinServer)、Isilon(IQ)、Ibrix(Fusion)、TerraScale(Terragrid)、ADIC(StorNext)、Exanet(ExaStore)和PolyServe(Matrix)等公司提供。

    这些解决方案使用与横向扩展计算架构相同的分而治之方法——将数据分散到存储集群中,通过分发负载来提高数据和元数据操作吞吐量,并为大型、高性能文件系统提供单一管理点和单一命名空间。

    集群存储系统提供

    • 可伸缩的性能,包括带宽和IOPS。
    • 计算集群节点的统一共享数据访问。
    • 有效的资源利用,包括自动负载和容量平衡。
    • 多协议互操作性,以支持一系列生产需求,包括就地后处理和可视化。

    计算和网络技术的商品化促进了集群计算在主流企业计算应用中的普及。下一波技术商品化——可伸缩网络存储架构——有望加速这一趋势,推动利用这些系统提供的更高性能、可伸缩性和可管理性的新应用程序和方法的开发。

    结论

    随着集群计算技术的出现和低成本集群解决方案的可用性,越来越多的研究计算应用程序被部署在集群环境中,而不是在单个共享内存系统上。高性能集群计算不仅仅是拥有大量通过高带宽低延迟互连连接的计算机。为了实现预期的加速和性能,应用程序本身必须针对分布式内存环境进行充分的并行化。

    关注点

    我的大四毕业论文项目是关于“为高性能计算开发网格资源分配和管理(GRAM)”,这与网格计算完全相关。在撰写本文之前,我深入研究了网格计算和集群计算,并理解了它们之间的区别。研究之后,我计划写一篇关于“什么是集群计算,它的好处、局限性和范围。以及集群计算与网格计算的区别”。

    © . All rights reserved.