当前位置:   article > 正文

[架构之路-118]-《软考-系统架构设计师》-软架构设计-11-可靠性相关设计_软件可靠性纠错设计

软件可靠性纠错设计

第11节 可靠性相关设计

11.1 可靠性基本概念

可靠性工程是研究产品生命周期故障的发生、发展规律,达到预防故障,消灭故障,提高产品可用性的工程技术。

信息系统的可靠性是指系统在满足一定条件的应用环境中能够正常工作的能力,可以按一般工程系统的可靠性标准进行定性评价,也可以通过平均无故障运行时间等指标来进行定量分析。

系统可靠性是系统在规定的时间内及规定的环境条件下,完成规定功能的能力,也就是系统无故障运行的概率。

系统可靠性包括成熟性、容错性易恢复性可靠性的依从性四个子特性。

成熟性是指系统避免"因错误的发生而导致失效"的能力

容错性是指在系统发生故障或违反指定接口的情况下,系统维持规定的性能级别的能力

易恢复性是指在系统发生失效的情况下,重建规定的性能级别并恢复受直接影响的数据的能力

可靠性的依从性是指系统依从于与可靠性相关的标准、约定或规定的能力

不可用的情况,不一定是不可靠,比如,系统停止运行,这是不可用,但不用的情况下,不存在不可靠的问题。不可靠只针对系统运行时的情形。

11.2 可靠性分析

11.2.1 故障表现形式

在信息系统中,故障或错误有如下几种表现形式:

(1)永久性。

永久性是指连续稳定的失效、故障或错误。在计算机硬件中,永久性失效反映了不可恢复的物理改变。

(2)间歇性。

间歇性是指那些由于不稳定的硬件或软件状态所引起的、仅仅是偶然出现的故障或错误。

(3)瞬时性。

瞬时性是指那些由于暂时的环境条件而引起的故障或错误。

11.2.2 故障模型

故障的表现形式千差万别,可以利用故障模型对千差万别的故障表现进行抽象。故障模型建立的级别越低,进行故障处理的代价也就越低,但故障模型覆盖的故障也就越少。

(1)硬件逻辑级的故障

逻辑级的故障是指硬件逻辑上出现的故障,一般是指电路中元器件的输入或输出固定为0(或1)。

逻辑级的故障又可分为短路故障、开路故障和桥接故障。

  • 短路故障是指一个元件的输出线的逻辑值恒等于输入线的逻辑值;

  • 开路故障是指元件的输出线悬空,逻辑值可根据具体电路来决定;

  • 桥接故障是指两条不应相连的线连接在一起而发生的故障。

(2)硬件数据结构级的故障

故障在数据结构上的表现称为差错。常见的差错有以下三种:

  • (1)独立差错。一个故障的影响表现为使一个二进制位发生改变。

  • (2)算术差错。一个故障的影响表现为使一个数据的值增加或减少2i(i=0,1,2,…)。

  • (3)单向差错。一个故障的影响表现为使一个二进制向量中的某些位朝一个方向(0或1)改变。

(4)软件故障和软件差错

软件故障是指软件设计过程造成的与设计说明的不一致,软件故障在数据结构或程序输出中的表现称为软件差错。与硬件不同,软件不会因为环境应力而疲劳,也不会因为时间的推移而衰老。因此,软件故障只与设计与编码有关。常见的软件差错有以下几种:

  • (1)非法转移:程序执行了说明中不存在的转移。

  • (2)误转移:程序执行了尽管说明中存在,但依据当前控制数据不应进行的转移。

  • (3)死循环:程序执行时间超过了规定界限。

  • (4)空间溢出:程序使用的空间超过了规定的界限。

  • (5)数据执行:指令计数器指向数据单元。

  • (6)无理数据:程序输出的数据不合理。

(4)系统级的故障

故障在系统级上的表现为功能错误,即系统输出与系统设计说明的不一致。

如果系统输出无故障保护机构,则故障在系统级上的表现就会造成系统失效。

11.2.3 可靠性量化分析

(1)平均无故障时间

可靠度为R(t)的系统的平均无故障时间(Mean Time To Failure,MTTF)定义为从t=0时到故障发生时系统的持续运行时间的期望值。

(2)平均故障修复时间

可用度为A(t)的系统的平均故障修复时间(Mean Time To Fix,MTTR)可以用类似于求MTTF的方法求得。

(3)平均故障间隔时间

因为两次故障之间必然有修复行为,因此,平均故障间隔时间(Mean Time Between Failure,MTBF)中应包含MTTR。对于可靠度服从指数分布的系统,从任一时刻t0到达故障的期望时间都是相等的,因此有:

MTBF = MTTR+MTTF

在实际应用中,一般MTTR很小,所以通常认为MTBF≈MTTF。

(4)系统可用性

系统可用性是指在某个给定时间点上系统能够按照需求执行的概率,其定义为:可用性 = MTTF/( MTTR+MTTF)×100% = MTTF/MTBF×100%

11.2.5 可靠性模型

(1)时间模型

时间模型基于这样一个假设:系统中的故障数目在t=0时是常数,随着故障被纠正,故障数目逐渐减少。

(2)故障植入模型

故障植入模型是一个面向错误数的数学模型,其目的是以系统中的错误数作为衡量可靠性的标准。故障植入模型的基本假设如下:

  • (1)系统中的固有错误数是一个未知的常数。

  • (2)系统中的人为错误数按均匀分布随机植入。

  • (3)系统中的固有错误数和人为错误被检测到的概率相同。

  • (4)检测到的错误立即改正。

