容错没有性能瓶颈

在信息技术日新月异的今天,医疗机构越来越依赖信息系统来开展业务,对于门诊、临床等关键业务应用而言,提供7×24×365连续运营至关重要。目前大多数医院所采用双机热备、集群服务器在可靠性方面存在着不小的安全隐患,加之不少医院专业人员有限,在这种情况下,具有更高安全级别的容错服务器解决方案更加备受关注。

在功能定位上,x86被定位于通用服务器,安腾被定位在关键业务应用服务器。如果进一步细分,x86又可分为单路、双路和多路服务器,对应英特尔的处理器是3000、5000和7000系列,此外,还有一个特殊的6000系列,它是7000系列在双路应用的延伸。其中,采用5000系列处理器的双路服务器是市场的主流,应用在大多数的应用场合,其价格也比较便宜,在万元左右。与之相比,采用7000系列处理器的多路服务器,价格要高出很多,被定位在高端应用,对可靠性有很高的要求的应用场合。目前,除了金融行业用户核心业务之外,越来越多用户开始选择x86服务器承担各种关键应用,其中高端的多路服务器成为了用户的选择。

最近系统学习了一个系统可靠性及其相关知识,今天在这总结一下。

容错是指服务器对于错误的容纳能力,是应用过程中对于服务器稳定性追求的一个目标。为了这样一个目标,服务器集群技术、双机冗余服务器方案和单机容错技术这三种实现方法都在被使用。但集群技术、双机冗余服务器方案由于依赖于软件的特性,其设计更为复杂,并且维护成本较高,而容错服务器的思路就是把所有运算器CA)、控制器CC)、存储器M和输入/输出装置这些部件全部采用冗余硬件设计。两个部件共运行同一个任务,以此来提高系统的运行可靠性。这种冗余硬件的设计并不难,但是最为困难的是如何保证计算和数据在硬件中的同步Lockstep),这是美国容错技术有限公司Stratus)的核心专利技术,也是其驰骋容错技术领域30年不败的关键。 

为了进一步提升可靠性,采用两台相同型号、配置的多路服务器构建集群方案成为了普遍的一种选择。双机集群是一种由集群软件控制的软件冗余方案,但其中的一台设备出现故障的时候,由另外一台设备接替故障硬件工作,以期达到提高可靠性的目的。但在实际工作中,双机集群对管理要求比较高,即使切换成功,也还是需要一定的故障恢复时间,期间会导致业务中断,如果切换失败,所需要的故障恢复时间将更长,因此对于一些关键业务需求而言,双机集群方案不能够满足高可靠性的要求。

首先,什么是系统的可靠性呢?系统的可靠性是指在规定的时间内及规定的环境下完成规定功能的能力,也就是系统的无故障运行概率。

7×24小时不间断,stratus可以保证

与之相比,容错方案是一个理想的方案。它是一种硬件冗余的技术,借助独特的锁步技术,从体系结构上对系统进行保护。容错不仅能够做到服务器级别的容错,还可以实现对内存、I/O数据的容错。在双机集群方案中,如果一台服务器突发故障宕机,那么这台服务器设备中内存的数据,以及I/O中等待读写的数据,是没有办法进行同步保护的,只能够借助数据库数据回滚等软件技术进行重建,虽然不会给交易带来损失,但业务恢复、重建是需要时间的,这也是双机集群不能够保持业务连续的原因。

我会从以下几个方面来归纳主要内容:

美国stratus容错公司生产的容错服务器在一些关键性领域里应用非常广泛,例如:电信、机场、银行、冶金行业、安全、医院HIS系统、公安、电力行业、大的零售业等一切要求高可用性的行业。 

与之相比,容错技术可以确保处理器、内存、I/O数据,做到每个处理器时钟周期保持严格同步,因此,当单一功能部件突发故障时,业务不会因此而中断。这种情况下,虽然失去了容错,但系统不会中断,业务不会受影响。当更换故障部件时,系统恢复容错工作状态。但用户不采用容错服务器方案,其中性能瓶颈是一个普遍关注的话题。当前容错服务器产品主要是基于双路服务器,较之多路似乎存在性能瓶颈。

  1. 故障模型

  2. 可靠性模型

  3. 可靠性指标

  4. 可靠性设计

