可靠性工程是研究产品生命周期中故障的发生、发展规律,达到预防故障,消灭故 障,提高产品可用性的工程技术。
信息系统的可靠性是指系统在满足一定条件的应用环境中能够正常工作的能力,可以按一般工程系统的可靠性标准进行定性评价,也可以通过平均无故障运行时间等指标来进行定景分析。
系统可靠性是系统分析、设计和实施过程中釆用一定的技术措施才能获得的。可靠性分析与设计的重要内容是建立可靠性模型,以及可靠性指标的预计与分配。
在系统分析与设计过程中,系统分析师及相关人员要反复地进行可靠性预计与分配,并不断深化, 其目的是为了选择合适的方案,预测系统可靠性水平,找出薄弱环节,逐步地将可靠性指标分配到系统各个层次中,这是一个迭代的过程。
系统讨靠性是系统在规定的时间内及规定的环境条件下,完成规定功能的能力,也就是系统无故障运行的概率。
根据国家标准《软 件 工 程 产 品 质 量 第 1 部分:质量模型》 ( G B A T 16260.1 —2006)的规定,系统可靠性包括:成熟性、容错性、易恢复性和可靠性的依从性4 个子特性。其中,
成熟性是指系统避免因错误的发生而导致失效的能力;
容错性是指在系统发生故障或违反指定接口的情况下,系统维持规定的性能级别的能力;
易恢复性是指在系统发生失效的情况下,重建规定的性能级别并恢复受直接影响的数据的 能力;
可靠性的依从性是指系统依附于与可靠性相关的标准、约定或规定的能力。
系统故障是指由于部件的失效、环境的物理十扰、操作错误或不正确的设计所引起 的硬件或软件中的错误(或差错)状态,其中错误是指故障在系统中的具体位置。在信 息系统中,故障或错误有如下儿种表现形式:
( 1 ) 永久性。永久性是指连续稳定的失效、故障或错误。在计算机硬件中,永久性 失效反映了不可恢复的物理改变。
( 2 ) 间歇性。间歇性是指那些由于不稳定的硬件或软件状态所引起的、仅仅是偶然出现的故障或错误。
( 3 ) 瞬时性。瞬时性是指那些由于暂时的环境条件而引起的故障或错误。一个故障可能由物理器件失效(支撑)、错误的系统设计(内部)、环境条件变化(外部)或用户的错误操作(接口)所引起。
永久性失效会导致永久性故障,间歇性故障可能由不稳定、临界稳定或不正确的设计所引起,环境条件变化会造成瞬时性故障。所有这些故障都可能引起系统错误。 不正确的设计和用户失误会直接引起错误。由硬件的物理条件、不正确的软硬件设计, 或不稳定且重复出现的环境条件所引起的故障可能是可检测的,并且可以通过替换或重 新设计来修复;然而,由于暂时的环境条件所引起的故障是不能修复的,因为其硬件本身实际上并没有损坏。瞬时和间歇故障己经成为系统中的一个主要错误源。
故障的表现形式千差万别,可以利用故障模型对千差万别的故障表现进行抽象。故 障模型可以在系统的各个级别上建立。一般来说,故障模型建立的级别越低,进行故障 处理的代价也就越低,但故障模型覆盖的故障也就越少。
逻辑级的故障是指硬件逻辑上出现的故障,一般是指电路中元器件的输入或输出固 定为0 (或 1)。例如,某线接地、电源短路或元件失效等都可能造成逻辑级的故障。
逻辑级的故障又可分为:短路故障、开路故障和桥接故障。
短路故障是指一个元件的输出线 的逻辑值恒等于输入线的逻辑值;
开路故障是指元件的输出线悬空,逻辑值可根据具体 电路来决定;
桥接故障是指两条不应相连的线连接在一起而发生的故障。
在数据结构上的表现称为差错。常见的差错有以下三种:
( 1 ) 独立差错。
一个故障的影响表现为使一个二进制位发生改变。
( 2 ) 算术差错。
一 个故障的影响表现为使一个数据的值增加或减少/(—(^二 …)。
( 3 ) 单向差错。
一 个故障的影响表现为使一个二进制向量中的某些位朝一个方向(〇 或 1 ) 改变。
软件故障是指软件设计过程造成的与设计说明的不一致,软件故障在数据结构或程 序输出中的表现称为软件差错。
与硬件不同,软件不会因为环境应力而疲劳,也不会因 为时间的推移而衰老。因此,软件故障只与设计有关。
常见的软件差错有以下几种:
( 1 ) 非法转移:程序执行了说明中不存在的转移。
( 2 ) 误转移:程序执行了尽管说明中存在,但依据当前控制数据不应进行的转移。
( 3 ) 死循环:程序执行时间超过了规定界限。
( 4 ) 空间溢出:程序使用的空间超过了规定的界限。
( 5 ) 数据执行:指令计数器指向数据单元。
( 6 ) 无理数据:程序输出的数据不合理。
故障在系统级上的表现为功能错误,即系统输出与系统设计说明的不一致。
如果系 统输出无故障保护机构,则故障在系统级上的表现就会造成系统失效。
与系统故障模型对应的就是系统可靠性模型,常用的可靠性模型主要有时间模型、 故障植入模型和数据模型。
系统可靠性可以通过历史数据和开发数据直接测量和估算出来,与之相关的概念主 要有平均无故障时间、平均故障修复时间、平均故障间隔时间和系统可用性等。
与系统故障模型对应的就是系统可靠性模型,常用的可靠性模型主要有时间模型、 故障植入模型和数据模型。
在数据模型下,对于一个预先确定的输入环境,系统的可靠度定义为在〃次连续运行中系统完成指定任务的概率。
计算机系统是一个复杂的系统,而且影响其可靠性的因素也非常繁琐,很难直接对 其进行可靠性分析。
但通过建立适当的数学模型,把大系统分割成若干子系统,可以简 化其分析过程。组合模型是分析系统可靠性最常用的方法。
一个系统只要满足以下4 个 条件,就可以用组合模型来计算其可靠性:
( 1 ) 系统只有两种状态:运行状态和失效状态。
( 2 ) 系统可以划分成若干个不重叠的子系统(部件),每个子系统也只有运行和失 效两种状态。
( 3 ) 子系统的失效是独立的。
( 4 ) 系统的状态只依赖于子系统的状态。
系统失效当且仅当系统中的剩余资源不满足系统运行的最低资源要求时
m模冗余系统由m (m =2n+l,《>1) 个相同的子系统和一个表决器组成,经过表决 器表决后,m 个子系统中占多数相同结果的输出作为系统的输出,如 图 19-3所示。在 m 个子系统中,只 有 个 或 /Z+ 1 个以上子系统能正常工作,系统就能正常工作, 输出正确结果。假设表决器是完全可靠的,每个子系统的可靠性为外,则 m 模冗余系统的可靠度为:
提高系统可靠性的技术可以分为避错(排错)技术和容错技术。
避错是通过技术评 审、系统测试和正确性证明等技术,在系统正式运行之前避免、发现和改正错误。
然而, 随着系统规模越来越大,结构越来越复杂,以及避错技术自身存在的复杂性和局限性, 避错己远远不能保证系统的可靠性;
另一方面,随着信息系统应用进入一些高可靠性要求的领域,对系统可靠性的要求也越来越高,因此,容错成为提高系统可靠性的重要手 段。
容错是指系统在运行过程中发生一定的硬件故障或软件错误时,仍能保持正常工作而不影响正确结果的一种性能或措施。容错技术主要是采用冗余方法來消除故障的影响。允许犯错,就意味着犯错之后,还有正确性运行的备胎,还有正确的运行的预案。冗余的代价就是增加成本!!!
冗余是指在正常系统运行所需资源的基础上加上一定数量的资源,包括信息、时间、硬 件和软件。
冗余是容错技术的基础,通过冗余资源的加入,可以使系统的可靠性得到较大的提高。
主要的冗余技术有结构冗余(硬件冗余和软件冗余)、信息冗余、时间冗余和冗余附加4 种。
结构冗余是常用的冗余技术,按其工作方式,可分为静态冗余、动态冗余和混合冗余三种:
静态冗余又称为屏蔽冗余或被动冗余,常用的有三模冗余和多模冗 余。
静态冗余通过表决和比较来屏蔽系统中出现的错误。例如,三模冗余是对三个功能 相N ,但由不同的人采用不同的方法幵发出的模块的运行结果进行表决,以多数结果作为系统的最终结果。即如果模块中有一个出错,这个错误能够被其他模块的正确结果 “屏蔽”。
由于无需对错误进行特别的测试,也不必进行模块的切换就能实现容错,故称为静态容错。
静态冗余中,每个实体只需要管好自己,不需要关系他人。
动态冗佘又称为主动冗余,它是主动通过故障检测、故障定位及故障恢复等手段达到容错的目的。其主要方式是多重模块待机储备,当系统检测到某个主工作模块出现错误时,就用一个备用的模块来顶替它并重新运行。各备用模块在其待机时,可与主模块-样工作,也可不工作。
前者叫做热备份系统(双重系统),后者叫做冷备份系统 (双工系统、双份系统)。
在热备份系统中,两套系统同时、同步运行,当联机子系统检 测到错误时,退出服务进行检修,而由热备份子系统接替工作,备用模块在待机过程中其失效率为0 ;
处于冷备份的子系统平时停机或者运行与联机系统无关的运算,当联机主系统产生故障时,人工或自动进行切换,使冷备份系统成为联机系统。在运行冷备份 时,不能保证从系统断点处精确地连续工作,因为备份机不能取得原来的机器上当前运行的全部数据。
动态冗余中,不仅仅关系自己,还需要关系其他人,当台上的人,无法提供服务时,就需要备胎推到前台。
混合冗佘技术是将静态冗余和动态冗余结合起来,且取二者之长处。
它先使用静态冗余中的故障屏蔽技术,使系统免受某些可以被屏蔽的故障的影响。而对那些无法屏蔽的故障则采用主动冗余中的故障检测、故障定位和故障恢复等技术,并且对系统可以作重新配置。因此,混合冗余的效果要大大优于静态冗余和动态冗余。
然而, 由于混合冗余既要有静态冗余的屏蔽功能,又要釘动态冗余的各种检测和定位等功能, 它的附加硬件的开销是相当大的,所以混合冗余的成木很高,仅在对可靠性要求极高的场合中采用。
信息冗余是在实现正常功能所需要的信息外,再添加一些信息,以保证运行结果正确性的方法。
例如,检错码和纠错码就是信息冗余的例子。这种冗余信息的添加方法是 按照一组预定的规则进行的。符合添加规则而形成的带有冗余信息的字称为码字,而那 些虽带有冗余信息但不符合添加规则的字则称为非码字。当系统出现故障时,可能会将 码字变成非码字,于是在译码过程中会将引起非码字的故障检测出来,这就是检错码的基本思想。
纠错码则不仅可以将错误检测出来,还能将由故障引起的非码字纠正成正确 的码字。
由此可见,信息冗余的主要任务在于研究出一套理想的编码和译码技术来提高信息冗余的效率。编码技术中应用最广泛的是奇偶校验码、海明校验码和循环冗余校验码。
时间冗余是以时间(即降低系统运行速度)为代价以减少硬件冗余和信息冗余的幵 销来达到提高可靠性的目的。
在某些实际应用中,硬件冗余和信息冗余的成本、体积、 功耗、重量等开销可能过高,而时间并不是太重要的因素时,坷以使用时间冗余。时间 冗余的基本概念是重复多次进行相同的计算,或称为重复执行(复执),以达到故障检测 的目的。
实现时间冗余的方法很多,但是其基本思想不外乎是对相同的计算任务重复执行多 次,然后将每次的运行结果存放起来再进行比较。
若每次的结果相同,则认为无故障;
若存在不同的结果,则说明检测到了故障。
不过,这种方法往往只能检测到瞬时性故障而不宜检测永久性的故障。
冗余附加是指为实现上述冗余技术所需的资源和技术,包括程序、指令、数据,以 及存放和调用它们的空间等。
在实际应用中,各种冗余技术经常是结合起来使用的。
将各种冗余技术融合在一个 系统中,就称之为冗余系统。
一般來说,一个较为完整的冗余系统,在处理运行中出现的故障时,大致有以下10个步骤:
故障检测一般可分为两类:联机检测和脱机检测。
前者提供了实时检测的能力,这种检测工作与系统的正常工作同时进行;
后者在进行检测时,系统必须停止正常工作。
这与故障检测正好相反,它不是将故障检测出来,而是将出现的故障屏蔽起来,使系统不受故障的影响。
限制故障影响的范围,防止己发生的故障影响到系统的其他部分。
这是一种检测瞬时性故障的有效措施,它町以提高系统抗瞬时性故障干扰的能力。
在故障检测的基础上,对故障进行定位。这对以后的修复、重配置等过程有很重要的意义。
若故障一日.被检出并定位,系统应有能力将发生故障的子系统替换下来,或将故障子系统与其他子系统隔离开来。当故障子系统被替换下来后,系统仍应能保持正常运行,只是系统运行速度下降、功能减弱。这一现象称为系统降级使用。
当检测出故障,必要时在系统重配置后立即消除故障引发的差错。 这时,系统应能返回到出现故障断点前的情况继续运行。这个过程称为系统恢复。
故障 的恢复策略-般有两种,分别是前向恢复和后向恢复。
前向恢复是指使当前的计算继续 下去,把系统恢复成连贯的正确状态,弥补当前状态的不连贯情况,这需要有错误的详 细说明;
后向恢复是指系统恢复到前一个正确状态,继续执行。
它们的一个不同点在于:
后向恢复简单地把变量恢复到检査点的取值,而前向恢复将对一些变景的状态进行修改 和处理,且这个恢复过程将由程序设计者设计;
另一个不同在于,前向恢复适用于吋预 见的易定义的错误,而后向恢复可屏蔽不可顶见的错误。
如果系统由于出现过多的故障而造成人量的错误,以至破坏了 许多无法恢复的信息时,就不能再使用上述的系统恢复的办法,而必须重新启动。
重新启动可分为热启动和冷启动。
前者是在部分信息遭到破坏伹还有一部分可以利用的情况时使用,部分可利用的信息存放在永久内存中。
而后者则是在几乎所有信息均遭破坏的情况下使用。重启后,所有的历史信息全部丢失。
凡是已确定有故障的子系统必须进行修复。
修复可分为脱机修复和联机修复两种。
若要修复的子系统卸下后对系统影响不大,
或者修复这些子系统时系统必定会停机,就使用脱机修复。
联机修复是指系统能自动启用备份子系统取代有故障的了系 统,并保持系统继续运行,然后再修复切换下來的故障子系统。
当上述各步完成后,系统必须重新组合,以便完全恢复正常运行。
软件容错的基本思想是从硬件容错中引申而来,利用软件设计的冗余和多样化來达到屏蔽错误的影响,提高系统可靠性。
软件容错的主要方法是:提供足够的冗余信息和算法程序,使系统在实际运行时能够及时发现程序设计错误,及时采取补救措施,以提高系统可靠性,保证整个系统的正常运行。
软件容错技术主要有N 版本程序设计、恢复块方法和防卫式程序设计等。
除上述3 种方法外,提高软件容错能力也可以从计算机平台环境、软件工程和构造异常处理模块 等不同方面达到。此外,利用高级程序设计语言本身的界错能力,采取相应的策略,也 是可行的办法。例如,C ~H ■语言中的try_except处理法和try f m a l l y中止法等。
与通常软件开发过程不同的是,N 版本程序设计增加了三个新的阶段分别是:
相异成分规范评审、相异性确认和背对背测试:
(1) 相异成分评审。
每个版本的工作组均接收到一份相同的S R S 。为了保证相异性, 这些工作组之间不允许进行任何形式的交流,有关S R S 的问题只能在工作组和项目管理 人员之间进行交换,这种交换是通过问题单的形式进行的。对于各工作组提出的问题, 由项目管理人员组成的S R S 评审委员会对每个问题单进行研究。若是对S R S 理解不正 确,则向有关工作组进行解释;若是S R S 本身问题,则修改S R S , 并通知所有工作组。
( 2 ) 相异性确认。
相异性确认在相异成分详细设计后进行,其目的是对相异性进行评估。
( 3 ) 背对背测试
使用同样的测试数据对N 版本程序进行测试,将 N 个版本程序的运行结果进行比较,用以发现版本中的软件故障。
与通常的软件开发相比,除了开发过程不同之外,N 版本程序设计还需要注意以下 问题:
( 1 ) N 版本程序的同步。
由于各种不同版本并行执行,有时甚至在不同的计算机中 执行,必须解决彼此之间的同步问题。N 版本程序的同步机制除通常的帧同步之外,还有事件同步机制,以保证输入一致性和交叉检查点的正常工作。在 N 版本程序的同步机 制中,需要引入超时处理,以解决失步问题。
(2) N 版本程序之间的通信。
由于N 版本程序设计的独立性,不同版本的数据表示 可能是不同的,因此,在N个版本程序之间进行数据通信时,必须进行数据变换。可将 N个版本通信接N处的数据规定为一种独立于各个版本的统一的数据格式,任一版本发 送数据时,需将该版本的内部数据表示转换为统一的数据表示;当任一版本接收其他版 本的数据时,将统一的数据表示变换为内部所需的数据表示。
( 3 ) 表决算法。
在 N 版本程序设计中,通常有三种表决算法:全等表决(主要适用
于布尔量的表决)、非 精 确 表 决 (允许设置一个偏差,主要适用于数值量的表决)和 C o s m e t i e表 决 (适用于字符串的表决)。
( 4 ) 一致比较问题。
在进行有限精度运算的情况下,计算的结果与所使用的特定算 法和计算的顺序有关,在进行计算量比较时(例如,将某计算量与一常量进行比较),虽 然这些计算量能满足S R S 要求,但比较结果可以全然不同,最终导致在N 版本表决时 不能得出正确的结果。对于这个问题,比较好的解决方法是将需要进行比较的计算量进 行一•次交叉表决,其缺点是降低了 N 版本程序的相异性,并使系统的实时性变差。
( 5 ) 数据相异性。
软件的故障往往仅在数据空间的个別点发生,当对这些个别点进 行修正后,则软件仍可正常工作。这是由于实际情况对数据空间的任一点,往往允许有 一定的误差,只要数据点在允许的误差范围内,则可看作是逻辑上等效的。因此,当软 件在某个输入数据;c 上存在故障,输出不正确时,可选用适当的数据重新表示算法,计 算 出 与 逻 辑 等 效 的 输 入 数 据 然 后 对 >;进行计算,从而得到正确的输出。
N 版本程序设汁和恢复块方法都是基于设计冗余的思想,这给程序员和处理机都增加了许多工作,而且它们的结构本身带来了一些问题和困难,例如,多版本程序设计中的相关性错误问题和恢复块方法中的验证测试的设计等。
防卫式程序设计是一种不采用任何传统的容错技术就能实现软件容错的方法,对于程序中存在的错误和不一致性,防卫式程序设计的基本思想是通过在程序屮包含错误检査代码和错误恢复代码,使得一旦发生错误,程序就能撤销错误状态,恢复到一个已知 的正确状态中去。
其实现策略包括错误检测、破坏估计和错误恢复三个方面。
双机容错技术是一种软硬件结合的容错应用方案。该方案是由两台服务器和一个外接共享磁盘阵列及相应的双机软件组成,如 图 19-7所示。
其中,共享磁盘阵列是一个可选的部件,可以在两台服务器中分别釆取R A I D 卡来取代。有关R A I D 的详细知识,请 阅读6.2.2节。
在双机容错系统中,两台服务器一般区分为主系统和从系统(备用系统),两台服务器互为主从关系。每台服务器都有自己的系统盘(本地盘),安装操作系统和应用程序。 每台服务器至少安装两块网卡,一块连接到网络上,对外提供服务;另一块与另一台服 务器连接,用以侦测对方的工作状况。同时,每台服务器都连接在共享磁盘阵列上,用户数据存放在共享磁盘阵列中,当一台服务器出现故障时,另一台服务器主动替代工作, 保证网络服务不间断。整个网络系统的数据通过磁盘阵列集中管理,极大地保护了数据 的安全性和保密性。
双机容错系统采用“心跳”方法保证主系统与备用系统的联系。所谓心跳,是指主 从系统之间相互按照一定的时间间隔发送通信信号,表明各自系统当前的运行状态。一 旦心跳信号表明主机系统发生故障,或者备用系统无法收到主系统的心跳信号,则系统的高可用性管理软件认为主系统发生故障,立即将系统资源转移到备用系统上,备用系统替代主系统工作,以保证系统正常运行和网络服务不间断。
双机容错系统根据两台服务器的工作方式不同,可以有三种不同的工作模式:
双机 热备模式、双机互备模式和双机双工模式。
正常情况下,一台服务器处于工作状态(主系统),另一台服务器处于监控准备状态(备用系统)。如果没有采用共亨磁盘阵列,则用户数据同时往两 台服务器中写入,以保证数据的即时同步。当主系统出现故障时,通过双机软件将备用 系统激活,保证应用在短时间内完全恢复正常使用。当主系统修复后,可重新接入系统 要回自己的应用。双机热备模式是目前采用较多的一种模式,典型应用有证券资金服务器或行情服务器等。
双机热备模式的主要缺点在于:备用系统长期处于后备的状态,存 在一定的计算资源浪费。
两台服务器均处于工作状态,为前端客户机提供各自不同的应用服务,并互相检测对方的运行情况。也就是说,两台服务器同时运行,但彼此均设为对方的备用系统。当某一台服务器出现故障时,另一台服务器可以在短时间内将故障服务器的应用接管过来,从而保证了应用的持续性。
双机互备模式的主要缺点是对服务器的性能要求比较高。
双机双工模式是集群(duster) 技术的一种形式,两台服务器均处于工作状态,同时为前端客户机提供相同的应用服务,以保证整体系统的性能,实现负载均衡和互为备份。
有关集群技术的详细知识,将 在 19.6节中介绍。
在双机容错系统中,双机软件是必不可少的。一切故障的诊断、服务的切换和硬件 的控制都由双机软件来实现。为了使双机容错系统对外像一个单机系统一样,双机软件还可以为双机系统生成一个虚拟I P 地址对外工作,客户机通过虚拟IP地址访问双机系 统,从而避免因服务器I P 地址改变导致客户机无法访问的问题。
双机软件还可以控制两台服务器对共享磁盘阵列的访问,同一时刻只能有一台服务 器可以对其访问,避免了同时访问可能对数据造成的破坏。双机软件通过侦测网卡或两台服务器之间互连的串口线,进行两台服务器的状态诊 断,一旦主系统出现故障,双机软件立即激活备用系统,接管虚拟I P 和共享磁盘阵列的 控制权,并启动备用系统中的服务对外工作,从而保证系统的实时性和吋靠性。
随着计算机技术的发展和越来越广泛的应用,人们对计算机的依赖程度也越来越高,计算机的可靠性和可用性也变得越来越重要。尽管单台计算机的性能和可靠性越来越好,但还是有许多现实的要求是单台计算机难以达到的,因此,集 群 (cluster) 技术 应运而生。集群技术就是将多台计算机组织起来进行协同工作,它是提高系统可用性和可靠性 的一种技术。在集群系统中,每台计算机均承担部分计算任务和容错任务,当其中一台 计算机出现故障时,系统使用集群软件将这台计算机从系统中隔离出去,通过各计算机 之间的负载转嫁机制完成新的负载分担,同时向系统管理人员发出警报。
集群系统通过功能整合和故障过渡,实现了系统的高可用性和可靠性。
集群技术是将多台同构或异构的计算机用集群软件连接在一起,组成一个高度透明 的大型计算机群,其中单个的计算机系统称为节点(n o d e )。集群系统作为一个整体为用 户提供服务,用户并不关心其所使用的应用运行在哪台计算机上,只关心其应用服务是 否能连续工作。在大多数情况下,集群系统中所有的计算机拥有一个共同的名称,集群 内任一节点上运行的服务可被所有的用户所使用。集群系统可以协调管理各节点出现的 错误和故障,并可透明地向集群中加入新的节点。
典型的集群系统具有如下特征:
采用集群技术,当用户需要扩展系统计算能力时,系统能在不降低服务质量的前提下进行扩展。
一般只需购买新的计算机,将其加入到集群系统中即可, 而不需要将现有的计算机更换为高性能的服务器。
集群系统的吋靠性与单机系统相比较髙,在提高了系统的可靠性的
同时,可以大大减小由于故障造成的停运。集群系统在部分硬件和软件发生故障时,整 个系统仍高度可用,可以将系统停运的时间减到最小。
集群系统能够管理大规模和物理分散的节点。
集群系统能够以最少的投资获得最大的性能。在达到同样性能的条 件下,采用计算机集群比采用同等运算能力的大型计算机具有更高的性价比。
集群系统对用户是透明的,在用户看来,集群是一个系统,而非多 个计算机系统。当集群系统的节点发生变化时,上层应用无需修改或尽吋能少修改。
集群系统的主要目标是通过网络互连实现全系统范围内的资源共享,从而提高资源利用率,获得高性能。为了使由独立计算机组成的集群系统工作起来,且形成对用户透 明的单一系统,必须为其提供调度和资源管理。
资源管理与调度系统是集群技术中一个非常重要的方面。从系统的角度来看,集群系统的资源使用率是最重要的问题。系统资源率使用越高,说明系统吞吐能力越大,资源共亨的效果也越好。
集群系统进行任务调度的主要方法是进程迁移技术,有关这方面 的详细知识,将 在 19.6.6节中介绍。
采用集群技术的目的是为了提高系统性能、降低系统成本、提高系统扩展性和可靠性等
按照解决问题的不同,一般将集群系统分为:高性能计算集群、负载均衡集群和高可用性集群。
高性能计兑集群以解决复杂的科学计算问题为目的,其处理 能力与真正的超级并行机相等,并且具有优良的性价比。高性能计算集群是计算机科学 的一个分支,致力于开发超级计算机,研究并行算法和开发相关软件。
高性能计算主要研究两类问题,
第一类是大规模科学计算问题,例如,天气预报、地形分析和生物制药 等;
第二类是存储和处理海量数据问题,例如,数据挖掘、图像处理和基因测序等。
有 关高性能计算集群的详细知识,将 在 19.6.2节中介绍。
负载均衡集群为企业需求提供了更实用的系统,集群中所有的 节点都处于活动状态,它们分摊系统的工作负载。例如,W e b 服务器集群、数据库集群 和应用服务器集群都M 于这种类型。负载均衡集群使负载可以在计算机集群中尽可能平 均地分摊处理,对于运行同一组应用程序的大量用户,每个节点都可以处理一部分负载, 并且可以在节点之间动态分配负载,以实现平衡。有关负载均衡集群的详细知识,将在 19.6.3节中介绍。
高可用性集群致力于使计算机系统的运行速度和响应速度尽可能快,它们经常使用在多台计算机上运行的冗余节点和服务,用来相互跟踪。为保证集 群系统整体服务的高可用性,需要考虑计算机硬件和软件的容错性。如果高可用性集群中的某个节点发生故障,则将由另外的节点代替它。整个系统环境对于用户是透明的, 对于用户而言,集群系统永远不会停机。有关高可用性集群的详细知识,将 在 19.6.4节 中介绍。
在实际应用中,这三种基本类型经常会发生混合与交杂。例如,高性能计算集群也需要在其节点之间进行负载均衡,负载均衡集群的主要目的也是为了提高系统的可用性 等。从这个意义上来说,上述集群类别的划分是一个相对的概念,而不是绝对的。
高性能计算集群是指以提高科学计算能力为目的计算机集群技术,它是一种并行计算集群的实现方法。并行计算是指将一个应用程序分割成多块可以并行执行的部分,并指定到多个处理器上执行的方法。例如,曾经战胜了国际象棋世界冠军卡斯帕罗夫的深 蓝(deep blue)计算机就是并行计算集群的一种具体实现,它是一个拥有3 2个节点的IBM RS6000 S P 型计算机的集群系统。
高性能计算集群系统是利用高速互连网络将一组P C (或工作站)连接起来,在并 行程序设计和集成开发环境支持下,统一调度和协调处理,实现高效并行处理的系统。 一个集群包含多台拥有共享数据存储空间的计算机,任何一台计算机运行应用时,数据存储在共享的数据空间内。每台计算机的操作系统和应用程序文件存储在其各自的本地 存储空间中。和传统的高性能计算机技术相比,集群技术可以利用各档次的计算机作为 节点,系统造价低,可以实现很高的运算速度,完成大运算量的计算。使用集群技术可以最少的投资获得接近于大型主机的性能。
髙性能计算集群系统之所以能够从技术研究发展到实际应用,主要是它与传统的并行处理系统相比,有以下几个明显的特点:
由于高性能计算集群系统大多采用商用工作站和通用局域网络,使节点计算机的管理相对容易,可靠性高。开发的重点在通信和并行编程环境上, 既不用重新研制计算节点,又不用重新设计操作系统和编译系统,这就节省了大量的研 制时间。
用户在购置巨型机或M P P 系统时很不放心,担心使用效率 不高,系统性能发挥不好,从而浪费大量资金。而高性能计算集群系统不仅是一个并行 处理系统,它的每个节点同时也是一台独立的计算机,即使整个系统对某些应用问题并 行效率不髙,它的节点仍然可以作为一个计算机系统使用。
由于生产批量小,巨型机或M P P 的价格都比较昂贵,而工作站 或 P C 是批量生产出来的,因而售价较低。由数十台P C (或工作站)组成的高性能计算 集群系统可以满足相当多数应用的要求,而价格却比较低。
由于高性能计算集群系统的结构比较灵活,可以将不同体系结构,不同性能的计算机连在一起,这样就可以充分利用现有设备。单从使用效率上来看, 高性能计算集群系统的资源利用率也比单机系统要高得多。另一方面,即使用户设备更 新,原有的一些性能较低或型号较旧的机器在髙性能计算集群系统中仍可发挥作用。
从规模上说,高性能计算集群系统大多使用通用网络,系统扩 展容易;
从性能上说,高性能计算集群系统对大多数中、粗粒度的并行应用都有较高的 效率。
在高性能计算集群系统中,程序的并行化只是在原有的串行程 序中,插入相应的通信原语。用户使用的仍然是熟悉的编程环境,不用适应新的环境, 这样就可以继承原有软件财富,对串行程序做并不很多的修改。
通信子系统是高性能计算集群系统的重要组成部分,它完成系统中各节点之间数据传递的功能,其性能的好坏直接影响到并行计算的加速比和效率。这是因为并行计算时 间是由各节点计算时间和节点之间数据通信时间两部分组成的,如果通信时间所占的比 例过大,则必然使得并行计算的加速比下降,整个系统的效率也不会高。高性能计算集群系统是一个松耦合的计算机系统,具有可扩展性好、性能/价格比高 的特点,但网络带宽通常较低。通信子系统的性能是整个高性能计算集群系统的薄弱环 节,影响通信系统性能的主要因素有网络带宽低、传统T C P /I P 协议的多层次结构带来了 很大的处理开销、协议复杂的缓冲管理增加了网络延迟。另外,操作系统的额外开销也 不可忽视。要提高通信系统的性能,可以采用新型高速网络,提高网络带宽,或者设计 新的通信协议,降低通信延迟。
通信系统的主要任务:
更多的用户(多)
更大的吞吐率/更多的bits(多)
更低的延时(快)
更高的可靠性(好)
更安全的通信(好)
更低的价格(省)
对于高性能计算集群系统,人们希望要有较高的节点运算速度,系统的加速比性能 接近线性增长,并行应用程序的开发要高效、方便。开发并行应用程序要比串行程序困 难得多,它要涉及多个处理器之间的数据交换与同步,要解决数据划分、任务分配、程 序调试和性能评测等问题,需要相应支持工具,例如,并行调试器、性能评测工具、并 行化辅助工具等,它们对程序的幵发效率与运行效率都有重要作用。 并行程序设计语言是并行系统应用的基础,己有的高性能计算集群系统大多支持 Fortran、C 和 C + + , 实现的方法主要是使用原有顺序编译器链接并行函数库,或者加入 预编译。
在高性能计算集群系统中,一个大的任务往往由多个子任务组成。
这些子任务被分 配到各个处理节点上并行执行,称之为负载。
对于由异构处理节点构成的并行系统而言, 由于各节点的处理能力不同,相同的负载在其上运行的时间和资源占有率都不同。因此,准确的负载定义应是绝对的负载量与节点处理能力的比值。当整个系统任务较多时,各 节点上的负载可能产生不均衡现象,就会降低整个系统的利用率。这就是负载不平衡问题。负载不平衡问题解决得好坏,直接影响到并行计算的性能。因此,负载均衡成为高性能计算集群系统中的一个重要问题。有关负载均衡的详细知识,将 在 19.6.5节中介绍。
在实际应用中,特别是在W e b 应用中,服务器的处理能力和I/O 已经成为提供应用服务的瓶颈。由于涉及的信息量十分庞大,用户访问的频率也高,许多基于W e b 的大型 系 统 (例如,电子图书馆、B B S 、搜索引擎和远程教育等)每秒钟内需要处理上百万个 甚至更多的请求,显然,单台服务器有限的性能难以解决这个问题。
为了解决上述问题,采用高性能的主机系统(小型机或大型机)是可行的。但是,除了其价格昂贵、可扩展性差以外,这种主机系统在很多情况下也不能同时处理上百万 个并发的请求。因为高速主机系统只是对于复杂单一任务和有限的并发处理显得高性能, 而 Internet中的W e b 应用绝大多数处理是简单任务、高强度并发处理,因此,即便有大 量资金投入,采用高性能、高价格的主机系统,也不能满足W e b 应用的需要。
另一种解决方法就是采用集群技术,即利用多台计箅机实现负载均衡集群。负载均衡集群在多节点之间按照一定的策略(算法)分发负载。负载均衡建立在现有网络结构 之上,它提供了一种廉价有效的方法来扩展服务器带宽,增加吞吐量,提高数据处理能 力。负载均衡是一种动态均衡,它通过一些工具实时地分析数据包,掌握网络中的数据 流量状况,把任务合理分配出去。例如,G o o g l e采用的就是负载均衡集群。目前,G o o g l e 系统由近2 万台P C 组成,整个G o o g l e系统分成4 个集群,位于两个不同城市。每个集 群结构相同,由几千台P C 组成,内部由交换式以太网互连,并拥有相同的数据集。
负载均衡是指处理节点的负载信息通过某代理软件传递给均衡器,由均衡器做出决策并对负载进行动态分配,从而使集群中各处理节点的负载相对趋于平衡。
根据负载均衡的位置不同,可以将负载均衡分为客户端负载均衡和服务器端负载均 衡。
是指客户端的均衡器根据集群的负载情况,主动选择由集群中的哪台计算机为其提供服务;
服务器端负载均衡又可根据执行负载均衡的方式不同,分为集 中式负载均衡和分布式负载均衡。在集中式负载均衡方式下,均衡器位于集群中一台计算机上,它根据当前集群的负 载状态对负载进行集中式分配;在分布式负载均衡方式下,有多个均衡器位于集群中不 同的计算机上,由这呰均衡器根据其均衡策略和集群中各计算机的当前负载状态,以分 布式协商的机制分配负载。与分布式负载均衡方式相比,集中式负载均衡实现简单,但 也存在以下缺点:
(1) 系统的可扩展性不强,均衡器需要记录所有计算机的负载信息。
(2) 安全性较差,如果均衡器所在的计算机瘫痪,则会导致整个集群系统的瘫痪。
(3) 实现不够灵活,负载均衡器很难根据不同脚手架的特性配置不同的均衡策略。
按照负载均衡所在的层次不同,可以将负载均衡划分为:
应用层负载均衡、传输层负载均衡、网络层负载均衡和数据链路层负载均衡。
在数据链路层上实现负载均衡的原理是根据数据包的目的 M A C 地址选择不同的路径:
在网络层上可利用基于 I P 地址的分配方式将数据流疏通到多个节点;
而传输层和应用层的交换技术,本身便是一种基于访问流量的控制方式,能够实现负载均衡。
负载均衡和调度的任务是使得任务在集群各节点间得到尽可能合理的分摊处理,从而达到卨效利用系统资源的目的。一般将组成集群的计算机分为处理节点和均衡节点两类。
处理节点的处理器负载、应用系统负载、用户数量、可用的网络缓冲区、可用的系统内存或其他的系统资源有关的负载状态信息通过节点上的代理软件传递给均衡节点,由均衡节点做出决策。
所谓均衡节点,可以是一个单元,也可以是多个单元,可以是并行结构,也可以是树型的层次结构,它使用一种或多种负载分配算法以及静态或动态配置来决定系统负载的分配。这呰方法可以是与应用相关的也可以是与应用无关的,或者是完全依赖网络协议和流量的。
负载均衡的一个要点是节点的资源使用状态。由于负载均衡集群系统的最终目的是使系统中各节点的资源使用状态尽可能达到平均,因此,及时、准确地把握节点负载状况,并根据各个节点当前的资源使用状态,动态调整负载均衡的流量分布,是负载均衡与调度考虑的关键问题。
在负载均衡集群系统中,首先要解决如何衡量各节点当前的负载状况,即负载评估问题。
只有对这一信息进行合理预测,才能为有效的负载均衡策略提供基础。衡量节点当前负载状况的度量方法和准则称为负载指标。理想的体现系统负载状况的指标应满足以下条件:
(1)测量开销低,这样才可以保证频繁测量以确保信息更新。
(2)能体现所有竞争资源上的负载。
(3)各负载指标在测景及控制上彼此独立。
由于系统资源内容的多样性,系统负载可以从多个侧面加以描述。例如,对 于 I/O密集型问题,系统负载的主要表达式通过系统 I / O 资源表示;而对于 C P U 密集型的科学计算,则面向于详细描述 C P U 资源。
目前,被广泛采用的负载指标主要有:节点中某等待队列的长度、节点的利用率、处理单元(例如,进程或作业)的响应时间和内存利用率等。
随着全球经济的增长,企业利用计算机系统来提供及时、可靠的信息和服务是必不可少的,尤其是在一些关键的应用领域,其基本业务特点是实时性强、瞬间数据流量大、交易业务不宜停机。如果出现服务器停机或数据丢失,无论是在声誉上或在经济上都会造成巨大损失。因此,必须有适当的措施来确保计算机系统提供不间断的服务,以维护系统的可用性。高可用性集群就是一种以减少服务中断时间为指标的计算机集群技术,可以提供7 X 2 4 小时昼夜不停的可靠保证,确保网络系统、网络服务、共 享 R A I D 、共享文件系统、进程以及数据库能够不停息地运转。
在高可用性集群系统中,多台计算机一起工作,各自运行一个或几个服务,各为服务定义一个或多台备用计算机。当某台计算机出现故障时,备用计算机便立即接管该故障计算机的应用,继续为前端的用户提供服务。如果只有两台计算机组成高可用性集群系统,则就相当于19.5节中介绍的双机双工方式。高可用性集群能够很好地保证各种故障情况下应用系统访问的连续性。在高可用性集群中,应用系统的任何一个服务都可以运行在集群系统中的任何一个节点中,当这个节点出现故障时,运行在这个节点上的所有服务都可以在定义好的其他节点中启动运行,而用户感觉不到有任何变化。高可用性集群技术适用于对应用系统有严格高可靠性要求的企业、政府、军队、重要商业网站或数据库应用等用户。
在髙可用性集群系统中,每个节点的计算机必须有自己的 C P U 、内存和磁盘,每台计算机都需要安装操作系统和集群软件程序。
高可用性集群系统中的计算机一般釆用 T C P / I P 网络协议与客户端相连,每台计算机上都有自己的应用服务,客户端必须通过集群计算机中的网络通路来得到自己的服务。
在高可用性集群系统中,每个节点必须有心跳接口,用于节点之间互相监视和通信,以取得备用计算机的工作状态。常见的心跳信号可通过串行通信线 路 ( R S -232)、 T C P / I P 网络和共享磁盘阵列互相传递信息。心跳线路最好使用两条不同的通信线路,达到监视线路冗余的效果。
在高可用性集群系统中,由于运行的都是关键业务,所以使用的存储服务器都应该是企业级的存储服务器,这些存储服务器应具有先进技术来保证其数据安全。
共享磁盘阵列是各节点计算机之间维持数据一致性的桥梁,各节点在集群软件的控制下不会同时访问共享磁盘阵列。
负载均衡是集群系统中的一项重要技术,可以提髙集群系统的整体处理能力,也提高了系统的可靠性,最终目的是加快集群系统的响应速度,提高客户端访问的成功概率。
集群的最大特征是多个节点的并行和共同工作,如何让所有节点承受的负荷平均,不出现局部过大负载或过轻负载的情况,是负载均衡的重要 H 的。如果出现局部过大负载,必然导致硬件压力比较大,老化和损坏的可能性比较大:如果出现局部过轻负载,设备资源被搁覚浪费,不符合成本最低原则。
负载均衡有两方面的含义。
首先,大量的并发访问或数据流量分担到多个节点上分别处理,减少用户等待响应的时间;
其次,单个重负载的运算分担到多个节点上做并行处理,每个节点处理结束后,将结果汇总,返回给用户,系统处理能力得到大幅度提高。
目前,人们提出了许多负载均衡的调度算法,用于实现计算机集群系统的负载均衡。这些算法大致可分为静态调度算法和动态调度算法两类。静态调度算法是指调度算法在调度时无需考虑节点当前的负载状态,而是依据不同原则在调度前选择一种均匀调度规则来完成服务请求的调度。该类算法数量众多,典型的有轮转算法、加权轮转算法、最小连接数算法、加权最小连接数算法、源地址哈希散列算法、目标地址哈希散列算法和随机算法等。静态调度算法由于其调度策略事先确定,无法根据当前节点的负载状况进行自适应调整;动态调度算法是指在进行服务请求的调度前,需考虑节点当前的一些动态指标,根据这些动态指标来决定服务请求的调度,典型的有加权百分比算法等。
轮转算法是一种经典的分配算法,该算法每次轮流将服务请求(任务)调度给不同的节点。该算法的优点是简单,它无需记录当前所有请求的状态,所以是一种无状态调度。轮转算法假定所有节点的处理性能均相同,而且不管节点的当前负载、请求个数和响应速度的差异,不适用于节点处理性能不一样的情况。另外,当各请求响应时间变化比较大时,轮转算法极易导致节点之间的负载不平衡。
轮转算法的粒度是基于每个请求连接的,同一用户的不同请求会被调度到不同的节点上。
加权轮转算法是轮转算法的一个改进,其思想是首先按照各节点的性能分别指定不同权值,然后按权值来分配给节点相应的请求数景。
加权轮转算法是按权值的高低和轮转方式把请求分配到各节点的,权值高的节点比权值低的节点处理更多的请求,相同权值的节点处理相同数目的请求。
最小连接数算法是一种根据各节点的负载状况来分配请求的
算法,其基本思想是调度程序把每个新请求分配给当前活动请求数量最少的节点。最小
连接数算法的优点是,当所有节点具有相同的处理能力时,'算法把负载变化大的请求调
度到多个节点上,所有处理时间比较长的请求不可能被调度到同一个节点上。但是,当
各节点处理能力不同时,该算法并不理想。
加权最小连接数算法与加权轮转算法类似,只不过它是
基丁•最小连接数来加权计算。各个节点用相应的权值表示其处理性能,在调度新请求时,
尽可能使节点处理的请求数量与其权值成比例。
L B L C算法针对请求报文的目标 I P 地址进行负载均衡调度,
算法的设计目标是在节点负载基本平衡的情况下,将相同目标 I P 地址的请求调度到同一个节点上,以提高各个节点的访问局部性和主存命中率,从而提高整个集群系统的处理能力。 L B L C 算法先根据请求的目标 1 P 地址,找出该目标1 P 地址最近使用的节点,
若该节点是可用的且没有超载,就将请求调度到该节点;
若该节点不存在或该节点超载,且有节点处于其一半的工作负载,则用最小连接的原则选出一台可用的节点,将请求发送到该节点。
L B L C R 算法也是针对 目标 I P 地址进行负载均衡调度,它与 L B L C 算法的不同之处在于,它要维护从一个目标 I P 地址到一组节点的映射,而 L B L C维护从一个目标 I P 地址到一个节点的映射。 L B L C R 算法先根据请求的目标 I P 地址,找出该目标 I P 地址对应的节点组,按最小连接的原则从该节点组中选出一个节点,若该节点没有超载,将请求发送到节点:若该节点超载,则按最小连接的原则从整个集群中选出1个节点,将该节点加入到节点组中,将请求发送到该节点。同时,当该节点组有一段时间没有被修改,将最忙的节点从节点组中删除,以降低复制的程度。
目标地址哈希散列算法是一种静态映射算法,通过一个散列函数将 H 的 I P 地址映射到一个节点。该算法先以请求的目的IP 地址作为散列键,从静态分配的散列表中找出对应的节点,若该节点是可用的且未超载,就将请求发送到该节点;否则,返回空值。
源地址哈希散列算法与目标地址哈希散列算法相似,只不过它以请求的源 I P 地址作为散列键。
(9) 随机分配算法。
对于每个服务请求 , 通过随机选择的方式选择一个节点为其提供服务。随机分配算法也是一种实现简单、无状态的调度算法。
(10) 加权百分比算法。
加权百分比算法考虑了节点的利用率、内存利用率、硬盘速率、进程个数、分配的任务数等,使用利用率来表现剩余处理能力,并通过对每个因素选择一个影响系数来表现对节点整体工作性能产生的作用。该算法实现难度在于选择各个因素的系数。系数选择得好,集群系统可以达到较好的负载均衡效果;否则,可能不如其他算法。
备注:这种算法,通过深度学习算法进行调度,会非常高效,不需要人工定义每个因素的系数
在实际应用中,比较常用的负载均衡实现技术主要有以下几种:
很多 网络协议都支持重定向功能,例如,在 H T T P协议中支持 Location 指令,接收到这个指令的浏览器将自动重定向到 Location 指明的另一 个 U R L 上。由于发送 Location 指令比起执行服务请求,对节点的负载要小得多,因此,可以根据这个功能来设计一种负载均衡的节点。当节点认为自己负载较大的时候,就不再直接给浏览器发送所请求的网页,而是发送一个 Location 指令,让浏览器在计算机集群中的其他节点上获得所需要的网页。 、这种方式的具体实现有很多困难,例如,一个节点如何能保证它重定向的节点是比较空闲的,并且不会再次发送 Location 指令等。 Location 指令和浏览器都没有这方面的支持能力,这样,很容易形成一种死循环。因此,在实际应用中,这种方式并不多见,使用这种方式实现的计算机集群软件也较少。
基 于 D N S 的负载均衡是在 D N S 服务器屮为同一个主机名配置多个 I P 地址,在应答 D N S 杳询时 ,D N S 服务器对每个查询将以 D N S 文件中主机记录的 I P 地址按顺序返回不同的解析结果,将客户端的访问引导到不同的节点上去,使得不同的客户端访问不同的节点,从而达到负载均衡的目的。
D N S 负载均衡的优点是经济、简单易行,并且节点可以位于Internet 上任意的位置。
但它也存在不少缺点,例如,为了保证 D N S 数据及时更新,一般都要将 D N S 的刷新时间设置得较小,但太小就会造成太大的额外网络流量,并且更改了 D N S 数据之后也不能立即生效; D N S 负载均衡采用的是简单的轮转算法,不能区分节点之间的差异,不能反映节点的当前运行状态,不能做到为性能较好的节点多分配请求,甚至会出现客户请求集中在某一个节点上的情况。另外,要给每个节点分配一个 Internet 上的 I P 地址,这势必会占用过多的 I P 地址。
基于N A T 的负载均衡将一个外部 I P 地址映射为多个内部IP 地址,对每次连接请求动态地转换为一个内部节点的地址,将外部连接请求引到转换得到地址的那个节点上,从而达到负载均衡的目的。基于 NA T 的负载均衡是一种比较完善的负载均衡技术,起着 N A T 负载均衡功能的设备一般处于内部节点到外部网之间的网关位置,例如,路由器、防火墙、四层交换机、专用负载均衡器等,均衡算法也较灵活,例如,使用随机选择、最小连接数等来分配负载。基于 N A T 的负载均衡可以通过软硬件方式来实现。通过软件方式来实现 N A T 负载均衡的设备往往受到带宽和系统本身处理能力的限制,由于 N A T 比较接近网络的低层,因此,可以将它集成在硬件设备中,例如,四层交换机和专用负载均衡器等,四层交换
机的一项重要功能就是基于 N A T 的负载均衡。
反向代理负载均衡是将来自 Internet 上的连接请求以反向代理的方式动态地转发给内部网络上的多个服务器节点进行处理,从而达到负载均衡的目的。反向代理负载均衡既能以软件方式实现,也能在高速缓存器和负载均衡器等硬件设备上实现。反向代理负载均衡可以将优化的负载均衡策略和代理服务器的高速缓存技术结合在一起,提升静态网页的访问速度,提高系统性能。另外,由于网络外部用户不能直接访问真实的节点计算机,反向代理负载均衡还具备额外的安全性(同理,基 于 N A T 的负载均衡也有此优点)。
反向代理负载均衡的缺点主要表现在两个方面。
首先,反向代理处丁- O S I 参考模型应用层,因此,必须为每种应用服务专门开发一个反向代理服务器,这样,就限制了反向代理负载均衡技术的应用范围,现在一般都用于对 W e b 服务器的负载均衡;
其次,针对每一次代理,代理服务器都必须打开两个连接,一个对外,一个对内。在并发连接请求数景非常大的时候,代理服务器的负载也就非常大,代理服务器本身会成为服务的瓶颈。
在有些大型网络中,由于多个计算机集群内硬件设备、各自的规模、提供的服务等的差异,可以考虑给每个集群采用最合适的负载均衡方式,然后又在这多个集群之间再一次进行负载均衡(即将每个集群系统当做新的集群中的一个节点),从而达到最佳的性能。
进程迁移是指当进程运行时,在源节点和目标节点之间转移进程的行为。
由于在这个过程中转移的是活跃进程,因此又称为抢占式进程迁移。
进程迁移的基本过程如图19-9所示。
一般地,进程在迁移之前必须停止,并使进程的状态能够被获取并转移到目的节点,在目的节点上,进程的执行信息被重建并重新开始执行。
进程迁移是支持负载均衡和高容错性的一种非常有效的于•段,是实现负载均衡的基
础。在集群系统中,利用进程迁移可实现以下功能:
为了让一个进程使用尽可能多的 C P U 时间,需要将它迁移到能提供大部分指令和 I / O 操作的节点上执行。
如果一个进程需要与其他进程频繁地进行通信,这时将这些进程放置得近一些,就会减少通信的负担,具体的方法就是将一个进程迁移到其他进程所在的节点上。
当某个节点失效时,可以将进程迁移到其他节点上继续执行 , 这样,就保证了系统在遇到灾难时的可用性。使失效的节点修复了错误,重新进入集群系统时,需要将某些该节点上原来运行的进程重新迁移回来。
当对集群进行管理时,有时需要将服务从一个节点移到另一个节点,透明的进程迁移可以在不停机的情况下迁移服务。
如果某个进程能够从集群中的某个特定节点上受益,它就应该在那个节点上执行。例如,进行数值计算的程序能够通过使用数学协处理器或超级计算机中的多个处理器来缩短程序执行时间。
目前,进程迁移算法主要有贪婪复制算法、惰性复制算法、预复制算法和基于检査点的迁移算法等。
先挂起源节点进程,然后传输进程的全部状态(包括一些打幵的文件和执行状态等)到目的节点后,再启动 H 的节点进程。
这种算法比较简单、易于实现,但也有不足之处,例如,延时较长,有些冗余数据传输到目的节点后,实际上并没有用,造成网络负担。
先传输进程在目的节点上重新执行所需要的最小相关信息,然后在目的节点上启动进程。
与贪婪复制兑法相比,它传输的是必需的、最少量的状态集,这些信息通常是进程的部分(或全部)核心数据(包括打幵的 文件、 执行状态和当前目录等)和一小部分地址空间。当进程在目的节点上的执行需要其余状态信息时,再传输这些信总。
该算法的优点是延迟小、网络负担少,
缺点是会导致对源节点的剩余依赖性,+ 能提高系统的可靠性
因此,在集群系统中一般不使用该算法。
在进程的部分(或全部)地址空间从源节点传输到目的节点后,源节点才挂起进程并传输核心数据。也就是说,当进程在源节点上执行时,并行传输地址空间到目的节点上。进程挂起后,再传输核心数据和一些先前己经传输而后被改变的地址空间。这种算法虽然降低了进程挂起的时间,避免因挂起时间长而导致的幵销和错误,但是会将某些信息复制两次,总的传输时间反而加长。
前面三种算法都是假设在源节点没有故障的情况下将进程挂起,从而完成进程的迁移。如果源节点发生故障,将不能得到进程的状态信息,导致迁移失败。基于检査点的迁移算法利用检查点保存进程佶息,在源节点发生故障的情况下,可以根据检査点信息在目的节点重构进程,使其继续运行。因此,基于检查点的迁移算法可以提高系统的可靠性,减小时间开销,达到实时性。
进程迁移主要涉及到两个阶段的通信管理,即迁移过程中的通信管理和迁移之后的通信管理。
某进程正在迁移时,如果有其他进程与之通信,可能由于无法正确找到接收进程的位置而导致通信失败,为避免这种情况的发生,在集群系统中一般采用三种方法来处理。
第一种方法是在进程迁移之前,发送特殊消息,通知其他进程此进程将要迁移,并得到它们的认吋,保证在迁移过程中不发送任何消息给迁移进程;
第二种方法是在迁移过程中,其他进程仍然发送消息给源节点,源节点缓存所有收到的发给迁移进程的消息,待迁移结束后,再转发这残消息;
第三种方法是在迁移过程中,源节点拒绝接收发给迁移进程的消息,并要求发送者稍后将消息重发到目的节点。
进程迁移到目的节点后,如何恢复通信,一般也有三种处理方法。
第一种是消息重定位方法,即当进程迁移时,源节点已经获得目的节点的地址,进程迁移后,源节点+通知与所迁移进程通信的进程,消息仍然发送到源节点,再由源节点转发到目的节点;
第二种是消息丢失保护方法,即源节点将目的节点的地址通知与所迁移进程通信的进程,消息发送到目的节点,待迁移进程恢复执行时,再从目的节点中取得消息;
第三种是消息丢失恢复方法,即在迁移过程中发送的消息都将丢失,待迁移完毕后,重新建立连接并重新发送消息。
另外,因为目前通用的 T C P / I P 网络协议对进程通信支持能力较弱,为减少进程之间通信开销,有些集群系统修改了网络通信协议,使用自己特殊的通信协议和通信原语,在底层协议级更好地支持进程间通信。由于集群系统的特殊性和进程迁移的具体应用需求,在系统设计时,应考虑到进程迁移的透明性、灵活的伸缩性和实现的高效性,以及兼顾异构性、容错性,避免剩余依赖性等。但是,所有这些性能有可能是互相限制的,例如,透明性有可能依靠产生剩余依赖性来获得。因此,在决定集群系统的设计目标时,应考虑各方面的因素,强调重点,合理取舍。