当前云计算技术领域存在两个主要技术路线,一个是基于集群技术的云计算资源整合技术,另一个是基于虚拟机技术的云计算资源切分技术。

        基于集群技术的云计算资源整合技术路线将分散的计算和存储资源整合输出,主要依托的技术为分布式计算技术。集群技术从传统的高性能计算逐步走向云计算和大数据领域,集群架构是当前高性能计算的主流架构,然而无独有偶,集群架构也是大数据领域技术的主流架构,大数据可以认为是面向计算的高性能计算技术,集群技术是大数据系统的重要技术。

        Google、Hadoop、Storm、HPCC等系统都采用了集群技术,其资源整合是跨物理节点的。学习集群技术的基本知识对理解云计算大数据技术有很好的作用。

        并行计算发展到现在的集群架构成为了主流,首先提出云计算概念的Google公司其系统的总体结构就是基于集群的,Google公司的搜索引擎同样就是利用上百万的服务器集群构成的,这些服务器通过软件结合在一起,共同为遍布于全世界的用户提供服务。

        从云计算的角度看Google公司的系统整合了上百万的服务器计算和存储资源通过网络通道将自己的搜索服务提供给用户。利用集群构建云计算系统为云计算资源池的整合提供了最大的想象力,资源池的大小没有任何原则上的限制。

        集群系统是一组独立的计算机(节点)的集合体,节点间通过高性能的互联网络连接,各节点除了作为一个单一的计算资源供交互式用户使用外,还可以协同工作,并表示为一个单一的、集中地计算资源,供并行计算任务使用。集群系统是一种造价低廉、易于构建并且具有较好可扩放性的体系结构。

一、集群系统发展迅速,主要原因:

  1. 作为集群节点的工作站系统的处理性能越来越强大,更快的处理器和更高效的多CPU机器将大量进入市场;
  2. 随着局域网上新的网络技术和新的通信协议的引入,集群节点间的通信能获得更高的带宽和较小的延迟;
  3. 集群系统比传统的并行计算机更易于融合到已有的网络系统中去;
  4. 集群系统上的开发工具更成熟,而传统的并行计算机上缺乏一个统一的标准;
  5. 集群系统价格便宜并且易于构建;
  6. 集群系统的可扩放性良好,节点的性能也很容易通过增加内存或改善处理器性能获得提高。

二、集群系统具有以下重要特征:

  1. 集群系统的各节点都是一个完整的系统,节点可以是工作站,也可以是PC或SMP器;
  2. 互联网络通常使用商品化网络,如以太网、FDDI、光纤通道和ATM开关等,部分商用集群系统也采用专用网络互联;
  3. 网络接口与节点的I/O总线松耦合相连;
  4. 各节点有一个本地磁盘;
  5. 各节点有自己的完整的操作系统。

        集群系统作为一种可扩放并行计算体系,与SMP、MPP体系具有一定的重叠性,三者之间的界限是比较模糊的,有些MPP系统如IBM SP2,采用了集群技术,因此也可以把它划归为集群系统。

在下表中给出了这三种体系特性的比较,其中DSM表示分布式共享内存。

        MPP通常是一种无共享(Shared-Nothing)的体系结构,节点可以有多种硬件构成方式,不过大多数只有主存和处理器。

        SMP可以认为是一种完全共享(Shared-Everything)的体系结构,所有的处理器共享所有可用的全局资源(总线、内存和I/O等)。

        对于集群来说,集群的节点复杂度通常比MPP高,因为各集群节点都有自己的本地磁盘和完整的操作系统;MPP的节点通常没有磁盘,并且可以只是使用一个微内核,而不是一个完整的操作系统;SMP服务器则比一个集群节点要复杂,因为它有更多的外设终端,如终端、打印机和外部RAID等。


        集群系统不仅带来了上述研究方向,同时也带来了不少具有挑战性的设计问题,如可用性、好用性、良好的性能、可扩放性等。所以在集群系统的设计中要考虑5个关键问题:

(1)可用性:如何充分利用集群系统中的冗余资源,使系统在尽可能长的时间内为用户服务。集群系统有一个可用性的中间层,它使集群系统可以提供检查点、故障接管、错误恢复以及所有节点上的容错支持等服务。

(2)单一系统映像SSI(Single System Image):集群系统与一组互联工作站的区别在于,集群系统可以表示为一个单一系统。集群系统中也有一个单一系统映像的中间层,它通过组合各节点上的操作系统提供对系统资源的统一访问。

(3)作业管理(Job Management):因为集群系统需要获得较高的系统使用率,集群系统上的作业管理软件需要提供批处理、负载平衡、并行处理等功能。

(4)并行文件系统PFS:由于集群系统上的许多并行应用要处理大量数据,需进行大量的I/O操作,而这些应用要获得高性能,就必须要有一个高性能的并行支持文件。