而现实是,双机应用仍然是现在的主流,凡涉及关键业务应用的领域,双机冗余都是一个重要的解决方案。但是双机冗余服务器方案不能够解决软件的故障。在实际运行过程中,有些时候数据库莫名其妙打不开了,在这种情况下,只有重新安装数据库,没有其他好的办法,而这不仅可能造成数据的丢失,也会在时间上无法满足医院的要求,这对医院是致命而不可接受的。

容错服务器厂商可以提供多路服务器解决方案吗?答案是肯定的。美国容错技术有限技术顾问高峰表示,多路服务器容错并不存在技术上的障碍。历史上,美国容错就曾经提供了多路RISC处理器的方案;目前之所以没有考虑x86多路服务器容错方案,主要是价格的考虑,用户往往很难承受。高峰表示,目前双路8核处理器,其性能相对于原来16路处理器的性能,可以满足用户的绝大部分需求。从用户实践看,容错方案并不存在所谓性能的瓶颈。这也是美国容错没有提供多路服务器容错的原因。他表示,不提供多路不是技术的原因,而是基于市场策略的选择,换句话说,没有提供多路容错的必要。

故障模型

图片 1
上海中医药大学附属曙光医院信息中心刘珉

高峰表示,用户对性能的担心,有时不是真的来自性能,而是来自对可靠性的考虑。从产品角度,多路服务器较之双路的确具有更高可靠性,这也是用户青睐多路服务器的原因。然而容错方案的可靠性不是依靠产品本身的可靠性,而是从系统的角度,依靠体系架构来解决问题。从目前技术水平看,两台双路服务器,相同功能部件同时发生故障的概率是非常低的,因此,容错服务器完全可以满足用户对可靠性的要求。

系统故障是指硬件或者软件的错误状态,一般引进故障的原因是这些:部件的失效、环境的物理干扰、操作错误或不正确的设计。

在医院,7×24小时的不间断运行是对硬件与系统的考验,尤其是在关键业务上。上海中医药大学附属曙光医院曾使用stratus容错服务器很多年,信息中心刘珉主任说:对医院而言,信息主管最关心的是系统的安全稳定以及数据的准确性,在容错服务器中,由于采用冗余部件同时运行同一应用任务,这样当两个系统产生不一样计算结果时,系统就会察觉,并通过技术手段对于计算错误进行校验,从而提高应用的准确性。stratus容错服务器在我院使用的8年中,从未出现过停顿15分钟以上的故障,确实能够满足我们在关键业务上的需求。

除了容错之外,实际上,容错方案更是提供了可信计算。高峰表示,通常情况下,处理器计算不会出现问题。但作为电子器件,难免会受到各种因素的干扰,难免会产生高低电平的判断错误,计算机是依靠高低电平来判断“0”或者“1”,一旦出现错误,这种错误是不易察觉的。也就是说,计算机也会犯错误。对于容错而言,它是借助“锁步技术”,对两台设备计算结果进行比对,只有一致才被认可,因此可以有效避免意外错误的发生,这是容错方案特有的性能。对于容错系统的用户而言,可信计算可算是一种增值服务,是对用户高可靠性的一种额外奖赏。

按照时间的长短,故障可以分为:永久性、间歇性、瞬时性。

图片 2
哥伦比亚大学基金会•上海德济医院信息主管张志翔

故障的级别有:逻辑级故障、数据结构级故障、软件故障和差错故障、系统级故障。

哥伦比亚大学基金会•上海德济医院信息主管张志翔主任介绍说:由于私立医院在人力等方面的投入较之大型三甲医院不足,因此在硬件上更希望能够尽量降低人力和维护成本,并能够稳定安全的运行。stratus容错服务器正好能够满足我们在硬件安全高效的要求。

 