(3)数据模型

在数据模型下,对于一个预先确定的输入环境,系统的可靠度定义为在n次连续运行中系统完成指定任务的概率。

11.2.6 可靠性系统

(1)串联系统

假设一个系统由n个子系统组成,当且仅当所有的子系统都有能正常工作时,系统才能正常工作,这种系统称为串联系统。如果系统的各个子系统的可靠度分别用R1,R2…Rn 表示,则系统的可靠度为:

(2)并联系统

假如一个系统由n个子系统组成,只要有一个子系统能够正常工作,系统就能正常工作,这种系统称为并联系统。如果系统的各个子系统的可靠度分别用R1,R2…Rn 表示,则系统的可靠度为:

(3)模冗余系统

m模冗余系统由m(m=2n+1,n>1)个相同的子系统和一个表决器组成,经过表决器表决后,m个子系统中占多数相同结果的输出作为系统的输出。在m个子系统中,只有n+1个或n+1个以上子系统能正常工作,系统就能正常工作,输出正确结果。假设表决器是完全可靠的,每个子系统的可靠性为R 0 ,则m模冗余系统的可靠度为:

11.3 可靠性设计概述

所谓可靠性设计:就是尽可能采用某种措施,确保系统尽可能少的出错,出错后尽早的恢复

提高系统可靠性的技术可以分为避错(排错)技术和容错技术。

11.3.1 运行前:避错技术

避错是通过:

  • 技术评审

  • 系统验证

  • 正确性证明等技术

在系统正式运行之前避免、发现和改正错误。

11.3.2 运行前:降低复杂度设计

越是简单的系统,越是不容易出错。

越是复杂的系统,越是容易出错。

11.3.3 运行期:检错技术 =》人工恢复

  • 异常检查

  • 关键分支增加log

  • 报警、告警

11.3.4 运行期:容错(包容出错、允许出错)技术 =》纠错技术 =》 自动化恢复

容错是指系统在运行过程中发生一定的硬件故障或软件错误时,仍能保持正常工作而不影响正确结果的一种性能或措施。

容错技术主要是采用冗余方法来消除故障的影响。

11.4 冗余技术详见(原理:并行设计)

11.4.1 冗余的类型

冗余是指在正常系统运行所需的基础上加上一定数量的资源,包括信息、时间、硬件、和软件。

冗余是容错技术的基础,通过冗余资源的加入,可以使系统的可靠性得到较大的提高。

主要的冗余技术有结构冗余(硬件冗余和软件冗余)、信息冗余、时间冗余和冗余附加四种。

(1)结构冗余

结构冗余是常用的冗余技术,按其工作方式,可分为静态冗余、动态冗余和混合冗余三种。

  • 1)静态冗余(少数服从多数)。静态冗余又称为屏蔽冗余或被动冗余,常用的有三模冗余和多模冗余。静态冗余通过表决和比较屏蔽系统中出现的错误(非真正性的错误,误检)。

  • (2)动态冗余(火线提拔)。动态冗余又称为主动冗余,它是通过故障检测、故障定位及故障恢复等手段达到容错的目的。其主要方式是多重模块待机储备,当系统检测到某工作模块出现错误时,就用一个备用的模块来顶替它并重新运行。各备用模块在其待机时,可与主模块一样工作,也可不工作。前者叫做热备份系统(双重系统),后者叫做冷备份系统(双工系统、双份系统)。

  • (3)混合冗余。混合冗余技术是将静态冗余和动态冗余结合起来,且取二者之长处。它先使用静态冗余中的故障屏蔽技术,使系统免受某些可以被屏蔽的故障的影响。而对那些无法屏蔽的故障则采用主动冗余中的故障检测、故障定位和故障恢复等技术,并且对系统可以作重新配置。

(2)信息冗余

信息冗余是在实现正常功能所需要的信息外,再添加一些信息,以保证运行结果正确性的方法。这种冗余信息的添加方法是按照一组预定的规则进行的。符合添加规则而形成的带有冗余信息的字称为码字,而那些虽带有冗余信息但不符合添加规则的字则称为非码字。当系统出现故障时,可能会将码字变成非码字,于是在译码过程中会将引起非码字的故障检测出来,这就是检错码的基本思想。

(3)时间冗余

时间冗余是以时间(即降低系统运行速度)为代价以减少硬件冗余和信息冗余的开销来达到提高可靠性的目的。

时间冗余的基本概念是重复多次进行相同的计算,或称为重复执行(复执),以达到故障检测的目的。

(4)冗余附加

冗余附加是指为实现上述冗余技术所需的资源和技术,包括程序、指令、数据,以及存放和调用它们的空间等。

11.4.2 冗余系统处理的十大步骤

一个较为完整的冗余系统,在处理运行中出现的故障时,大致有以下十个步骤:

(1)故障检测。

故障检测一般可分为两类,分别是联机检测和脱机检测。

前者提供了实时检测的能力,这种检测工作与系统的正常工作同时进行;

后者在进行检测时,系统必须停止正常工作。

(2)故障屏蔽。

这与故障检测正好相反,它不是将故障检测出来,而是将出现的故障屏蔽起来,使系统不受故障的影响。

(3)故障限制。

限制故障影响的范围,防止已发生的故障影响到系统的其它部分

(4)复执。

这是一种检测瞬时性故障的有效措施,它可以提高系统抗瞬时性故障干扰的能力。