(5)高效通信(Efficient Communication):集群系统比MPP机器更需要一个高效的通信子系统,因为集群系统有以下几点节点复杂度高,耦合不可能像MPP那样紧密。节点间的连接线路比较长,带来了较大的通信延迟,同时也带来了可靠性、时钟扭斜(Clock Shew)和串道(Cross-Talking)等问题。集群系统一般使用标准通信协议下的商品化网络,标准的通信协议开销比较大,影响到系统的性能,而性能较好的低级通信协议缺乏一个统一的标准。

三、集群系统系统的分类

传统的集群系统系统可以分为4类:

(1)高可用性集群系统

高可用性集群系统通常通过备份节点的使用来实现整个集群系统的高可用性,活动节点失效后备份节点自动接替失效节点的工作。高可用性集群系统就是通过节点冗余来实现的,一般这类集群系统主要用于支撑关键性业务的需要,从而保证相关业务的不间断服务。

(2)负载均衡集群系统

负载均衡集群系统中所有节点都参与工作,系统通过管理节点(利用轮询算法、最小负载优先算法等调度算法)或利用类似一致性哈希等负载均衡算法实现整个集群系统系统内负载的均衡分配。

(3)高性能集群系统。

高性能集群系统主要是追求整个集群系统系统计算能力的强大,其目的是完成复杂的计算任务,在科学计算中常用的集群系统就是高性能集群系统系统,目前物理、生物、化学等领域有大量的高性能集群系统提供服务。

(4)虚拟化集群系统。

在虚拟化技术得到广泛使用后,人们为了实现服务器资源的充分利用和切分,将一台服务器利用虚拟化技术分割为多台独立的虚拟机使用,并通过管理软件实现虚拟资源的分配和管理。这类集群系统称为虚拟集群系统,其计算资源和存储资源通常是在一台物理机上。利用虚拟化集群系统可以实现虚拟桌面技术等云计算的典型应用。

        目前基于集群系统结构的云计算系统往往是几类集群系统系统的综合,集群系统式云计算系统既需要满足高可用性的要求又尽可能地在节点间实现负载均衡,同时也需要满足大量数据的处理任务。所以像Hadoop、HPCC这类云计算大数据系统中前三类集群系统的机制都存在。而在基于虚拟化技术的云计算系统中采用的往往是虚拟化集群系统。


四、单一系统映射

        云计算系统需要将计算资源和存储资源形成一个统一的资源池,目前基于集群系统技术的云计算系统如Hadoop等,从使用者来看并不需要了解集群系统的具体结构,也不需要分别对集群系统中的每一个节点进行操作,系统对外都有一个统一的接口,这就是单一系统映像技术。

        单一系统映像SSI是集群系统的一个重要特征,它使得集群系统在使用、控制、管理和维护上更像一个工作站。单一系统映像可以带来以下好处:

(1)终端用户不需要了解应用在哪些节点上运行;

(2)操作员不需要了解资源所在地位置;

(3)降低了操作员错误带来的风险,使系统对终端用户表现出更高的可靠性和可用性;

(4)可灵活采用集中式或分布式的管理或控制,避免了对系统管理员的高需求;

(5) 大大简化了系统的管理,一条命令就可以对分布在系统中的多个资源进行操作;

(6)提供了位置独立的消息通信。

单一系统映像包括以下含义:

(1)单一系统。

尽管系统中有多个处理器,用户依然把整个集群系统视为一个单一的系统来使用,例如,与分布式系统不一样,用户可以告诉系统:“用4个处理器来执行我的应用程序”。

(2)单一控制。

逻辑上,最终用户或系统用户使用的服务都来自只有惟一接口的同一个地方,例如,一个用户将批处理作业提交到一个队列集,系统管理员就可以从一个单一的控制点配置集群系统的所有软、硬件组件。

(3)对称性。

用户可以从任一个节点上获得集群服务,也就是说,对于所有的节点和所有的用户,除了那些对一般访问权限作保护的服务和功能外,所有的集群服务和功能性都是对称的。

(4)位置透明。

用户不用了解真正执行服务的物理设备位置。

         在云计算系统中实现单一系统映射可以保证云计算复杂的集群结构及集群节点间的相互关系对于用户是透明的,系统向用户屏蔽了内部的复杂性,云计算系统的使用者只需要面对一个统一的访问接口就能实现对云计算系统资源的访问。这种做法使云计算系统从逻辑上看上去更像一个统一的巨大的资源池,资源池大小的动态变化及结构被系统所封装。

五、Beowulf集群

        Beowulf集群是一种用作并行计算的集群架构,通常是由一台主节点和一台以上的子节点通过以太网或其他网络连接的系统,它采用市面上可以购买的普通硬件(例如装有Linux的PC)、标准以太网卡和交换机,它不包含任何特殊的硬件设备,可以重新组建。

Beowulf一词起源于一首现存的最古老的英语史诗,比喻以较低的成本实现与千百万用户之间的计算机资源共享。

Beowulf集群的出现为并行计算技术的普及提供了可能,使从前只有高端用户才有机会使用的高性能计算系统现在可以在普通实验室使用。