对于容错服务器而言,虽然在理论上存在着两个相同部件同时损坏的情况,但是随着硬件水平的提高,这种概率是比较低的。容错硬件的设计一方面可以防止硬件的单点故障,同时也可以防止硬件所造成的计算错误,并对此做出校正。

可靠性模型

图片 3
上海市卫生局信息中心高级工程师沈惠德

与故障模型想对应的,就是系统的可靠性模型。常用的有以下三种:时间模型、故障植入模型和数据模型。

上海市卫生局信息中心高级工程师沈惠德很形象地将双机与容错进行了比喻。他说:如果将服务器比作人的器官,那么双机冗余像是器官移植,会出现“排异”的可能性,而容错服务器更像是自身的一套器官,不会出现排异,因此其安全可靠性更高。在他看来,医院信息化的不断推进对安全的要求更高,随着对医院等级评测要求的提高,也将推动容错服务器的发展。

这三种模型暂时还没有看懂(晕)。

1+1>2,stratus可以做到

 

买一台stratus容错服务器,得到的不仅仅是一个硬件设备,还有伴随的高可靠性、更精确运算以及更优性价比。

可靠性指标

美国stratus容错服务器代理商之一上海复高计算机科技有限公司副总经理马俊华表示:stratus容错服务器部署更简单,可以大大减少软件成本;安全更有保障,能有效地保护动态数据不丢失。上海复高计算机科技有限公司系统集成部总经理汪国亮说:如果采用双机冗余方案,需要购买两套操作系统、两套数据库产品,那么其总体的投资与容错服务器方案相当,而系统的可用性方面,容错服务器显然更具有优势。

可靠性指标,主要有以下几个:

同为美国stratus容错服务器代理商的上海显亮数码科技发展有限公司总经理周彬彬说,应用容错服务器后,相比其他方式的“救火”行为,容错服务器将医院信息化底层无法预测的硬件故障预防,管理人员可以将更多的精力用于其他软件的运作与维护,可大大减少运维成本。

平均无故障时间(MTTF-Mean Time To
Failure)

根据国际著名咨询机构IDC所公发布的数据:容错服务器可用性是99.9998%,消除单点故障的集群,可靠性仅为99.99%,而IBM的大型机为99.995%。就技术而言,双机只能保证写入硬盘的数据,不能够对缓存数据进行有效保护,双机系统当硬件出现故障进行切换时,是要产生停顿的,与此同时,双机切换有可能不成功,如此以来,对于医院的窗口单位而言,就会对正常的医疗秩序产生影响,甚至引发群体性事件,影响医院整体形象。有与之相比,容错产品支持任意硬件热插拔,包括主板、CPU等关键性硬件,外界并感觉不到切换,系统可靠性大大提高,同时因为系统具备纠错能力,系统更加稳定。如果说集群技术可以减少停机,那么容错系统的目标是避免停机,在相同的条件下,容错系统显然更加稳定和安全。需要稍加说明的是,小型机虽然也是一种选择,但这会增加成本,同时也对企业的技术人员提出了比较高的要求。

它表示一个系统平均情况下,正常运行的时间。

目前,容错服务器推广应用还需要政府推动以及人们认知水平的提高。一个好消息是,越来越多的医院在选购stratus容错服务器,说明在医院的关键业务中,容错服务器更加适用。

与它相关的指标是“失效率”U,关系: U = 1 / MTTF。

平均故障修复时间(MTTR-Mean Time To
Fix/Repire)

平均每次修复所需要的时间

平均故障间隔时间(MTBF-Mean Time Between
Failure)

一看就知道,MTBF = MTTF + MTTR。

在实际情况下,一般MTTR都会比较小,所以我们近似地认为MTBF = MTTF。

MTTF是用来说明一个软件系统能够正常运行的时间的指标。它越大,说明该系统越可靠。计算方法很简单,

 

可靠性计算