(5)故障诊断。

在故障检测的基础上,对故障进行定位。这对以后的修复、重配置等过程有很重要的意义。

(6)系统重配置。

若故障一旦被检出并定位,系统应有能力将发生故障的子系统替换下来,或将故障子系统与其他子系统隔离开来。当故障子系统被替换下来后,系统仍应能保持正常运行,只是系统运行速度下降、功能减弱。这一现象称为系统降级使用。

(7)系统恢复。

当检测出故障,必要时在系统重配置后即可消除故障引发的差错。这时,系统应能返回到出现故障断点前的情况继续运行。这个过程称为系统恢复。故障的恢复策略一般有两种,分别是前向恢复和后向恢复。

前向恢复是指使当前的计算继续下去,把系统恢复成连贯的正确状态,弥补当前状态的不连贯情况;

后向恢复是指系统恢复到前一个正确状态,继续执行。

(8)系统重新启动。

如果系统由于出现过多的故障而造成大量的错误,以致破坏了许多无法恢复的信息时,就不能再使用上述的系统恢复的办法,而必须重新启动。

重新启动可分为热启动和冷启动。

前者是在部分信息遭到破坏但还有一部分可以利用的情况时使用,

而后者则是在几乎所有信息均遭破坏的情况下使用。

(9)修复。

凡是已确定有故障的子系统必须进行修复。修复可分为脱机修复和联机修复两种。若要修复的子系统卸下后对系统影响不大,或者修复这些子系统时系统必定会停机,就使用脱机修复。联机修复是指系统能自动启用备份子系统替代有故障的子系统,并保持系统继续运行,然后再修复切换下来的故障子系统。

(10)系统重组合。

当上述各步完成后,系统必须重新组合,以便完全恢复正常运行。

11.4.3 软件冗余设计

软件容错的基本思想是从硬件容错中引伸而来,利用软件设计的冗余和多样化来达到屏蔽错误的影响,提高系统可靠性的目的。

软件容错的主要方法是提供足够的冗余信息算法程序,使系统在实际运行时能够及时发现程序设计错误,采取补救措施,以提高系统可靠性,保证整个系统的正常运行。

11.4.3.1 N(大于等于2)版本的冗余:

N版本程序设计是一种静态故障屏蔽技术,采用前向恢复的策略。

N版本程序的设计思想是用N个具有相同功能的程序同时执行一项计算,结果通过多数表决来选择。

  1. N版本与通常软件开发过程的区别

与通常软件开发过程不同的是,N版本程序设计增加了三个新的开发阶段,分别是相异成份评审、相异性确认和背对背测试。

  • (1)相异成份评审。每个版本的工作组均接收到一份相同的SRS。为了保证相异性,这些工作组之间不允许进行任何形式的交流,有关SRS的问题只能在工作组和项目管理人员之间进行交换,这种交换是通过问题单的形式进行的。对于各工作组提出的问题,由项目管理人员组成的SRS评审委员会对每个问题单进行研究。若是对SRS理解不正确,则向有关工作组进行解释;若是SRS本身问题,则修改SRS,并通知所有工作组。

  • (2)相异性确认。相异性确认在相异成份详细设计后进行,其目的是对相异性进行评估。

  • (3)背对背测试。使用同样的测试数据对N版本程序进行测试,将N个版本程序的运行结果进行比较,用以发现版本中的软件故障。

2.其他需要注意的问题

与通常的软件开发相比,除了开发过程不同之外,N版本程序设计还需要注意以下问题:

  • (1)N版本程序的同步。由于各种不同版本并行执行,有时甚至在不同的计算机中执行,必须解决彼此之间的同步问题。N版本程序的同步机制除通常的帧同步之外,还有事件同步机制,以保证输入一致性和交叉检查点的正常工作。在N版本程序的同步机制中,需要引入超时处理,以解决失步问题。

  • (2)N版本程序之间的通信。由于N版本程序设计的独立性,不同版本的数据表示可能是不同的,因此,在N个版本程序之间进行数据通信时,必须进行数据变换。可将N个版本通信接口处的数据规定为一种独立于各个版本的统一的数据格式,任一版本发送数据时,需将该版本的内部数据表示转换为统一的数据表示;当任一版本接收其他版本的数据时,需将统一的数据表示变换为内部所需的数据表示。

  • (3)表决算法。在N版本程序设计中,通常有三种表决算法,分别是全等表决(主要适用于布尔量的表决)、非精确表决(允许设置一个偏差,主要适用于数值量的表决)和Cosmetie表决(适用于字符串的表决)。

  • (4)一致比较问题。在进行有限精度运算的情况下,计算的结果与所使用的特定算法和计算的顺序有关,在进行计算量比较时(例如,将某计算量与一常量进行比较),虽然这些计算量能满足SRS要求,但比较结果可以全然不同,最终导致在N版本表决时不能得出正确的结果。解决方法是将需要进行比较的计算量进行一次交叉表决,其缺点是降低了N版本程序的相异性,并使系统的实时性变差。

  • (5)数据相异性。软件的故障往往仅在数据空间的个别点发生,当对这些个别点进行修正后,则软件仍可正常工作。

11.4.3.2 恢复块方法

恢复块方法是一种动态故障屏蔽技术,采用后向恢复策略