1994年第一个Beowulf系统诞生时使用的是100MHz的Intel 80486芯片DX4,在1994年Beowulf系统的主要瓶颈在于处理器的速度。

1998 年在美国Los Alamos 国家实验室的一个 Beowulf 集群Avalon用 140 块 533 MHz Alpha 微处理器(21164A)建成。每个节点有 256 MB 内存和 3 GB 的硬盘空间。这些节点通过快速以太网的 PCI 卡连接。它运行在 RedHat Linux 5.0 上。依据Linpack benchmark测试结果,Avalon集群的运行速度为每秒 477 亿次浮点运算(47.7 Gflops )。它价值大约31.3万美元,并且在价格性能比方面,它排在 Silicon Graphics 的 Origin 2000 64 位处理器之上,后者有相同数量的 Gflops而价值大约 180 万美元。

但随着处理器远大于存储器的速度及总线带宽的速度发展,如今带宽已经成为制约Beowulf系统性能的主要因素了,系统的综合效率对系统内的带宽有很强的依赖性。

Beowulf系统这种诞生于面向计算时代的产物,在云计算时代再次被人们所重视,Google在早期单次点击所获得收益很小的情况下不得已采用了廉价服务器来构建自己的搜索系统,却意外成就了云计算的出现。

开源的Hadoop系统也继承了这一理念,利用廉价服务器搭建大数据处理系统。容错机制的出现使系统对服务器可靠性的要求降低,单个节点的性能和失效对整个系统的性能和正常工作影响很小。

Beowulf系统的特点如下:

(1)Beowulf系统通常由一个管理节点和多个计算节点构成。它们通过以太网(或其他网络)连接。管理节点监控计算节点,通常也是计算节点的网关和控制终端。当然它通常也是集群系统文件服务器。在大型的集群系统中,由于特殊的需求,这些管理节点的功能也可能由多个节点分摊。

(2)Beowulf系统通常由最常见的硬件设备组成,例如,PC、以太网卡和以太网交换机。Beowulf系统很少包含用户定制的特殊设备。

(3)Beowulf系统通常采用廉价且广为传播的软件,例如,Linux操作系统、并行虚拟机(PVM)和消息传递接口(MPI)。由于Beowulf系统采用普通廉价设备构建并行计算机系统,可以在普通实验室环境下实现高性能计算。


        Beowulf系统的理念在云计算和大数据领域得到了很好的应用,从Google的搜索系统,到开源的Hadoop都强调自己的系统是面向廉价服务器集群而设计的。单节点的高速度已不是惟一的追求了,利用良好的集群系统架构实现对廉价服务器资源的整合,大大节省了建设的成本。个体的弱小和不稳定与整体的强大和稳定在这里形成了完整的统一。

六、集群文件系统概念

数据的存储一直是人类在不懈研究的内容之一,最早的原始人类采用结绳记事的方式实现数据的记录和存储,后来中国商代利用甲骨作为信息存储的载体。竹简作为的信息载体的时代大约出现在西周和春秋时期,竹简是中国历史上使用时间最长的信息记录载体之一;公元二世纪初,东汉蔡伦改进造纸术成功,纸张从此在长达一千多年的时间里成为了主要的信息记录载体,直到今天我们仍然在使用纸张这一信息记录载体。

计算机的出现使信息的记录方式再次发生了巨大的变化,计算机的信息记录方式从穿孔纸带、磁带、磁鼓到硬盘、光盘、Flash芯片,几十年的时间使人类对信息的记录能力实现了多个数量级的跃迁。信息记录方式可以说一直伴随着人类历史的发展,云计算技术的发展文件系统技术是其中的重要部分,数据的存储方式对云计算系统架构有着重要的影响。

传统的存储方式一般是基于集中部署的磁盘阵列,这种存储方式结构简单使用方便,但数据的集中存放在数据使用时不可避免地会出现数据在网络上的传输,这给网络带来了很大的压力。

随着大数据技术的出现,面向数据的计算成为云计算系统需要解决的问题之一,集中的存储模式更是面临巨大的挑战,计算向数据迁移这种新的理念,使集中存储风光不在,集群文件系统在这种条件下应运而生。目前常用的HDFS、GFS、Lustre等文件系统都属于集群文件系统。

        集群文件系统存储数据时并不是将数据放置于某一个节点存储设备上,而是将数据按一定的策略分布式地放置于不同物理节点的存储设备上。

        集群文件系统将系统中每个节点上的存储空间进行虚拟的整合,形成一个虚拟的全局逻辑目录,集群文件系统在进行文件存取时依据逻辑目录按文件系统内在的存储策略与物理存储位置对应,从而实现文件的定位。

        集群文件系统相比传统的文件系统要复杂,它需要解决在不同节点上的数据一致性问题及分布式锁机制等问题,所以集群文件系统一直是云计算技术研究的核心内容之一。

在云计算系统在采用集群文件系统有以下几个优点:

(1)由于集群文件系统自身维护着逻辑目录和物理存储位置的对应关系,集群文件系统是很多云计算系统实现计算向数据迁移的基础。利用集群文件系统可以将计算任务在数据的存储节点位置发起,从而避免了数据在网络上传输所造成的拥塞。

(2)集群文件系统可以充分利用各节点的物理存储空间,通过文件系统形成一个大规模的存储池,为用户提供一个统一的可弹性扩充的存储空间。

(3)利用集群文件系统的备份策略、数据切块策略可以实现数据存储的高可靠性以及数据读取的并行化,提高数据的安全性和数据的访问效率。

(4)利用集群文件系统可以实现利用廉价服务器构建大规模高可靠性存储的目标,通过备份机制保证数据的高可靠性和系统的高可用性。

七、典型的集群文件系统Lustre

Lustre是一个应用广泛的集群文件系统,Lustre系统适合作为并发要求不是很高的云平台的存储模块,因为所有的数据请求都会经过Lustre系统元数据服务器。元数据服务器里存放着文件系统的整个基本信息,负责管理整个系统的命名空间,并维护整个文件系统的目录结构、文件名、文件的用户权限,还负责维护文件系统数据的一致性。这就有可能造成整个数据传输在高并发时的瓶颈。因此,Lustre存储系统最适合的应用场景为:数据请求传输并发不是太高但数据量很大的云平台,例如HP公司的“StorageWorks Scalable File Share”(HP SFS,可扩展文件共享),是首款采用Lustre技术的商业化产品,而英特尔公司在2013年也表示,在发布的Hadoop发行版2.5版本中加入对Lustre的支持能力。

        Lustre存储系统具备支撑大数据存储的能力。Lustre存储系统是高性能分布式存储领域中最为著名的系统之一,在全球,有过半的超级计算中心使用Lustre存储系统,随着Lustre存储系统的发展,越来越多的中大型计算中心和集成平台都在采用Lustre存储系统。追溯其起源,Lustre名字是由Linux和Clusters派生而来,是为解决海量存储问题而设计的全新文件系统,是HP、Intel、Cluster File System公司联合美国能源部开发的Linux集群并行文件系统,它来源于卡耐基梅隆大学的NASD项目研究工作。

        Lustre是基于对象的存储系统,能支持10000个节点,PB级别的存储量,峰值达到100GB/s的传输速度,是一个优秀的安全可靠、易于管理的大数量级高性能存储系统。

1.Lustre存储系统的优点

        通过接口提供高性能传输的数据共享,具备并行访问的能力,在数据高并发交互时,系统能对上传、下载的数据操作进行负载均衡,Lustre存储系统采用双网分离的方式和分布式的锁管理机制来实现并发控制,元数据所走的网络和文件数据传输的所走的网络不同,元数据的VFS(Virtual File System,存储数据的逻辑视图)部分通常是元数据服务器10%的负载,剩下的90%工作由分布在各个节点的数据所在服务器完成。

        Lustre存储系统能够在不影响现行网络的情况下弹性扩充系统的存储容量,还能增加节点数来扩充网络带宽,具备灵活的扩展性。

        在发生访问故障时,Lustre还能对元数据进行切换,具备访问的稳定可靠性,Lustre系统中可以拥有两个元数据服务器,采用Active-Standby(主备方式,指一台服务器处于某种业务的激活状态时,即Active状态时,另一台服务器处于该业务的备用状态,即Standby状态)的机制,当一台服务器坏掉时,马上切换到另外一个备份服务器。

        提供相对健全的接口给用户进行二次开发,以满足不同需求的项目,例如一个在线网盘存储的项目就可以通过Lustre存储系统提供的接口进行上层开发,网盘系统里所有用户所存储的文件都最终存储在Lustre存储系统中,而对于用户来说则是透明的,用户只需面对网盘系统的视图,同时Lustre存储系统本身属于开源项目,对有条件的技术工程师来说,可以进行改造并加以优化。

2.Lustre存储系统的缺点

        与其他很多能支持多操作系统平台安装部署的开源系统不同,Lustre存储系统只能部署在Linux操作系统上,其核心程序很依赖Linux操作系统的内核和底层文件操作方法。

        对于存储系统来说,节点之间的故障是一个常见的问题,存储系统要考虑节点间故障时如何快速恢复正常。Lustre在遇到这样的故障时,恢复正常势必要进行切换,切换的条件则需依赖于第三方的心跳技术(heartbeat),heartbeat包含心跳监测和资源接管两个核心模块,心跳监测可以通过网络链路和串口进行,而且支持冗余链路,它们之间相互发送报文来告诉对方自己当前的状态,如果在指定的时间内未收到对方发送的报文,那么就认为对方失效,这时需启动资源接管模块来接管运行在对方主机上的资源或者服务。

        最重要的一点,Lustre存储系统本身不具备数据自备份的能力,也就意味着使用Lustre存储系统作为存储方案时,在系统开发之前,一定要规划一套在其上层开发的存储备份方案,也就是在写入Lustre存储资源池的同时,要通过上层软件再把数据写一份到其他存储资源池来备用。