一个系统的可靠性计算往往不能直接得出。这是因为计算机系统是一个复杂的系统,影响其可靠性的因素也非常复杂。所以我们需要为其建立适当的数据模型,把大系统划分为若干子系统,然后再根据一定原则进行组合计算。

这种计算方法,可以简化分析的过程。

对于系统的划分,我们可以把它分为:串联系统、并联系统、模冗余系统、混联系统。(其中模冗余系统是M个并联的子系统中,需要有N个以上的子系统能正常工作,整个系统才能正常工作。这种系统,常在并联后加上一个表决器。)

计算这些系统可靠性时,我们需要计算出每个子系统的失效率,然后根据概率的加法原则(串联系统)和乘法原则(并联系统)进行综合运算,最后得出整个系统的可靠性。

 

可靠性设计

本小节是整单的重点。

提高系统可靠性的方法,主要是两种:避错和容错。避错主要是指提前做一些措施,避免系统在运行中出现错误。而容错则是指系统在运行中部分组件出现错误,仍然不失效,可以继续运行;或者当数据、文件损坏或丢失后,系统可以自动将这些数据恢复到以前的状态,使系统能够继续正常运行。

测试就是最常用的一种避错技术。而容错则一般使用冗余来实现。

 

冗余技术

冗余技术是容错的主要手段。主是通过对资源的冗余,包括硬件、软件、信息、时间等,可以使系统的容错性得到较大的提高。

结构冗余

这里又分静态冗余和动态冗余。

静态冗余一般是指增加同样功能的部件,同时运行,最后由表决器对结果进行表决,以多数结果作为系统的最终结果。

动态冗余则是做一些多重的设备储备,当系统检测到某一部件失效时,启用相应的新部件代替它进行工作。这里有检测、切换和恢复的过程,所以称之为动态冗余。这些多余的设备储备,可与主模块一起工作,也可以不工作,分别称为热备份和冷备份。冷备份缺点是当主模块失效时,备份系统可能无法及时衔接上,因为备份机无法获取到原来机器上所有的数据。

其实,我们还可以结合以上两种冗余的优缺点,使用混合冗余的方式,对系统进行结构性冗余设计。

信息冗余

添加一些额外的信息用于保证其正确性。例如:纠错码。

时间冗余

类似结构冗余,不过这里是在同一设备上执行重复计算。

故障恢复策略

如果故障已经发生,则需要一定的方法来恢复故障。一般有两种恢复策略:向前和向后。

向前恢复是指不停止当前的计算,而把系统从不连贯的状态恢复为连贯的正确状态,需要有错误的详细说明。例如我们可以在系统发生故障时,把异常信息都捕获到并存储起来备案,然后尽量让系统继续执行。这也是平常最常用的策略。

后向恢复是把系统恢复到之前的一个状态,然后继续执行。这种方法比较简单,但是却造成程序运行的不连贯性,不适应一些高要求系统,如实时系统。

 

软件容错

主要有以下几种方式:

恢复块方法

这种方法是一种动态的故障屏蔽技术,采用的是后向恢复策略。它提供相同功能的主模块和多个备用模块,当主功能计算完成后需要进行验证测试,如果测试没有通过,则会使用备用模块进行计算,如果还是没有通过,则继续使用下一个备用模块。

设计时应该保证实现主块和备用块之间的独立性,使其不会相互影响。

N版本程序设计

此法是一种静态故障屏蔽技术,采用前向恢复策略。

采用多个相同功能的N份程序同时运行,使用表决器进行最后结果的表决。

重点在于:

N版本的程序设计应该使用不同的方法,如不同的设计语言、不同的开发环境和工具。

同时,由于N个程序同时运行,最后同时表决,所以需要解决多个程序间的并发性。

防卫式程序设计

此法的基本思想是在程序中包含错误检测代码。一旦错误发生,程序能撤销错误状态,恢复到一个已知和正确状态中去。包括错误检测、破坏估计和错误恢复三个方面。

这种方式主要是以软件的形式来容错,也就是说软件自身有较强的容错性,较为常用。