恢复块方法提供具有相同功能的主块和几个后备块,一个块就是一个执行完整的程序段,主块首先投入运行,结束后进行验证测试,如果没有通过验证测试,系统经现场恢复后由后备块1运行。后备块1运行结束后也进行验证测试,如果没有通过验证测试,系统经现场恢复后由后备块2运行。重复这一过程,可以重复到耗尽所有的后备块,或者某个程序故障行为超出了预料,从而导致不可恢复的后果。

一个主、多个从,同时进行并行检测。只有主块发现不合格时,才启动后备块的检查。

应用场合:极高要求的控制系统,如高铁控制系统、如银行系统,如数据库系统等等。

1.验证测试

恢复块方法依赖于一个裁决者,那就是验证测试(可接受测试),由它来决定同一算法不同实现的计算结果是否正确。带有恢复块的系统被分成故障可恢复的块。整个系统就由这些容错块组成。每一块包含至少一个一级模块、一个二级模块和一个例外处理模块,以及一个验证测试模块。

2. 与N版本程序设计的比较

11.4.3.3 防卫式程序设计:主动性错误检查与恢复

防卫式程序设计是一种不采用任何传统的容错技术就能实现软件容错的方法,对于程序中存在的错误和不一致性,防卫式程序设计的基本思想是通过在程序中包含错误检查代码和错误恢复代码,使得一旦发生错误,程序就能撤消错误状态,恢复到一个已知的正确状态中去。

其实现策略包括错误检测破坏估计错误恢复三个方面。

1.错误检测

在程序中插入状态断言,所谓状态断言,就是包含状态变量的逻辑谓词。这些断言可插入到一些重要的赋值语句之前,使得那些可能导致错误的赋值在变量状态发生变化之前被检测出来。

插入断言法主要适用于抽象数据类型,因为在抽象数据类型中,断言检查代码只需定义一次,就可对该类型变量的操作进行检查。

2.破坏估计

破坏估计的任务是在变量可能已经遭到破坏的情况下,判断破坏是否已发生,以及状态空间的哪些部分受到了错误的影响。

3.错误恢复

在防卫式程序设计中,既可使用前向恢复策略,也可使用后向恢复策略。

11.4.3.4 双机冗余备份

双机容错技术是一种软硬件结合的容错应用方案。该方案是由两台服务器和一个外接共享磁盘阵列及相应的双机软件组成。共享磁盘阵列是一个可选的部件,可以在两台服务器中分别采取RAID卡来取代。

双机主从热备份设计 平时一个主机提供服务,一个主机提供备用,当主系统出错,立即启动冗余版本,这种方式,资源浪费严重,在通信系统中,应用最多。

双机互备模式设计:平时两个主机各自完成不同的服务,只有在对方异常时,才接管对方的服务。

双机双工模式:平时完成相同的服务,由于是相同服务,因此,平时采用负载均衡的策略,当一个主机异常时,另一个主机自动接管对方的服务,即另一个主机承担所有的负载。

出错后自动恢复设计:纠错、重传、重发、复位、重启、切换

1.工作原理

在双机容错系统中,两台服务器一般区分为主系统和从系统(备用系统),两台服务器互为主从关系。每台服务器都有自己的系统盘(本地盘),安装操作系统和应用程序。每台服务器至少安装两块网卡,一块连接到网络上,对外提供服务;另一块与另一台服务器连接,用以侦测对方的工作状况。当一台服务器出现故障时,另一台服务器主动替代工作,保证网络服务不间断。

双机容错系统采用“心跳”方法保证主系统与备用系统的联系。

所谓心跳,是指主从系统之间相互按照一定的时间间隔发送通信信号,表明各自系统当前的运行状态。一旦心跳信号表明主机系统发生故障,或者备用系统无法收到主系统的心跳信号,则系统的高可用性管理软件认为主系统发生故障,立即将系统资源转移到备用系统上,备用系统替代主系统工作,以保证系统正常运行和网络服务不间断。

2.工作方式

双机容错系统根据两台服务器的工作方式不同,可以有三种不同的工作模式,分别是双机热备模式、双机互备模式和双机双工模式。

(1)双机热备模式(后补席位)。

正常情况下,一台服务器处于工作状态(主系统),另一台服务器处于监控准备状态(备用系统)。如果没有采用共享磁盘阵列,则用户数据同时往两台服务器中写入,以保证数据的即时同步。当主系统出现故障时,通过双机软件将备用系统激活,保证应用在短时间内完全恢复正常使用。当主系统修复后,可重新接入系统要回自己的应用。双机热备模式是目前采用较多的一种模式,典型应用有证券资金服务器或行情服务器等。

双机热备模式的主要缺点在于,备用系统长期处于后备的状态,存在一定的计算资源浪费。

(2)双机互备模式(相助模式)。

两台服务器均处于工作状态,为前端客户机提供各自不同的应用服务,并互相检测对方的运行情况。也就是说,两台服务器同时运行,但彼此均设为备用系统。当某一台服务器出现故障时,另一台服务器可以在短时间内将故障服务器的应用接管过来,从而保证了应用的持续性。

双机互备模式的主要缺点是对服务器的性能要求比较高。

(3)双机双工模式(负载均衡模式)

双机双工模式是集群(cluster)技术的一种形式,两台服务器均处于工作状态,同时为前端客户机提供相同的应用服务,以保证整体系统的性能,实现负载均衡和互为备份

3.双机软件