3.Lustre存储系统的组成

(1)元数据服务器元数据服务器(Metadata Server,MDS)负责管理文件系统的基本信息,负责管理整个系统的命名空间,维护整个文件系统的目录结构、用户权限,并负责维护文件系统数据的一致性。

通过MDS的文件和目录访问管理,Lustre能够控制客户端对文件系统中文件和目录的创建、删除、修改。

Client可以通过MDS读取保存到元数据存储节点 (MDT,Metadata Target,MDT)上的元数据。当Client读写文件时,从MDS得到文件信息,从OSS中得到数据。Client通过LNET协议和MDS/OSS通信。

在Lustre中,MDS可以有两个,采用Active-Standby的容错机制,当其中一个MDS不能正常工作时,另外一个后备MDS可以启动服务。

(2)元数据存储节点

元数据存储节点(Metadata Target,MDT)负责存储元数据服务器所要管理的元数据的文件名、目录、权限和文件布局,一个文件系统有且只能有一个MDT,不同的MDS之间共享同一个MDT。

(3)对象存储服务器

对象存储服务器(Object Storage Servers,OSS)提供针对一个或多个的本地OST网络请求和文件I/O服务,OST、MDT和Client可以同时运行在一个节点。但是典型的配置是一个MDT专用一个节点,每个OSS节点可以有两个或多个OST,一个客户端可以有大量的计算节点。

(4)对象存储节点

OST(Object Storage Target,OST)负责实际数据的存储,处理所有客户端和物理存储之间的交互。这种存储是基于对象的,OST将所有的对象数据放到物理存储设备上,并完成对每个对象的管理。

OST和实际的物理存储设备之间通过设备驱动方式来实现交互。通过驱动程序的事件响应,Lustre能继承新的物理存储技术及文件系统,实现对物理存储设备的扩展。

为了满足高性能计算系统的需要,Lustre针对大文件的读写进行优化,为集群系统提供较高的I/O吞吐率。Lustre将数据条块化,再把数据分配到各个存储服务器上,以提供比传统SAN的“块共享”更为灵活和可靠的共享方式。

(5)客户端

客户端(Client)通过标准的POSIX接口向用户提供对文件系统的访问。

对客户端而言,客户端同OST进行文件数据的交互,包括文件数据的读写、对象属性的改动等;同MDS进行元数据的交互,包括目录管理、命名空间管理等。

存储设备是基于对象的智能存储设备,与基于块的IDE存储设备不同。客户端在需要访问文件系统的文件数据时,先访问MDS,获取文件相关的元数据信息,然后就直接和相关的OST通信,获取文件的实际数据。

客户端通过网络读取服务器上的数据,存储服务器负责实际文件系统的读写操作以及存储设备的连接,元数据服务器负责文件系统目录结构、文件权限和文件的扩展属性以及维护整个文件系统的数据一致性和响应客户端的请求。


八、分布式系统中计算和数据的协作机制


       计算和存储也是云计算系统研究的核心问题,分布式系统中计算和数据的协作关系非常重要,在分布式系统中实施计算都存在计算如何获得数据的问题,在面向计算时代这一问题并不突出,在面向数据时代计算和数据的协作机制问题就成为了必需考虑的问题,通常这种机制的实现与系统的架构有紧密的关系,系统的基础架构决定了系统计算和数据的基本协作模式,下面以几种常见的分布式系统为例对其计算和数据的协作机制进行分析对比:


        在硬件为核心的时代,高性能计算从Cray C-90为代表的并行向量处理机发展到以IBM R50为代表的对称多处理器机(SMP)最终到工作站集群 (COW)及Beowulf集群结构,这一过程对应的正是CPU等硬件技术的高速发展,可以采用便宜的工作站甚至通用的PC来架构高性能系统,完成面向计算的高性能计算任务。

MPI      

        基于消息传递机制的并行计算技术MPI (Message-Passing Interface)帮助工作站集群和Beowulf集群实现强大的计算能力,提供了灵活的编程机制。

        MPI的标准化开始于1992年4月,美国并行计算研究中心在弗吉尼亚的Williamburg召开消息传递标准的讨论会,讨论了消息传递接口的一些重要基本特征,组建了一个制定消息传递接口标准的工作组,在1993年2月完成了修订版,这就是MPI 1.0。

1997年,MPI论坛发布了一个修订标准,叫MPI-2,同时原来的MPI更名为MPI-1。MPICH为MPI标准的一个开源实现,目前已被广泛应用于高性能计算领域。

        MPI将大量的节点通过消息传递机制连接起来,从而使节点的计算能力聚集成为强大的高性能计算,主要面向计算密集的任务。

