计算机群集技术概述介绍
计算机群集技术概述介绍
随着计算机技术的发展和越来越广泛的应用,越来越多的依赖于计算机技术的应用系统走进了我们的工作和生活。在给我们带来方便和效率的同时,也使得各行各业对于计算机技术的依赖程度越来越高。尽管随着计算机技术以日新月异的速度发展,单台计算机的性能和可靠性越来越好,但还是有许多现实的要求是单台计算机难以达到的。看看下面的例子:
•某银行需要一台服务器来储存财务数据。他要求这台计算机即使是在机房坍塌的情况下也能够被各个业务网点访问。
•某科研单位需要用一台超级计算机来模拟气象变化。他们需要有相当于200GHz奔腾4处理器的浮点运算能力。
•某网络公司刚刚起步。他们想要一台现在5万人民币以下,但以后可以逐步升级到具有巨型计算机能力的服务器来运行数据库。
在这些情况下,往往需要将多台计算机组织起来进行协同工作来模拟一台功能更强大解决问题。这种技术称为集群技术。目前应用最为广泛的集群计算技术可以分为三大类:高可用性集群技术、高性能计算集群技术和高可扩展性集群技术。下面我们将对这三种集群技术进行一下简单的介绍。
高可用性集群技术
高可用性集群,英文原文为High Availability Cluster, 简称HA Cluster,是指以减少服务中断(宕机)时间为目的的服务器集群技术。
随着全球经济的增长,世界各地各种各样的组织对IT系统的依赖都在不断增加,电子贸易使得商务一周七天24小时不间断的进行成为了可能。新的强大的应用程序使得商业和社会机构对日常操作的计算机化要求达到了空前的程度,趋势非常明显,我们无时无刻不依赖于稳定的计算机系统。
这种需求极速的增长,使得对系统可用性的要求变得非常重要,许多公司和组织的业务在很大程度上都依赖于计算机系统,任何的宕机都会造成严重的损失,关键IT系统的故障可能很快造成整个商业运作的瘫痪,每一分钟的宕机都意味着收入、生产和利润的损失,甚至于市场地位的削弱。
Industry Business Operation Average Cost per Hour of Downtime
Financial Brokerage operations $6.5 million
Financial Credit card/sales authorization $2.6 million
Media Pay-per-view television $1.1 million
Retail Home Shopping (TV) $113.0 thousand
Retail Home catalog sales $90.0 thousand
Transportation Airline reservation $89.5 thousand
根据1998年Garter Group的统计我们可以看出,我们需要可以不间断使用的计算机系统,并且这种对高可用性系统和技术的需求还会不断的增长。
可用性是指一个系统保持在线并且可供访问,有很多因素会造成系统宕机,包括为了维护而有计划的宕机以及意外故障等,高可用性方案的目标就是使宕机时间以及故障恢复时间最小化,可以容忍的宕机时间明确的说明方案的全面性、复杂性和成本
Percent Available downtime/Year Classification
99. 5 3.7 daysConventional
99. 9 8.8 hoursAvailable
99. 9952.6 minutes Highly Available
99. 9995.3 minutes Fault Resilient
99. 999932 seconds Fault Tolerant
为了提高整个系统的可用性,除了提高计算机各个部件的可靠性以外,一般情况下都会采用集群的方案。
所谓集群,就是共同为客户机提供网络资源的一组计算机系统。而其中的每一台提供服务的计算机,我们称之为节点。当一个节点不可用或者不能处理客户的请求时,该请求将会转到另外的可用节点来处理,而这些对于客户端来说,它根本不必关心这些要使用的资源的具体位置,集群系统会自动完成。
集群中节点可以以不同的方式来运行,这要看它们是如何设置的。在一个理想的两个节点的集群中,两个服务器都同时处于活动状态,也就是在两个节点上同时运行应用程序,当一个节点出现故障时,运行在出故障的节点上的应用程序就会转移到另外的没有出现故障的服务器上,这样一来,由于两个节点的工作现在由一个服务器来承担,自然会影响服务器的性能。
针对这种情况的解决方案是,在正常操作时,另一个节点处于备用状态,只有当活动的节点出现故障时该备用节点才会接管工作,但这并不是一个很经济的方案,因为你不得不买两个服务器来做一个服务器的工作。虽然当出现故障时不会对性能产生任何影响,但是在正常运行时的性能价格比并不太好。
从上面的工作方式出发,我们可以把集群分为下面几种(特别是两节点的集群)
主/主 (Active/active)
这是最常用的集群模型,它提供了高可用性,并且在只有一个节点在线时提供可以接受的性能,该模型允许最大程度的利用硬件资源。每个节点都通过网络对客户机提供资源,每个节点的容量被定义好,使得性能达到最优,并且每个节点都可以在故障转移时临时接管另一个节点的工作。所有的服务在故障转移后仍保持可用,但是性能通常都会下降。
主/从(Active/passive)
为了提供最大的可用性,以及对性能最小的影响,Active/passive模型需要一个在正常工作时处于备用状态,主节点处理客户机的请求,而备用节点处于空闲状态,当主节点出现故障时,备用节点会接管主节点的工作,继续为客户机提供服务,并且不会有任何性能上影响。
混合型(Hybrid)
混合是上面两种模型的结合,只针对关键应用进行故障转移,这样可以对这些应用实现可用性的同时让非关键的应用在正常运作时也可以在服务器上运行。当出现故障时,出现故障的服务器上的不太关键的应用就不可用了,但是那些关键应用会转移到另一个可用的节点上,从而达到性能和容错两方面的平衡。
高性能计算集群技术
高性能计算集群,英文原文为High Performance Computing Cluster, 简称HPC Cluster,是指以提高科学计算能力为目的计算机集群技术。 HPC Cluster是一种并行计算(Parallel Processing)集群的实现方法。并行计算是指将一个应用程序分割成多块可以并行执行的部分并指定到多个处理器上执行的方法。目前的很多计算机系统可以支持SMP(对称多处理器)架构并通过进程调度机制进行并行处理,但是SMP技术的可扩展性是十分有限的,比如在目前的Intel架构上最多只可以扩展到8颗CPU。为了满足哪些"计算能力饥渴"的科学计算任务,并行计算集群的方法被引入到计算机界。著名的"深蓝"计算机就是并行计算集群的一种实现。
由于在某些廉价而通用的计算平台(如Intel+Linux)上运行并行计算集群可以提供极佳的性能价格比,所以近年来这种解决方案越来越受到用户的青睐。比如壳牌石油(Shell)所使用的由IBM xSeries服务器组成的1024节点的Linux HPC Cluster是目前世界上计算能力最强的计算机之一。
HPC Cluster向用户提供一个单一计算机的界面。前置计算机负责与用户交互,并在接受用户提交的计算任务后通过调度器(Scheduler)程序将任务分配给各个计算节点执行;运行结束后通过前置计算机将结果返回给用户。程序运行过程中的进程间通信(IPC)通过专用网络进行。
HPC Cluster中使用的服务器通常可以分为用户节点、管理节点、存贮节点和计算节点四种。它们的角色分别是:
用户节点:
提供用户界面的计算机。它从用户那里接受任务,运行调度器(在本地或独立的"控制节点"上)将任务分派到其它计算机,并将运算结果返回给用户。
管理节点:
提供管理功能的计算机。它应该能够使管理员从这一计算机对集群中的任意一台计算机进行监视和操作,并处理集群中所有计算机的日志和报警信息。
存贮节点:
提供存贮共享的计算机。为了使任务可以并行执行,每台执行任务的计算机必须能够访问同样的数据。存贮节点通过网络共享(NFS)或其它方式来确保数据访问的同步。
计算节点:
真正执行计算任务的计算机。集群中的大部分计算机都是这种类型。 一个HPC Cluster中通常同时使用三个网络,它们分别是IPC网络,管理网络和存贮访问网络。根据具体的使用需求和选择的节点特性,这些网络可以使用多种介质和协议。
IPC网络:
用于并行任务执行时的进程间通信的专用网络,通常要求延迟小,带宽大。
管理网络:
用来收集集群信息、监视集群计算机和执行维护任务的网络。
存贮访问网络:
用来访问公用存贮的专用网络。
在实现一个HPC Cluster时,通常需要考虑以下问题:
• 应用程序是计算能力饥渴型(CPU+内存)还是IO(磁盘/网络)饥渴型?
--HPC Cluster只适合解决计算能力饥渴型的问题
• 应用程序是否可以"并行化"?
--HPC Cluster对于可以并行化的应用程序最为有效
• 怎样才能提高"计算密度"?
--所谓的"计算密度"是指在单位空间中所能提供的计算能力(所能摆放的计算机台数)。没有很好的计划和组织,一台1000+节点的超级计算机就可能成为一场超级麻烦。更高的计算密度不仅意味着更小的体积,也以为着更加简便的管理和更少的投资。1U的机架式服务器应当是首眩然后应该考虑的是:哪种服务器需要更少的电缆?哪种计算机用作计算节点可以省去额外的控制部件(如连接键盘、鼠标的控制台切换器)?哪种计算节点可以提供更高的计算效能?
• 如何安装和管理所有的计算机?
--计算机的可管理性在HPC Cluster的实现中至关重要。在同时面对数十甚至成百上千的计算机的情况下,管理员能否简单快速地执行维护工作常常成为影响集群 发挥效用的关键因素。
在集群计算的需求确定之后,选择各种组件构成Cluster的实现方案常常十分困难,而且经常由于组件之间难以协同工作而导致Cluster的实现失败,或者最终构造了一个难以使用又难以管理的Cluster。针对这种情况,应该优先考虑选择一体化的HPC产品。这些产品通常会在厂商的工厂中进行组装和测试,然后按机架的方式交付客户使用。比如在目前的IBM所提供的1300 HPC Cluster,它基于Intel架构的硬件平台和Linux操作系统,使用与"深蓝"计算机上同样的集群计算技术,在计算密度、集群管理等方面都比较出色。
高可扩展性集群技术
高可扩展性集群技术
高可扩展性集群技术就是带均衡策略(算法)的服务器群集。负载均衡群集在多节点之间按照一定的策略(算法)分发网络或计算处理负载。负载均衡建立在现有网络结构之上,它提供了一种廉价有效的方法来扩展服务器带宽,增加吞吐量,提高数据处理能力,同时又可以避免单点故障。
一般的框架结构如下图(以Web访问为例,其它应用类似)。后台的多个Web服务器上面有相同的Web内容,Internet客户端的访问请求首先进入一台服务器,由它根据负载均衡策略(算法)合理地分配给某个Web服务器。每个Web服务器有相同的内容做起来不难,所以选择负载均衡策略(算法)是个关键问题。下面会专门介绍均衡算法。
负载均衡的作用就像轮流值日制度,把任务分给大家来完成,以免让一个人过度劳累。但是与轮流值日制度不同的是,负载均衡是一种动态均衡,它通过一些工具实时地分析数据包,掌握网络中的数据流量状况,把任务理分配出去。对于不同的应用环境(如电子商务网站,它的计 算负荷大;再如网络数据库应用,读写频繁,服务器的存储子系统系统面临很大压力;再如视频服务应用,数据传输量大,网络接口负担重压。),使用的均衡策略(算法)是不同的。 所以均衡策略(算法)也就有了多种多样的形式,广义上的负载均衡既可以设置专门的网关、负载均衡器,也可以通过一些专用软件与协议来实现。在OSI七层协议模型中的第二(数据链路层)、第三(网络层)、第四(传输层)、第七层(应用层)都有相应的负载均衡策略(算法),在数据链路层上实现负载均衡的原理是根据数据包的目的MAC地址选择不同的路径;在网络层上可利用基于IP地址的分配方式将数据流疏通到多个节点;而传输层和应用层的交换(Switch),本身便是一种基于访问流量的控制方式,能够实现负载均衡。
到目前为止,针对网络负载均衡的产品主要有两大类:一是硬件;二是软件。硬件产品比软件产品运行得快但是价格较高。著名的产品有:3Com的智能网卡和DynamicAccess技术结合起来,不用在交换机上做任何设置,就可以完成分担任务;Cisco路由器通过对动态环路、旁路技术等功能的提供实践着负载均衡;Win2000中,专门集成了针对服务器群集的负载均衡软件;IBM的Web专用服务器和Network Dispatcher软件;Lotus的ICM;还有许多厂商都支持的链路聚集、高层交换......实现方法还在不断地花样翻新,充实着"负载均衡"的内容。
目前,基于均衡算法主要有三种:轮循(Round-Robin)、最小连接数(Least Connections First),和快速响应优先(Faster Response Precedence)。轮循算法,就是将来自网络的请求依次分配给集群中的服务器进行处理。最小连接数算法,就是为集群中的每台服务器设置一个记数器,记录每个服务器当前的连接数,负载均衡系统总是选择当前连接数最少的服务器分配任务。 这要比"轮循算法"好很多,因为在有些场合中,简单的轮循不能判断哪个服务器的负载更低,也许新的工作又被分配给了一个已经很忙的服务器了。快速响应优先算法,是根据群集中的服务器状态(CPU、内存等主要处理部分)来分配任务。 这一点很难做到,事实上到目前为止,采用这个算法的负载均衡系统还很少。尤其对于硬件负载均衡设备来说,只能在TCP/IP协议方面做工作,几乎不可能深入到服务器的处理系统中进行监测。但是它是未来发展的方向。
采用负载均衡群集的场合很多,本文将以Web/Ftp服务器群集这个典型的应用为例进行介绍。 互联网的出现使信息访问产生了质的飞跃,但随之而来的是Web流量的激增(高并发访问),由于涉及的信息量十分庞大,用户访问的频率也高,许多基于Web的大型公共信息系统(如电子图书馆、BBS、搜索引擎和远程教育等)需要在实时性和吞吐量方面都具有较高性能的Web服务器支持。一些热门的Web站点由于负荷过重而变得反应迟缓。如何提高Web服务器的性能和效率成为一个亟待解决的问题。
实际上,服务器的处理能力和I/O已经成为提供Web服务的瓶颈。如果客户的增多导致通信量超出了服务器能承受的范围,那么其结果必然是服务质量下降。显然,单台服务器有限的性能不可能解决这个问题,一台普通服务器的处理能力只能达到每秒几万个到几十万个请求,无法在一秒钟内处理上百万个甚至更多的请求。显然,采用高性能的主机系统(小型机乃至大型计算机)是可行的。但是,除了其价格价格昂贵外,这种高速、高性能的主机系统,很多情况下也不能解决同时处理几万个并发。因为,高速主机系统只是对于复杂单一任务和有限的并发处理显得 高性能,而Internet中的Web服务器绝大多数处理是"简单任务"、高强度并发处理,因此,即便有大资金投入采用高性能、高价格的主机系统 ,也不能满足Web应用的需要。这就是利用Web服务器群集实现负载均衡的最初基本设计思想。
Web服务器群集的概念最早由伊利诺斯州大学(UIUC:University of Illinois at Urbana-Champaign)的超级计算应用中心(NCSA:National Center of Supercomputing Applications)提出并实现了一个原型系统"NCSA Scalable Web Server Cluster", 它通过连接一组计算机对客户同时提供服务,实现分布负载,降低对用户请求的响应时间,并扩展Web服务器的应用。后来Berkeley的NOW小组、NSC和科罗拉多大学的Harvest小组、Cisco及IBM公司等也加入此行列,很快推出相应产品。如NCSA使用几台工作站构成可扩展并行Web服务器群,提供使用其浏览器软件Mosaic、服务器软件httpd的用户查询帮助信息和下载软件的服务器系统,采用轮循算法选择群集中某台计算机为当前访问请求服务;加州大学SWEB系统采用DNS转发技术实现服务器IP地址重定向(Yahoo 采用的就是这种方法);Inktomi公司利用NOW构造并行的HotBot检索引擎,因而系统具有成本低和扩展能力强的特点;此外,IBM公司也提出类似的可扩展并行Web服务器群集系统的设计方案。这些系统的成功表明Web 服务器群集是改善Web服务的一种有效解决方案,并且正在成为主流技术。
在Web负载均衡群集的设计中,网络拓扑被设计为对称结构。在对称结构中每台服务器都具备等价的地位,都可以单独对外提供服务。通过负载算法,分配设备将外部发送来的请求均匀分配到对称结构中的每台服务器上,接收到连接请求的服务器都独立回应客户的请求。 如下图所示。
这种Web服务器群集有如下特点:
1. 高性能 :一个Web服务器群集系统由多台Web服务器组成,对外部而言,整个群集就如同一台高性能Web服务器,系统只有一个对外的网络地址(主机名或IP地址),所有的HTTP请求都发到这个地址上。系统中有专门的机制能够将这些请求按照一定原则分发到群集中的各台服务器上,让它们各自分担一部分工作。
2. 可扩展性 它是采用同样的方法或技术高效率地支持较大规模系统的能力。Web服务器群集系统的组成结构和工作原理决定了它能够比较容易地达到较好的可扩展性,因为扩大系统规模非常容易,只要在网络中增加新的Web服务器计算机即可。
3. 高可用性 Web服务器群集系统将会在各种商业应用领域中占有举足轻重的地位。商用系统最重视系统的可靠性和容错性,二者合在一起称为系统的可用性。常用的系统可用性指标有系统平均无故障时间、期望不间断工作时间及年平均故障率等。由于Web服务器群集系统中各台Web服务器之间相对独立,采用一些不太复杂的技术就能使Web服务器群集系统达到很高的可用性。一些商用产品中已经部分实现了这种技术。
此外,Web服务器群集系统还具有价格便宜、能够保护原有投资等特点。
目前比较成熟的产品主要有Cisco的LocalDirector、IBM的Network Dispatcher、HydraWEB的HydraWEB Dispatcher和RND的Web Server Director等等。这些产品的应用非常广泛,如Yahoo、Net Center和MSN都是用几百到几千台计算机组成Web 服务器群集来对外提供服务,它们使用了上述产品。
高可用集群技术
高可用集群技术
下面针对高可用性集群,介绍一下它的工作原理。
在微软的MSCS(Microsoft Cluster Server)术语中,所有的应用程序、数据文件、磁盘、网络IP地址等都被称为资源,一些资源可以组成一个资源组,一个资源组存在于一个节点上,但同时只能在一个节点上,它是MSCS可以进行故障切换(FailOver)的最小单元。
在MSCS中,所有的资源都处于资源监视器的监视之下,资源监视器通过资源动态链接库文件与资源进行通信,这些资源动态链接库会侦测对应资源的状态,并通知资源监视器,之后,监视器再把信息提供给集群服务(Cluster Service),缺省情况下,集群服务会启动一个资源监视器来监视节点中的全部资源。
MSCS用依赖性来定义不同资源彼此之间的关系,MSCS会根据资源间的相互依赖关系来决定把这些资源变为在线或者是离线的顺序。举一个WEB服务器文件共享的例子,文件共享的资源需要硬盘驱动器来存储数据,把这些有关系的资源一起放在MSCS组中,要实现共享,就必须先把硬盘准备好。同时,为了完成文件共享,我们还需要准备好网络名称以及IP地址。
从上图可以看出,文件共享资源依赖于硬盘资源,网络名称资源依赖于IP地址资源,而对应的WEB服务刚依赖于文件共享和网络名称。
资源的存在可以分为五种状态
1、Offline,资源不能被别的资源或者客户机使用
2、Offline Pending,资源正处于Offline的过程中
3、Online,资源处于可用的状态
4、Online Pending,资源正处于Online的过程中
5、Failed,资源出现了MSCS无法解决的问题
前面已经提到,MSCS可以从一个节点故障切换到另一个节点的最小单元是资源组。被定义好的相关的资源放在同一个组中,并建立对应的依赖关系。以下图为例,如果节点A中的资源组1要移到节点B上的话,资源组1中的资源(资源A,资源B,资源C)也必须从节点A移到节点B才行。
在MSCS的资源中,有一个非常重要的资源,Quorum,它是一个可以被两个节点访问的物理硬盘,用来保存集群的信息。这些信息是用来维护集群的完整性以及使节点保持同步,特别是当节点不能与另一个节点通信的时候。Quorum盘在某一时刻只能被一个节点所拥有,并用来决定由哪个节点来拥有集群的所有资源。Quorum必须位于共享的磁盘子系统中,一般都是使用外接的磁盘柜。一般情况下,不建议把应用
程序和数据保存到包含Quorum的硬盘上。
故障切换(Failover)是指把出现故障的节点上的资源重新定位到另一个可用的节点上。负责监视资源的资源监视器一旦发现资源出现故障,它就会通知集群服务,集群服务会根据事前定义好的策略触发对应的事件。虽然发现的是个别资源的故障,但是,集群还是会把整个资源组进行故障切换。
故障切换会在三种不同的情况下发生:人工(一般是因为管理员的请求),自动,或者在特定的时间(由集群管理软件设定)。自动故障切换又包含了三个阶段:1、故障发现。2、资源重新定位。3、重新启动应用程序(一般是故障切换过程中最耗费时间的)。当达到资源组的故障切换阀值时,自动的故障切换才会发生,阀值是可以设定的,一般由管理员来设定。
故障恢复(Failback)是一种故障切换的特例,是指发生故障切换之后,把部分或者全部资源组移回它们首选的节点的过程。首选的节点,就是指集群中指定的运行资源组的道选的节点,如果是多个节点的高可用性方案,就会有多个首选的节点。当首选的节点出现故障后,对应的资源组就切换到另外的可用节点上,当出现故障的节点恢复正常后,资源组可以自动的切换回首选节点。如果没有定义首选节点,资源组就不会自动切换回来。
要检查资源是不是可用,资源监视器会向对应的动态链接库发送状态信息的请求,一般会有两种级别的检查,LooksAlive和IsAlive。LooksAlive级别的检查相对比较简单,每隔一段时间(相对比较短的时间,缺省是5秒),资源监视器会进行一次LooksAlive级别的检查,如果资源没有响应,监视器会向集群服务报告。IsAlive级别的检查是非常完整的检查,它会彻底检查资源是不是工作正常,IsAlive检查的时间间隔比LooksAlive要长,缺省是1分钟。
结合上面提到的各个要素,高可用性就是通过下面的过程来实现的:
首先,资源监视器根据设定的时间间隔对资源进行LookAlive和IsAlive两种级别的检查,一旦发现某一个资源不可用,就会试图重新启动该资源。根据阀值的设定,如果在某一时间段内,资源不可用的情况达到了设定的阀值时,就会发生故障切换。经过故障切换的过程,对应的资源组在另外一个节点上重新启动了,继续为客户机提供服务,对客户来说,工作没有影响,这就完成了一次故障切换。当出现故障的节点恢复正常以后,如果事先对该资源组设定了首选节点,就会把该资源组移回该首选节点。
高性能计算技术
HPC: 并行计算工作原理
要实现并行计算,您需要:
1. 支持并行运算的硬件架构;
2. 支持并行计算的应用程序;
3. 使应用能够并行执行的软件工具,如编译器,API等等。
下面我们就这三个方面分别介绍它们的分类和作用。
一、并行计算硬件架构
1、 计算方式的分类
在这里我们使用历史"悠久"的Flynn分类法将计算方式分为以下四种:
• SISD(单指令流单数据流):传统的计算机只有一块CPU,因此准许一条指令流顺序执行。目前许多大型主机有一块以上的CPU,但各CPU执行的指令流互不相关,因此它们仍被看作是SISD机器,不过是很多运行在不同数据空间上的SISD的组合。很多HP,DEC和SUN的工作站属于这种类型。并行计算机不应采用这种计算方式。
• SIMD(单指令流多数据流):单个指令流对于多个数据流进行操作。这种方式可以形象化为多台计算机在中央调度处理器的协调下处理各自的数据。从逻辑上看,此时指令全部来自于中央调度器,尽管它们可以执行在不同的硬件设备(CPU)上。
• MISD(多指令流单数据流):多个指令流共同操作同一条数据流。到目前为止尚未发明这样的系统。
• MIMD(多指令流多数据流):这种系统并行的在不同数据上执行不同的指令流,这种类型与上面提到的多处理器SISD系统的本质区别在于不同处理器处理的数据是彼此相关的,它们实际上是在并行执行同一工作的不同部分。因此MIMD系统可以将一个主任务分解为众多子任务并行执行以缩短工作时间。这是目前大部分协同计算系统所采用的计算方式。
2、 并行计算的相关架构
为了使计算机系统能够实现并行处理,一系列的计算机架构相关的技术被开发出来。下面我们介绍一下其中的几种主要技术。
■ 处理器阵列(Array Processors):
使用多个处理器组成阵列,在运行时由中央处理器广播指令流,各个其它处理器(又称处理元,processing element)执行指令流来处理本地内存中的数据。这种处理技术是被广泛采用的分布式内存技术的基矗
■ 共享内存(Shared Memory):
处理器(PE)通过某种连接机制连接到一块巨大的共享内存上,使得任何处理器都能够访问任何一段内存。这种技术的优点是在并行环境中可以简化操作系统、编译器和应用程序的设计,缺点是当处理器数目增加时性能会迅速下降而成本会迅速上升。著名的Cray T90超级计算机使用的就是这种技术,目前很多的RISC工作站也使用这种技术。这种技术在很多新的并行计算实现上也被部分借鉴。
■ 分布式内存(Distributed Memory):
每个处理器(PE)只访问自己的本地内存,处理器之间通过某种连接机制进行通讯,从而进行协同工作,成为一台并行计算机。这种技术的优点是可以很容易地组合很多标准计算机硬件成为一台超级计算机,与其它技术相比具有很高的性能价格比和可扩展性。缺点是应用程序中必须包含明确的信息传递调用以利用并行架构,而且编译器、调试器、并行化工具和性能监测工具的设计也会非常复杂。使用这种技术时,连接机制的选择至关重要。带宽和时延会直接影响整个系统的性能。这种技术在新兴的Linux HPC中广为采用。
■ 虚拟共享内存(Virtual Shared memory):
这种技术将分布式内存虚拟为统一的内存空间,从而获得分布式内存和共享内存技术的所有优点。但是由于过多的内存访问调度,在目前的技术水平上性能非常差。目前的实际应用中不会采取这种技术。
二、并行应用程序技术
应用程序决定了计算过程中的指令流和数据流,所以应用程序能否并行化是能否利用并行计算机的硬件架构的关键所在。以下是一些对并行应用程序常用技术的简单介绍。
■ 数据和功能并行化:
这时将计算任务分配到多个处理器上执行的最基本方法。数据并行化是指将需要处理的数据划分到不同的处理器上,然后所有处理器执行相同的指令流来处理各自的数据。设想一下一个求1000个数的正弦函数的程序,如果您有1000个处理器,您可以为每个处理器分配一个计算正弦函数的任务,然后让1000个处理器同时开始执行。这是一种SIMD的实现技术。功能并行化是指将应用程序中的不同功能分配到不同的处理器/内存上去完成,是一种MIMD的实现方法。
■ 循环级并行化:
对于大多数科学计算任务而言,大部分的时间花费在循环计算之中。在共享内存架构的系统中,"并行编译器"可以检测到循环中互无关联的计算步骤并将它们分配给不同的处理器去执行。
■ 数组语句(Array Syntax):
SIMD的另一种实现方法。在程序设计语言中包含对数组成员进行一次性赋值和计算的语句。在并行系统上,并行编译器会自动对这些赋值和计算进行并行化处理。
■ 信息传递(Message passing):
在分布式内存架构上,每个处理器只能访问自己的内存。当处理器之间需要进行数据交换时,信息传递是目前最为广泛使用的技术。从程序员的角度来看,这种技术就是一系列发送与接收调用的组合。当应用程序变得比较庞大而复杂时,这种技术的使用会变得非常复杂和容易出错,比如一个处理器等待的消息永远无法收到等等。但是一旦程序设计成功,这种技术在分布式内存系统和共享内存系统上都能够获得很好的性能。
三、常用的并行计算工具软件
并行计算工具软件是指那些帮助程序设计人员更好或更简单地利用并行架构的工具。下面我们介绍最常用的几种。
■ 编译器(Compiler):
编译器在并行计算中的作用分为两个层面,一是像在串行系统上一样生成优化的代码序列,二是将可以并行执行的部分进行并行化处理。尽管编写出能够把传统的、串行结构的应用程序编译为完美的并行代码的编译器是几乎不可能的任务,但计算机科学家们的不懈努力正在使编写并行程序越来越容易。目前很多的编译器可以借助程序员写在程序中的简单编译指导生成高质量的并行代码,如数组语句的处理等。在目前的多数共享内存架构的系统上,编译器已经可以进行循环级的并行化。
■ 调试器(Debugger):
调试器可以说是程序设计的必备工具。在并行计算系统中,特别是分布式内存架构的系统中,一个调试器通常面临以下的挑战:必须能够反映出信息传递的过程和状态;在查看变量时,必须能够查看每个处理器上的同名变量的状态;由于在科学计算中大数组的广泛应用,必须能够以直观的方式表示出数组成员的值,等等等等。
■ 性能监测/分析工具:
由于并行计算所带来的程序并行执行的复杂性和不可预见性,您会需要一个功能强大的性能监测/分析工具来帮助您完成分析并行化程度、信息传递特性以及判定系统瓶颈等工作,以便使并行系统投入产能应用时能够有最好的性能状态。
■ 并行化工具/API:
并行化工具是指将串行源代码转化为并行源代码的工具,通常只需要程序员在程序中插入简单的宏,就可以完成向并行源代码的转化。并行API主要是指实现了完整信息传递功能的软件包,使得程序员指需要进行简单的调用就可以实现信息传递,而无须自己实现其中的每一个细节。
综上所述,一个成功的并行计算系统的核心是硬件架构、应用程序和辅助软件。目前广为应用的硬件架构是共享内存和分布式内存,前者可以简化程序设计但成本高,可扩展性差;后者成本低,扩展性好但会导致程序设计复杂化。应用程序在设计上会因为硬件架构的不同而有所不同,其中信息传递技术虽然设计复杂但在两种硬件架构上都能够获得高性能。恰当的辅助工具不仅使程序设计更为简单,而且实际上,在大规模的应用系统中,没有这些工具几乎不可能实现稳定的、高性能的并行计算。
Linux HPC Cluster
HPC(高性能计算)虽然已经有很多年的历史了,但是其普及程度一直不是很高。主要原因不外乎以下几点:
价格昂贵。相对较小的生产规模使得相关的部件成本极高,价格常常使用户望而却步。
不容易扩展。由于没有使用市面上通用的模块,HPC系统的扩展要么不容易在技术上实现,要么成本难以令用户接受。
对使用环境要求苛刻。过去,一套大的HPC系统可能需要像篮球场那么大的机房去安装,可以想见配套的建筑、电源、布线和散热措施的准备会有多么复杂和昂贵。
近年来,随着计算机技术的进步,一种新的HPC系统正迅速崛起,这就是使用运行Linux操作系统的Intel平台的计算机来构建HPC Cluster。这是一种分布式内存的HPC架构,针对上面提出的三个问题,它能够提供如下的好处:
由于使用Linux操作系统和通用的Intel平台,集群中的各个节点(计算机)的价格将会相对低廉;
由于使用通用的硬件平台和标准的网络组件,集群的扩展容易实现而且价格低廉;
不难看出,Linux HPC最大的优点是廉价!这一特点使得更多的"计算饥渴"的用户可以选择使用HPC系统。作为HPC技术最先进的公司,几年前IBM就已经帮助包括壳牌石油在内的许多客户建立了1000节点以上的Linux HPC系统,这些系统至今仍然在全世界最快速的计算机系统中占据着一席之地。
一个好的Linux HPC系统完全不会在任何方面逊色于其它的分布式内存HPC系统,但问题是想要构建一个好的Linux HPC系统事实上是很难的。请考虑以下这些问题:
您想要一个廉价的Linux HPC系统。您应该购买什么样的计算机来构成这个系统才能避免在实施和使用中的问题?
您有64台Intel平台的计算机来运行Linux系统。为了把它们组建成为一个HPC系统,您还需要购买哪些硬件设备?
为了放置这些硬件设备,您需要多少个标准机架和什么样的机房来安装?
为了将新的HPC系统整合到您的网络环境中,您需要多少个额外的IP地址?您应该怎样分配它们?
为了将新的HPC系统整合到您的网络环境中,您需要多少根网线?如果数目很多的话,您如何保证在安装的时候不会弄错?
您打算怎么为这些计算机安装系统?如果系统崩溃了,您又如何保证在最短的时间里让它们恢复运作?
您的应用程序打算使用什么并行API开发?
您打算使用什么样的程序调度机制和哪一个调度器?
您如何做到像管理一台计算机一样管理这个HPC Cluster?
负载平衡技术
LoadBalance(负载均衡)群集
负载均衡群集系统使应用程序处理负载或网络流量负载可以在计算机群集中尽可能平均地分摊处理。这样的系统非常适合于运行同一组应用程序的大量用户。每个节点都可以处理一部分负载,并且可以在节点之间动态分配负载,以实现平衡。对于网络流量也如此。通常,网络服务器应用程序接受了太多的入网流量,以致无法迅速处理,这就需要将流量发送给在其它节点上运行的网络服务器应用。还可以根据每个节点上不同的可用资源或网络的特殊环境来进行优化。在网站,电子邮件提供商,VOD(Video On Demand)方面有广泛的应用。
以下将介绍负载均衡群集。
什么是负载均衡群集?-- 解释(定义,一般的框架结构,策略,哪些产品,技术区别,发展)
负载均衡群集就是带均衡策略(算法)的服务器群集。负载均衡群集在多节点之间按照一定的策略(算法)分发网络或计算处理负载。负载均衡建立在现有网络结构之上,它提供了一种廉价有效的方法来扩展服务器带宽,增加吞吐量,提高数据处理能力,同时又可以避免单点故障。
一般的框架结构如下图(以Web访问为例,其它应用类似)。后台的多个Web服务器上面有相同的Web内容,Internet客户端的访问请求首先进入一台服务器,由它根据负载均衡策略(算法)合理地分配给某个Web服务器。每个Web服务器有相同的内容做起来不难,所以选择负载均衡策略(算法)是个关键问题。下面会专门介绍均衡算法。
负载均衡的作用就像轮流值日制度,把任务分给大家来完成,以免让一个人过度劳累。但是与轮流值日制度不同的是,负载均衡是一种动态均衡,它通过一些工具实时地分析数据包,掌握网络中的数据流量状况,把任务理分配出去。对于不同的应用环境(如电子商务网站,它的计 算负荷大;再如网络数据库应用,读写频繁,服务器的存储子系统系统面临很大压力;再如视频服务应用,数据传输量大,网络接口负担重压。),使用的均衡策略(算法)是不同的。 所以均衡策略(算法)也就有了多种多样的形式,广义上的负载均衡既可以设置专门的网关、负载均衡器,也可以通过一些专用软件与协议来实现。在OSI七层协议模型中的第二(数据链路层)、第三(网络层)、第四(传输层)、第七层(应用层)都有相应的负载均衡策略(算法),在数据链路层上实现负载均衡的原理是根据数据包的目的MAC地址选择不同的路径;在网络层上可利用基于IP地址的分配方式将数据流疏通到多个节点;而传输层和应用层的交换(Switch),本身便是一种基于访问流量的控制方式,能够实现负载均衡。
到目前为止,针对网络负载均衡的产品主要有两大类:一是硬件;二是软件。硬件产品比软件产品运行得快但是价格较高。著名的产品有:3Com的智能网卡和DynamicAccess技术结合起来,不用在交换机上做任何设置,就可以完成分担任务;Cisco路由器通过对动态环路、旁路技术等功能的提供实践着负载均衡;Win2000中,专门集成了针对服务器群集的负载均衡软件;IBM的Web专用服务器和Network Dispatcher软件;Lotus的ICM;还有许多厂商都支持的链路聚集、高层交换......实现方法还在不断地花样翻新,充实着"负载均衡"的内容。
负载均衡系统的几种负载均衡算法(负载均衡策)
目前,基于均衡算法主要有三种:轮循(Round-Robin)、最小连接数(Least Connections First),和快速响应优先(Faster Response Precedence)。轮循算法,就是将来自网络的请求依次分配给集群中的服务器进行处理。最小连接数算法,就是为集群中的每台服务器设置一个记数器,记录每个服务器当前的连接数,负载均衡系统总是选择当前连接数最少的服务器分配任务。 这要比"轮循算法"好很多,因为在有些场合中,简单的轮循不能判断哪个服务器的负载更低,也许新的工作又被分配给了一个已经很忙的服务器了。快速响应优先算法,是根据群集中的服务器状态(CPU、内存等主要处理部分)来分配任务。 这一点很难做到,事实上到目前为止,采用这个算法的负载均衡系统还很少。尤其对于硬件负载均衡设备来说,只能在TCP/IP协议方面做工作,几乎不可能深入到服务器的处理系统中进行监测。但是它是未来发展的方向。
综上所述,负载均衡群集的使用是非常广泛的,它的核心内容是运用越来越科学的负载分配算法开发出软件或硬件,来实现负载的更加合理地分配。
怎么用?——举例说明,并包含需求分析
采用负载均衡群集的场合很多,本文将以Web/Ftp服务器群集这个典型的应用为例进行介绍。 互联网的出现使信息访问产生了质的飞跃,但随之而来的是Web流量的激增(高并发访问),由于涉及的信息量十分庞大,用户访问的频率也高,许多基于Web的大型公共信息系统(如电子图书馆、BBS、搜索引擎和远程教育等)需要在实时性和吞吐量方面都具有较高性能的Web服务器支持。一些热门的Web站点由于负荷过重而变得反应迟缓。如何提高Web服务器的性能和效率成为一个亟待解决的问题。
实际上,服务器的处理能力和I/O已经成为提供Web服务的瓶颈。如果客户的增多导致通信量超出了服务器能承受的范围,那么其结果必然是宕机。显然,单台服务器有限的性能不可能解决这个问题,一台普通服务器的处理能力只能达到每秒几万个到几十万个请求,无法在一秒钟内处理上百万个甚至更多的请求。显然,采用高性能的主机系统(小型机乃至大型计算机)是可行的。但是,除了其价格价格昂贵外,这种高速、高性能的主机系统,很多情况下也不能解决同时处理几万个并发。因为,高速主机系统只是对于复杂单一任务和有限的并发处理显得 高性能,而Internet中的Web服务器绝大多数处理是"简单任务"、高强度并发处理,因此,即便有大资金投入采用高性能、高价格的主机系统 ,也不能满足Web应用的需要。这就是利用Web服务器群集实现负载均衡的最初基本设计思想。
早期的服务器群集通常以主从方式(Active-Passive)备份。令服务运营商头疼的问题是:关键性服务器一般档次较高,花了两台服务器的钱却只能得到一台服务器的性能。随着LSANT(Load Sharing Network Address Transfer)技术的推出,这个问题得到了解决。多台服务器的IP地址被翻译成一个虚拟IP地址(VIP:Virtual IP),使得每台服务器均时时处于工作状态。若能将10台这样的服务器组成一个系统,并通过软件技术将所有请求平均分配给所有服务器,那么这个系统就完全拥有每秒钟处理几百万个甚至更多请求的能力。这样原来需要用小型机来完成的工作现由多台PC服务器就可以完成,这种弹性解决方案对投资保护的作用是相当明显的——既避免了小型机刚性升级所带来的巨大设备投资,又避免了人员培训的重复投资。同时,服务运营商可以依据业务的需要随时调整服务器的数量。至此形成了Web服务器群集的理论。
Web服务器群集的概念最早由伊利诺斯州大学(UIUC:University of Illinois at Urbana-Champaign)的超级计算应用中心(NCSA:National Center of Supercomputing Applications)提出并实现了一个原型系统"NCSA Scalable Web Server Cluster", 它通过连接一组计算机对客户同时提供服务,实现分布负载,降低对用户请求的响应时间,并扩展Web服务器的应用。后来Berkeley的NOW小组、NSC和科罗拉多大学的Harvest小组、Cisco及IBM公司等也加入此行列,很快推出相应产品。如NCSA使用几台工作站构成可扩展并行Web服务器群,提供使用其浏览器软件Mosaic、服务器软件httpd的用户查询帮助信息和下载软件的服务器系统,采用轮循算法选择群集中某台计算机为当前访问请求服务;加州大学SWEB系统采用DNS转发技术实现服务器IP地址重定向(Yahoo 采用的就是这种方法);Inktomi公司利用NOW构造并行的HotBot检索引擎,因而系统具有成本低和扩展能力强的特点;此外,IBM公司也提出类似的可扩展并行Web服务器群集系统的设计方案。这些系统的成功表明Web 服务器群集是改善Web服务的一种有效解决方案,并且正在成为主流技术。
在Web负载均衡群集的设计中,网络拓扑被设计为对称结构。在对称结构中每台服务器都具备等价的地位,都可以单独对外提供服务。通过负载算法,分配设备将外部发送来的请求均匀分配到对称结构中的每台服务器上,接收到连接请求的服务器都独立回应客户的请求。 如下图所示。
Web服务器群集有如下特点:
高性能 :一个Web服务器群集系统由多台Web服务器组成,对外部而言,整个群集就如同一台高性能Web服务器,系统只有一个对外的网络地址(主机名或IP地址),所有的HTTP请求都发到这个地址上。系统中有专门的机制能够将这些请求按照一定原则分发到群集中的各台服务器上,让它们各自分担一部分工作。
可扩展性 它是采用同样的方法或技术高效率地支持较大规模系统的能力。Web服务器群集系统的组成结构和工作原理决定了它能够比较容易地达到较好的可扩展性,因为扩大系统规模非常容易,只要在网络中增加新的Web服务器计算机即可。
高可用性 Web服务器群集系统将会在各种商业应用领域中占有举足轻重的地位。商用系统最重视系统的可靠性和容错性,二者合在一起称为系统的可用性。常用的系统可用性指标有系统平均无故障时间、期望不间断工作时间及年平均故障率等。由于Web服务器群集系统中各台Web服务器之间相对独立,采用一些不太复杂的技术就能使Web服务器群集系统达到很高的可用性。一些商用产品中已经部分实现了这种技术。
此外,Web服务器群集系统还具有价格便宜、能够保护原有投资等特点。
目前比较成熟的产品主要有Cisco的LocalDirector、IBM的Network Dispatcher、HydraWEB的HydraWEB Dispatcher和RND的Web Server Director等等。这些产品的应用非常广泛,如Yahoo、Net Center和MSN都是用几百到几千台计算机组成Web 服务器群集来对外提供服务,它们使用了上述产品。
以下是对2个Web服务器群集产品的分析:
Scalable Web Server Cluster UIUC的NCSA Scalable Web Server Cluster是世界上第一个Web服务器群集系统。1994年,NCSA为了缓解其Web站点面临的大量用户访问的压力,把4台Sun工作站用FDDI连接起来组成一个群集,代替原有单台Sun工作站的Web服务器,对外提供Web服务。NCSA把这个系统称为Scalable Web Server Cluster,它几乎具备了现代Web服务器群集系统所具有的一切特征:用高速局域网连接多台Web服务器,通过并行处理提高系统的吞吐能力;整个系统只有一个网络地址; 通过一台动态DNS服务器实现请求分配,该DNS服务器对DNS请求采用轮循算法依次返回群集中各台Web服务器的IP地址,引导Client将HTTP请求发送到群集中不同的Web服务器上,以实现群集的负载均衡; 采用AFS(UNIX支持的分布式文件系统)将多台服务器上的文件系统组合成一个逻辑上单一的分布式文件系统,用来存储站点内容,使请求不论被分配到哪台Web服务器上都能得到完全相同的应答服务;系统在其中一台Web服务器发生故障时仍能正常工作,并支持在线增加或减少Web服务器的数量等(其结构如下图所示)。
Scalable Web Server Cluster是一个实验性的Web服务器群集系统,现代Web服务器群集系统和产品的大部分概念和方法均来源于它。
LocalDirector Cisco的LocalDirector是一种用来实现请求分配的设备,通过它可以组成Web服务器群集系统。LocalDirector有2个网络接口,一个用于连接Internet,另一个用于连接局域网中的Web服务器群集,如下图所示。
LocalDirector采用IP NAT(Network Address Transfer)技术,整个系统对外只有一个IP地址,通过IP地址变换将HTTP请求分配到群集中不同的Web服务器。群集中的各台Web服务器上存储的页面信息要求完全一致。LocalDirector在请求分配时实现了2种不同的负载均衡算法:最小连接数和快速响应优先,用户在配置LocalDirector时可以选择使用其中一种。此外,LocalDirector还支持动态改变群集规模的大小,即在不停机的情况下增加或减少服务器。
LocalDirector具有很强的吞吐能力,自身延迟也小,因而能够支持较大规模的系统,并且可以通过级联进一步扩大系统的规模(如下图所示)。像IBM的Network Dispatcher、HydraWEB的HydraWEB Dispatcher和RND的Web Server Director等在结构和功能上与LocalDirector类似。值得一提的是,这些产品的价格基本上与一台普通的工作站相当,比大多数高性能计算机要低许多。
总 结:
负载均衡群集的应用提高了Web服务器、FTP服务器,邮件服务器和其它关键应用服务器的可用性和可伸缩性。单一计算机只能提供有限级别的服务器可靠性和可伸缩性。但是,通过将两个或两个以上高级服务器的主机连成群集,网络负载均衡就能够提供关键任务服务器所需的高可靠性和高性能。