在双机容错系统中,双机软件是必不可少的。一切故障的诊断、服务的切换和硬件的控制都由双机软件来实现。双机软件通过侦测网卡或两台服务器之间互连的串口线,进行两台服务器的状态诊断,一旦主系统出现故障,双机软件立即激活备用系统,接管虚拟IP和共享磁盘阵列的控制权,并启动备用系统中的服务对外工作,从而保证系统的实时性和可靠性

11.4.4 集群技术

集群技术就是将多台计算机组织起来进行协同工作,它是提高系统可用性和可靠性的一种技术。在集群系统中,每台计算机均承担部分计算任务和容错任务,当其中一台计算机出现故障时,系统使用集群软件将这台计算机从系统中隔离出去,通过各计算机之间的负载转嫁机制完成新的负载分担,同时向系统管理人员发出警报。

集群技术是将多台同构或异构的计算机用集群软件连接在一起,组成一个高度透明的大型计算机群,其中单个的计算机系统称为节点(node)。

11.4.4.1 集群系统的特点

(1)可伸缩性。

采用集群技术,当用户需要扩展系统计算能力时,系统能在不降低服务质量的前提下进行扩展。一般只需购买新的计算机,将其加入到集群系统中即可,而不需要将现有的计算机更换为高性能的服务器。

(2)高可用性。

集群系统的可靠性与单机系统相比较高,在提高了系统的可靠性的同时,可以大大减小由于故障造成的停运。集群系统在部分硬件和软件发生故障时,整个系统仍高度可用,可以将系统停运的时间减到最小。

(3)可管理性。

集群系统能够管理大规模和物理分散的节点。

(4)高性价比。

集群系统能够以最少的投资获得最大的性能。在达到同样性能的条件下,采用计算机集群比采用同等运算能力的大型计算机具有更高的性价比。

(5)高透明性。

集群系统对用户是透明的,在用户看来,集群是一个系统,而非多个计算机系统。当集群系统的节点发生变化时,上层应用无需修改或尽可能少修改。

11.4.4.2 资源管理与调度

资源管理与调度系统是集群技术中一个非常重要的方面。从系统的角度来看,集群系统的资源使用率是最重要的问题。系统资源率使用越高,说明系统吞吐能力越大,资源共享的效果也越好。

11.4.4.3 集群的分类

(1)高性能计算集群。

高性能计算集群以解决复杂的科学计算问题为目的,其处理能力与真正的超级并行机相等,并且具有优良的性价比。高性能计算集群是计算机科学的一个分支,致力于开发超级计算机,研究并行算法和开发相关软件。

高性能计算主要研究两类问题:

第一类是大规模科学计算问题;

第二类是存储和处理海量数据问题。

(2)负载均衡集群。

负载均衡集群为企业需求提供了更实用的系统,集群中所有的节点都处于活动状态,它们分摊系统的工作负载。负载均衡集群使负载可以在计算机集群中尽可能平均地分摊处理,对于运行同一组应用程序的大量用户,每个节点都可以处理一部分负载,并且可以在节点之间动态分配负载,以实现平衡。

(3)高可用性集群。

高可用性集群致力于使计算机系统的运行速度和响应速度尽可能快,它们经常使用在多台计算机上运行的冗余节点和服务,用来相互跟踪。为保证集群系统整体服务的高可用性,需要考虑计算机硬件和软件的容错性。如果高可用性集群中的某个节点发生故障,则将由另外的节点代替它。整个系统环境对于用户是透明的,对于用户而言,集群系统永远不会停机

11.4.4.4 高性能计算集群

高性能计算集群是指以提高科学计算能力为目的计算机集群技术,它是一种并行计算集群的实现方法。并行计算是指将一个应用程序分割成多块可以并行执行的部分,并指定到多个处理器上执行的方法。高性能计算集群系统是利用高速互连网络将一组PC机(或工作站)连接起来,在并行程序设计和集成开发环境支持下,统一调度和协调处理,实现高效并行处理的系统。

1.主要特点

(1)系统开发周期短。

由于高性能计算集群系统大多采用商用工作站和通用局域网络, 使节点计算机的管理相对容易,可靠性高。开发的重点在通信和并行编程环境上,既不用重新研制计算节点,又不用重新设计操作系统和编译系统,这就节省了大量的研制时间。

(2)用户投资风险小。

用户在购置巨型机或MPP系统时很不放心,担心使用效率不高,系统性能发挥不好,从而浪费大量资金。而高性能计算集群系统不仅是一个并行处理系统,它的每个节点同时也是一台独立的计算机,即使整个系统对某些应用问题并行效率不高,它的节点仍然可以作为单个计算机系统使用。

(3)系统价格低。

由于生产批量小,巨型机或MPP的价格都比较昂贵,而工作站或PC机是批量生产出来的,因而售价较低。由数十台PC机(或工作站)组成的高性能计算集群系统可以满足相当多数应用的要求,而价格却比较低。

(4)节约系统资源。

由于高性能计算集群系统的结构比较灵活,可以将不同体系结构,不同性能的计算机连在一起,这样就可以充分利用现有设备。单从使用效率上来看,高性能计算集群系统的资源利用率也比单机系统要高得多。另一方面,即使用户设备更新,原有的一些性能较低或型号较旧的机器在高性能计算集群系统中仍可发挥作用。

(5)系统扩展性好。

从规模上说,高性能计算集群系统大多使用通用网络,系统扩展容易;从性能上说,高性能计算集群系统对大多数中、粗粒度的并行应用都有较高的效率。

(6)用户编程方便。