MPI提供API接口,通过MPI_Send()和MPI_Recv()等消息通信函数实现计算过程中数据的交换。

        高性能计算是一种较为典型的面向计算的系统,通常处理的是计算密集型任务,因此在基于MPI的分布式系统中并没有与之匹配的文件系统支持,计算在发起前通过NFS等网络文件系统从集中的存储系统中读出数据并用于计算。

基于MPI的分布式系统的典型系统结构如图所示



        典型的利用MPI实现的分布式计算系统在发起计算时实际上是首先将计算程序由主节点通过NFS等网络共享文件系统分发到各子节点内存启动计算,由于没有分布式文件系统的支持,MPI一般不能直接从节点存储设备上读取数据,计算程序在子节点发起后只有通过网络共享文件读取需要处理的数据来进行计算,在这里数据和计算程序一般都是被集中存储在阵列等专门的存储系统中。

        这一过程并没有计算寻找数据的过程,计算程序只是按设计要求先被分发给了所有参与计算的节点。在进行MPI并行程序设计时,程序设计者需要事先将计算任务本身在程序中进行划分,计算程序被分配到节点后根据判断条件启动相应的计算工作,计算中需要进行节点间的数据交换时通过MPI提供的消息传递机制进行数据交换。

        由于CPU的运行速度远远大于网络数据传输的速度,通常希望不同节点间的任务关联性越小越好,在MPI的编程实践中就是“用计算换数据通信”的原则,使系统尽可能少地进行数据交换。MPI的消息传递机制为计算的并行化提供了灵活的方法,但目前对于任意问题的自动并行化并没有非常有效的方法,因此计算的切分工作往往需要编程人员自己根据经验来完成,这种灵活性是以增加编程的难度为代价的。

九、基于计算切分的分布式计算


        基于MPI的高性能计算是一种典型的面向计算的分布式系统,这种典型的面向计算的系统往往要求节点的计算能力越强越好,从而降低系统的数据通信代价。

        MPI的基本工作过程可以总结为:切分计算,注入程序,启动计算,读取数据。

        MPI虽然是典型的面向计算的分布式系统,但它也有类似于后来Google系统中的MapReduce能力,如MPI提供MPI_Reduce()函数实现Reduce功能,只是没有像GFS的分布式文件系统的支持,MPI的Reduce能力是相对有限而低效的,并不能实现计算在数据存储位置发起的功能。

        通常将MPI这样以切分计算实现分布式计算的系统称为基于计算切分的分布式计算系统。这种系统计算和存储的协作是通过存储向计算的迁移来实现的,也就是说系统先定位计算节点再将数据从集中存储设备通过网络读入计算程序所在的节点,在数据量不大时这种方法是可行的,但对于海量数据读取这种方式会很低效。

十、基于计算和数据切分的混合型分布式计算技术—网格计算


        硬件和网络发展到一定阶段后,硬件价格的便宜使大多数人都有了自己的个人电脑,但却出现了一方面一些需要大量计算的任务资源不够,另一方面大量个人电脑闲置的问题。

        得益于网络的发展,网格技术正好是在这个时期解决这一矛盾的巧妙方法。人们对网格技术的普遍理解是:将分布在世界各地的大量异构计算设备的资源整合起来,构建一个具有强大计算能力的超级计算系统。


网格计算出现于20世纪90年代,网格出现的历史背景是当时全世界已有了初步的网络,硬件价格还较昂贵,个人电脑已逐步普及,但在面对海量计算时当时的计算中心还是显得力不从心,利用世界各地闲置的计算资源构建一个超级计算资源池具有了可能性。

“计算网格是提供可靠,连续、普遍、廉价的高端计算能力的软硬件基础设施”。

建立于1998年的全球网格论坛 (GGF) 在2006年与企业网格联盟(EGA)合并成为开放式网格论坛(OGF),这一组织的目标是为网格计算定义相关的开放标准。

美国Argonne国家实验室与南加州大学信息科学学院合作开发的Globus工具包实现了这些标准,这个工具箱已经成为网格中间件事实上的标准。

        如图所示的网格系统往往事先会将计算程序以某种形式安装(如屏幕保护程序)在异构计算终端服务器上,用于监控计算终端的工作状态,当计算终端空闲时就会启动计算程序对数据进行处理,网格服务器则负责切分数据向计算终端分发数据并汇总计算结果。网格系统的数据逻辑上也是集中存储的,网格服务器负责切分数据并向计算终端传送需要计算的数据块。




        在这种系统结构下计算和数据的协作机制是通过数据来寻找计算实现的,即在网格中移动的主要是数据而不是计算,这种情况在数据量较小时是容易实现的,但如果需要处理的数据量很大这种以迁移数据为主的方法就显得很不方便了。