在高性能计算集群系统中,程序的并行化只是在原有的串行程序中,插入相应的通信原语。用户使用的仍然是熟悉的编程环境,不用适应新的环境,这样就可以继承原有软件财富,对串行程序做并不很多的修改。

2.通信技术

通信子系统是高性能计算集群系统的重要组成部分,它完成系统中各节点之间数据传递的功能,其性能的好坏直接影响到并行计算的加速比和效率。

高性能计算集群系统是一个松耦合的计算机系统,具有可扩展性好、性能/价格比高的特点,但网络带宽通常较低。通信子系统的性能是整个高性能计算集群系统的薄弱环节。要提高通信系统的性能,可以采用新型高速网络,提高网络带宽,或者设计新的通信协议,降低通信延迟。

3.并行程序设计

并行程序设计语言是并行系统应用的基础,已有的高性能计算集群系统大多支持Fortran、C和C++,实现的方法主要是使用原有顺序编译器链接并行函数库,或者加入预编译。

4.负载均衡

在高性能计算集群系统中,一个大的任务往往由多个子任务组成。这些子任务被分配到各个处理节点上并行执行,称之为负载。当整个系统任务较多时,各节点上的负载可能产生不均衡现象,就会降低整个系统的利用率。这就是负载不平衡问题。负载不平衡问题解决得好坏,直接影响到并行计算的性能。

11.4.4.5 负载均衡集群

1.两种解决方案

服务器的处理能力和I/O已经成为提供应用服务的瓶颈,为了解决上述问题,采用高性能的主机系统(小型机或大型机)是可行的。但是,除了其价格昂贵、可扩展性差以外,这种主机系统在很多情况下也不能同时处理上百万个并发的请求。

另一种解决方法就是采用集群技术,即利用多台计算机实现负载均衡集群。负载均衡集群在多节点之间按照一定的策略(算法)分发负载。负载均衡建立在现有网络结构之上,它提供了一种廉价有效的方法来扩展服务器带宽,增加吞吐量,提高数据处理能力。

2.负载均衡的分类

根据负载均衡的位置不同,可以将负载均衡分为客户端负载均衡和服务器端负载均衡。客户端负载均衡是指客户端的均衡器根据集群的负载情况,主动选择由集群中的哪台计算机为其提供服务;服务器端负载均衡又可根据执行负载均衡的方式不同,分为集中式负载均衡和分布式负载均衡。

3.负载均衡与调度

负载均衡和调度的任务是使得任务在集群各节点间得到尽可能合理的分摊处理,从而达到高效利用系统资源的目的。一般将组成集群的计算机分为处理节点和均衡节点两类。

负载均衡的一个要点是节点的资源使用状态。由于负载均衡集群系统的最终目的是使系统中各节点的资源使用状态尽可能达到平均,因此,及时、准确地把握节点负载状况,并根据各个节点当前的资源使用状,态动态调整负载均衡的流量分布,是负载均衡与调度考虑的关键问题。

4.负载指标

衡量节点当前负载状况的度量方法和准则称为负载指标。理想的体现系统负载状况的指标应满足以下条件:

(1)测量开销低,这样才可以保证频繁测量以确保信息更新。

(2)能体现所有竞争资源上的负载。

(3)各负载指标在测量及控制上彼此独立。

11.4.4.6 高可用性集群

1.原理与应用

在高可用性集群系统中,多台计算机一起工作,各自运行一个或几个服务,各为服务定义一个或多台备用计算机。当某台计算机出现故障时,备用计算机便立即接管该故障计算机的应用,继续为前端的用户提供服务。

2.硬件组成

(1)服务器组。在高可用性集群系统中,每个节点的计算机必须有自己的CPU、内存和磁盘,每台计算机都需要安装操作系统和集群软件程序。

(2)对外提供服务的网络。高可用性集群系统中的计算机一般采用TCP/IP网络协议与客户端相连,每台计算机上都有自己的应用服务,客户端必须通过集群计算机中的网络通路来得到自己的服务。

(3)心跳信号通路。在高可用性集群系统中,每个节点必须有心跳接口,用于节点之间互相监视和通信,以取得备用计算机的工作状态。常见的心跳信号可通过串行通信线路(RS-232)、TCP/IP网络和共享磁盘阵列互相传递信息。心跳线路最好使用两条不同的通信线路,达到监视线路冗余的效果。

(4)数据共享磁盘阵列。在高可用性集群系统中,由于运行的都是关键业务,所以使用的存储服务器都应该是企业级的存储服务器,这些存储服务器应具有先进技术来保证其数据安全。共享磁盘阵列是各节点计算机之间维持数据一致性的桥梁,各节点在集群软件的控制下不会同时访问共享磁盘阵列。

11.4.5负载均衡技术

11.4.5.1调度算法

(1)轮转算法。

轮转算法是一种经典的分配算法,该算法每次轮流将服务请求(任务)调度给不同的节点。该算法的优点是简单,它无需记录当前所有请求的状态,所以是一种无状态调度。轮转算法假定所有节点的处理性能均相同,而且不管节点的当前负载、请求个数和响应速度的差异,不适用于节点处理性能不一样的情况。另外,当各请求响应时间变化比较大时,轮转算法极易导致节点之间的负载不平衡。轮转算法的粒度是基于每个请求连接的,同一用户的不同请求会被调度到不同的节点上。

(2)加权轮转算法。

加权轮转算法是轮转算法的一个改进,其思想是首先按照各节点的性能分别指定不同权值,然后按权值来分配给节点相应的请求数量。加权轮转算法是按权值的高低和轮转方式把请求分配到各节点的,权值高的节点比权值低的节点处理更多的请求,相同权值的节点处理相同数目的请求。

(3)最小连接数算法。

最小连接数算法是一种根据各节点的负载状况来分配请求的算法,其基本思想是调度程序把每个新请求分配给当前活动请求数量最少的节点。最小连接数算法的优点是,当所有节点具有相同的处理能力时,算法把负载变化大的请求调度到多个节点上,所有处理时间比较长的请求不可能被调度到同一个节点上。但是,当各节点处理能力不同时,该算法并不理想。

(4)加权最小连接数算法。

加权最小连接数算法与加权轮转算法类似,只不过它是基于最小连接数来加权计算。各个节点用相应的权值表示其处理性能,在调度新请求时,尽可能使节点处理的请求数量与其权值成比例。

(5)基于局部性的最小连接数算法(Locality-Based Least Connections,LBLC)。

LBLC算法针对请求报文的目标IP地址进行负载均衡调度,算法的设计目标是在节点负载基本平衡的情况下,将相同目标IP地址的请求调度到同一个节点上,以提高各个节点的访问局部性和主存命中率,从而提高整个集群系统的处理能力。LBLC算法先根据请求的目标IP地址,找出该目标IP地址最近使用的节点,若该节点是可用的且没有超载,就将请求调度到该节点;若该节点不存在或该节点超载,且有节点处于其一半的工作负载,则用最小连接的原则选出一台可用的节点,将请求发送到该节点。

(6)带复制的基于局部性的最小连接数(Locality-Based Least Connections withReplication,LBLCR)算法。LBLCR算法也是针对目标IP地址进行负载均衡调度,它与LBLC算法的不同之处在于,它要维护从一个目标IP地址到一组节点的映射,而LBLC维护从一个目标IP地址到一个节点的映射。LBLCR算法先根据请求的目标IP地址,找出该目标IP地址对应的节点组,按最小连接的原则从该节点组中选出一个节点,若该节点没有超载,将请求发送到节点;若该节点超载,则按最小连接的原则从整个集群中选出一个节点,将该节点加入到节点组中,将请求发送到该节点。同时,当该节点组有一段时间没有被修改,将最忙的节点从节点组中删除,以降低复制的程度。

(7)目标地址哈希散列算法。

目标地址哈希散列算法是一种静态映射算法,通过一个散列函数将目的IP地址映射到一个节点。该算法先以请求的目的IP地址作为散列键,从静态分配的散列表中找出对应的节点,若该节点是可用的且未超载,就将请求发送到该节点;否则,返回空值。

(8)源地址哈希散列算法。

源地址哈希散列算法与目标地址哈希散列算法相似,只不过它以请求的源IP地址作为散列键。

(9)随机分配算法。

对于每个服务请求,通过随机选择的方式选择一个节点为其提供服务。随机分配算法也是一种实现简单、无状态的调度算法。

(10)加权百分比算法。

加权百分比算法考虑了节点的利用率、内存利用率、硬盘速率、进程个数、分配的任务数等,使用利用率来表现剩余处理能力,并通过对每个因素选择一个影响系数来表现对节点整体工作性能产生的作用。该算法实现难度在于选择各个因素的系数。系数选择得好,集群系统可以达到较好的负载均衡效果;否则,可能还不如其他算法。

11.4.5.2技术实现

在实际应用中,比较常用的负载均衡实现技术主要有以下几种:

(1)基于特定软件的负载均衡。

很多网络协议都支持重定向功能,例如,在HTTP协议中支持Location指令,接收到这个指令的浏览器将自动重定向到Location指明的另一个URL上。由于发送Location指令比起执行服务请求,对节点的负载要小得多,因此,可以根据这个功能来设计一种负载均衡的节点。当节点认为自己负载较大的时候,就不再直接给浏览器发送所请求的网页,而是发送一个Location指令,让浏览器在计算机集群中的其他节点上获得所需要的网页。

(2)基于DNS的负载均衡。

基于DNS的负载均衡是在DNS服务器中为同一个主机名配置多个IP地址,在应答DNS 查询时,DNS 服务器对每个查询将以DNS文件中主机记录的IP地址按顺序返回不同的解析结果,将客户端的访问引导到不同的节点上去,使得不同的客户端访问不同的节点,从而达到负载均衡的目的。

(3)基于NAT(Network Address Translation,网络地址转换)的负载均衡。

基于NAT的负载均衡将一个外部IP地址映射为多个内部IP地址,对每次连接请求动态地转换为一个内部节点的地址,将外部连接请求引到转换得到地址的那个节点上,从而达到负载均衡的目的。基于NAT的负载均衡是一种比较完善的负载均衡技术,起着NAT负载均衡功能的设备一般处于内部节点到外部网之间的网关位置,例如,路由器、防火墙、四层交换机、专用负载均衡器等,均衡算法也较灵活,例如,使用随机选择、最小连接数等来分配负载。

(4)反向代理负载均衡。

反向代理负载均衡是将来自Internet上的连接请求以反向代理的方式动态地转发给内部网络上的多个节点进行处理,从而达到负载均衡的目的。反向代理负载均衡既能以软件方式实现,也能在高速缓存器和负载均衡器等硬件设备上实现。反向代理负载均衡可以将优化的负载均衡策略和代理服务器的高速缓存技术结合在一起,提升静态网页的访问速度,提高系统性能。另外,由于网络外部用户不能直接访问真实的节点计算机,反向代理负载均衡还具备额外的安全性(同理,基于NAT的负载均衡也有此优点)。