在网格系统中计算是先于数据到达计算终端的,这与MPI十分相似,数据是由计算程序主动发起请求获得,从而实现计算和数据的一致性。总的来看网格系统既具有面向数据系统中切分数据来实现分布式计算的思想,又具有面向计算的系统中计算向数据迁移的特征,所以典型的网格系统是一种既有面向数据又有面向计算特征的混合系统,完成的任务主要还是计算密集的需要高性能计算的任务,应用领域主要是在科学计算等专业的领域。 

        这里比较著名的网格项目就是外星文明搜索计划SETI(Search for Extra-Terrestrial Intelligence),应用于该计划的SETI@home网格将计算程序制作为屏幕保护程序借用网络上闲置的计算资源,在计算终端空闲时向网格服务器请求切分好的数据块并对该数据块进行计算,计算完成后将结果返回给网格服务器汇总。


        随着面向数据逐步成为计算发展的主流,网格技术也在不断改变,Globus也面向大数据进行了相应的改变以适应当前的实际需求,网格技术现在已呈现出全面向云计算靠拢的趋势。

而作为典型的网格技术可以被认为是从面向计算走向面向数据发展过程中的过渡性技术,网格计算会在专业领域获得更好的发展但可能会在一定程度上淡出普通用户的视野,网格计算的一些思想和技术为后来云计算技术的出现提供了可以借鉴的方法。

        进入网络高速发展的时期,数据的产生成为了全民无时无刻不在进行的日常行为,数据量呈现出了爆炸式增长,大数据时代到来,数据的作用被提到很高的地位,人们对数据所能带来的知识发现表现出的强烈的信心。

        长期以来数据挖掘技术的应用一直都处于不温不火的状态,大数据时代的到来也使这一技术迅速地被再次重视起来,基于海量数据的挖掘被很快应用于网页数据分析、客户分析、行为分析、社会分析,现在可以经常看到被准确推送到自己电脑上的产品介绍和新闻报道就是基于这类面向数据的数据挖掘技术的。

        基于数据切分实现分布式计算的方法在面向计算时代也被经常使用,被称为数据并行(data parallel)方法,但在面向计算时代真正的问题在于计算和数据之间只是简单的协作关系,数据和计算事实上并没有很好地融合,计算只是简单读取其需要处理的数据而已,系统并没有太多考虑数据的存储方式、网络带宽的利用率等问题。


十一、基于数据切分的分布式计算技术MapReduce


        通过数据切分实现计算的分布化是面向数据技术的一个重要特征,2003年Google逐步公开了它的系统结构,Google的文件系统GFS实现了在文件系统上就对数据进行了切分,这一点对利用MapReduce实现对数据的自动分布式计算非常重要,文件系统自身就对文件施行了自动的切分完全改变了分布式计算的性质,MPI、网格计算都没有相匹配的文件系统支持,从本质上看数据都是集中存储的,网格计算虽然有数据切分的功能,但只是在集中存储前提下的切分。具有数据切分功能的文件系统是面向数据的分布式系统的基本要求。

2004年Jeffrey Dean 和Sanjay Ghemawat发表文章描述了Google系统的MapReduce框架。与MPI不同,这种框架通常不是拆分计算来实现分布式处理,而是通过拆分数据来实现对大数据的分布式处理,MapReduce框架中分布式文件系统是整个框架的基础如图所示,





        这一框架下的文件系统一般将数据分为64MB的块进行分布式存放,需要对数据进行处理时将计算在各个块所在的节点直接发起,避免了从网络上读取数据所耗费的大量时间,实现计算主动“寻找”数据的功能,大大简化了分布式处理程序设计的难度。

        在这里数据块被文件系统预先切分是MapReduce能自动实现分布式计算的重要前提,系统通过主节点的元数据维护各数据块在系统中存储的节点位置,从而使计算能有效地找到所需要处理的数据。MapReduce这种大块化的数据拆分策略非常适合对大数据的处理,过小的数据分块会使这一框架在进行数据处理时的效率下降。

        这一框架在获得良好的大数据并行处理能力的时候也有其应用的局限,MapReduce框架在对同类型大数据块进行同类型的计算处理时具有非常好的自动分布式处理能力,但在数据较小、数据类型复杂、数据处理方式多变的应用场景效率相对低下。为了实现Google系统良好的计算和数据的协作机制GFS和MapReduce是密不可分的,没有GFS支持单独的采用MapReduce是没有太大价值的。

        MapReduce框架使计算在集群节点中能准确找到所处理的数据所在节点位置的前提是所处理的数据具有相同的数据类型和处理模式,从而可以通过数据的拆分实现计算向数据的迁移,事实上这类面向数据系统的负载均衡在其对数据进行分块时就完成了,系统各节点的处理压力与该节点上的数据块的具体情况相对应,因MapReduce框架下某一节点处理能力低下可能会造成系统的整体等待形成数据处理的瓶颈。

        在MapReduce框架下节点服务器主要是完成基本的计算和存储功能,因此可以采用廉价的服务器作为节点,这一变化改变了人们对传统服务器的看法。2005年Apache基金会以Google的系统为模板启动了Hadoop项目,Hadoop完整地实现了上面描述的面向数据切分的分布式计算系统,对应的文件系统为HDFS,Hadoop成为了面向数据系统的一个被广泛接纳的标准系统。

        数据分析技术是基于数据切分的分布式系统的研究热点。对类似于Web海量数据的分析需要对大量的新增数据进行分析,由于MapReduce框架无法对以往的局部、中间计算结果进行存储,MapReduce框架只能对新增数据后的数据集全部进行重新计算,以获得新的索引结果,这样的计算方法所需要的计算资源和耗费的计算时间会随着数据量的增加线性增加。

        Percolator是一种全新的架构,可以很好地用于增量数据的处理分析,已在Google索引中得到应用,大大提升Google索引更新速度,但与MapReduce等非增量系统不再兼容,并且编程人员需要根据特定应用开发动态增量的算法,使算法和代码复杂度大大增加。

        Incoop提出了增量Hadoop文件系统(Inc-HDFS),HDFS按照固定的块大小进文件划分,而Inc-HDFS则根据内容进行文件划分,当文件的内容发生变化时,只有少量的文件块发生变化,大大减少了Map操作量。

        迭代操作是PageRank、K-means等Web数据分析的核心操作,MapReduce作为一种通用的并行计算框架,其下一步迭代必须等待上一步迭代完成并把输出写入文件系统才能进行,如果有终止条件检查也必须等待其完成。

同时,上一步迭代输出的数据写入文件系统后马上又由下一步迭代读入,导致了明显的网络带宽、I/O、CPU时间的浪费。iHadoop在分析了迭代过程存在的执行相关、数据相关、控制相关之后对潜在的可并行性进行了挖掘,提出了异步迭代方式,比Hadoop实现的MapReduce执行时间平均减少了25%。

Twister对MapReduce的任务复用、数据缓存、迭代结束条件判断等进行调整以适合迭代计算,但其容错机制还很欠缺。

Pregel是Google提出专用于解决分布式大规模图计算的计算模型,非常适合计算如FaceBook等社交关系图分析,其将处理对象看成是连通图,而MapReduce将处理对象看成是Key-Value对;Pregel将计算细化到顶点,而MapReduce将计算进行批量化,按任务进行循环迭代控制。

在分布式文件系统条件下数据的切分使对文件的管理变复杂,此类集群系统下文件系统的管理和数据分析是需要进行重点关注的研究领域之一。

十二、三种分布式系统的分析对比


        从面向计算发展到面向数据,分布式系统的主要特征也发生了变化,表4.2中对3种典型的分布式系统进行了对比和分析,从表中可以看出分布式系统的发展大体分为了三种类型:面向计算的分布式系统、混合型分布式系统和面向数据的分布式系统。

        其中混合型分布式系统是发展过程中的一个中间阶段,它同时具有面向计算和面向数据的特征,如混合型系统中也存在数据拆分这类面向数据系统的典型特征,但却是以集中式的存储和数据向计算迁移的方式实现计算和数据的位置一致性。

        对于面向数据的分布式系统往往有对应的分布式文件系统的支持,从文件存储开始就实现数据块的划分,为数据分析时实现自动分布式计算提供了可能,计算和数据的协作机制在面向数据的系统中成为了核心问题,其重要性凸现出来。


        由于面向计算的分布式系统具有灵活和功能强大的计算能力,能完成大多数问题的计算任务,而面向数据的分布式系统虽然能较好地解决海量数据的自动分布式处理问题,但目前其仍是一种功能受限的分布式计算系统,并不能灵活地适应大多数的计算任务,因此现在已有一些研究工作在探讨将面向计算的分布式系统与面向数据分布式系统进行结合,希望能在计算的灵活性和对海量数据的处理上都获得良好的性能。

        目前技术的发展正在使面向计算和面向数据的系统之间的界限越来越不明确,很难准确地说某一个系统一定是面向计算的还是面向数据的系统,数据以及面向数据的计算在云计算和大数据时代到来时已紧密结合在了一起,计算和数据的协作机制问题也成为重要的研究课题。

        特别是HPCC(High Performance Computing Cluster高性能的计算集群)系统的出现表明这一融合过程正在成为现实。

        HPCC系统是LexisNexis公司开发的面向数据的开源高性能计算平台,HPCC的详细内容参见本书第7章。HPCC采用商品化的服务器构建的面向大数据的高性能计算系统,HPCC系统希望能结合面向数据和面向计算系统的优点,既能解决大数据的分布式存储问题又能解决面向大数据的数据处理问题。

        HPCC系统主要由数据提取集群Thor,数据发布集群Roxie和并行编程语言ECL(Enterprise Control Language)组成。

        其中Thor集群是一个主从式集群,这一集群有一个能实现冗余功能的分布式文件系统Thor DFS支持,主要完成大数据的分析处理,从类比的角度可以将这一部分看成是一个有分布式文件系统支持的MPI,这一点正好弥补了MPI没有分布式文件系统支持的弱点。

        在HPCC系统中高性能计算和大数据存储的融合再次提示:计算和数据的协作问题是解决面向数据时代大数据分析处理问题中的一项关键技术。



Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