(5)混合型负载均衡。

在有些大型网络中,由于多个计算机集群内硬件设备、各自的规模、提供的服务等的差异,可以考虑给每个集群采用最合适的负载均衡方式,然后又在这多个集群之间再一次进行负载均衡(即将每个集群系统当做新的集群中的一个节点),从而达到最佳的性能。

11.4.5.3 进程迁移技术

进程迁移是指当进程运行时,在源节点和目标节点之间转移进程的行为。由于在这个过程中转移的是活跃进程,因此又称为抢占式进程迁移。一般地,进程在迁移之前必须停止,并使进程的状态能够被获取并转移到目的节点,在目的节点,进程的执行信息被重建并重新开始执行。

1.进程迁移的作用

(1)负载共享。

为了让一个进程使用尽可能多的CPU时间,需要将它迁移到能提供大部分指令和I/O操作的节点上执行。

(2)提高通信性能。

如果一个进程需要与其他进程频繁地进行通信,这时将这些进程放置得近一些,就会减少通信的负担,具体的方法就是将一个进程迁移到其他进程所在的节点上。

(3)可用性。

当某个节点失效时,可以将进程迁移到其他节点上继续执行,这样,就保证了系统在遇到灾难时的可用性。当失效的节点修复了错误,重新进入集群系统时,需要将某些该节点上原来运行的进程重新迁移回来。

(4)重新配置。

当对集群进行管理时,有时需要将服务从一个节点移到另一个节点,透明的进程迁移可以在不停机的情况下迁移服务。

(5)使用集群中某些节点的特殊能力。

如果某个进程能够从集群中的某个特定节点上受益,它就应该在那个节点上执行。例如,进行数值计算的程序能够通过使用数学协处理器或超级计算机中的多个处理器来缩短程序执行时间。

2.进程迁移算法

(1)贪婪复制算法。

先挂起源节点进程,然后传输进程的全部状态(包括一些打开的文件和执行状态等)到目的节点后,再启动目的节点进程。这种算法比较简单、易于实现,但也有不足之处,例如,延时较长,有些冗余数据传输到目的节点后,实际上并没有用,造成网络负担。

(2)惰性复制算法。

先传输进程在目的节点上重新执行所需要的最小相关信息,然后在目的节点上启动进程。与贪婪复制算法相比,它传输的是必需的、最少量的状态集合,这些信息通常是进程的部分(或全部)核心数据(包括打开的文件、执行状态和当前目录等)和一小部分地址空间。当进程在目的节点上的执行需要其余状态信息时,再传输这些信息。该算法的优点是延迟小、网络负担少,缺点是会导致对源节点的剩余依赖性,不能提高系统的可靠性,因此,在集群系统中一般不使用该算法。

(3)预复制算法。

在进程的部分(或全部)地址空间从源节点传输到目的节点后,源节点才挂起进程并传输核心数据。也就是说,当进程在源节点上执行时,并行传输地址空间到目的节点上。进程挂起后,再传输核心数据和一些先前已经传输而后被改变的地址空间。这种算法虽然降低了进程挂起的时间,避免因挂起时间长而导致的开销和错误,但是会将某些信息复制两次,总的传输时间反而加长。

(4)基于检查点的迁移算法。

前面三种算法都是假设在源节点没有故障的情况下将进程挂起,从而完成进程的迁移。如果源节点发生故障,将不能得到进程的状态信息,导致迁移失败。基于检查点的迁移算法利用检查点保存进程信息,在源节点发生故障的情况下,可以根据检查点信息在目的节点重构进程,使其继续运行。因此,基于检查点的迁移算法可以提高系统的可靠性,减小时间开销,达到实时性。

3.进程迁移的通信管理

进程迁移主要涉及到两个阶段的通信管理,分别是迁移过程中的通信管理和迁移之后的通信管理。

(1)迁移过程中的通信。

当某进程正在迁移时,如果有其他进程与之通信,可能由于无法正确找到接收进程的位置而导致通信失败,为避免这种情况的发生,在集群系统中一般采用三种方法来处理。第一种方法是在进程迁移之前,发送特殊消息,通知其他进程此进程将要迁移,并得到它们的认可,保证在迁移过程中不发送任何消息给迁移进程;第二种方法是在迁移过程中,其他进程仍然发送消息给源节点,源节点缓存所有收到的发给迁移进程的消息,待迁移结束后,再转发这些消息;第三种方法是在迁移过程中,源节点拒绝接收发给迁移进程的消息,并要求发送者稍后将消息重发到目的节点。

(2)迁移之后的通信。

进程迁移到目的节点后,如何恢复通信,一般也有三种处理方法。第一种是消息重定位方法,

11.4.6 通信信息冗余

11.4.5.1 通信容错:纠错算法

在发送数据时,通过冗余编码技术,对发送的数据进行冗余编码。

在接收数据时,通过检错技术和纠错技术,对接收到的数据进行纠错。

11.4.5.2 通信容错:应答重传机制

在发送数据时,接收方需要给出是否正确接收的应答。只有对方正确接收时,发送方才会认为放弃已经发送的数据,否则重传数据。根据重传机制不同,有分为:

  • 停等协议机制

  • 滑动窗口机制

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/69888
推荐阅读
相关标签
  

闽ICP备14008679号