王青松 王光辉 朱林
摘 要: 软件可靠性对于软件系统来说是非常重要的质量属性。在项目实施过程中,保证应用软件具备稳定运行的能力、保障应用软件的可靠性是软件实施项目首先需要考虑的因素。在文联人事工作平台项目建设过程中通过采用数据库双机备份、改进的防卫式程序设计、相同功能多种设计实现思路、负载均衡集群的方式对提高软件系统的可靠性,对平台上线后平稳运行起到了非常重要的作用。
关键词: 软件可靠性;防卫式设计;双机备份;多版本;负载均衡
中图分类号: TP3 文献标识码: A DOI:10.3969/j.issn.1003-6970.2020.06.052
本文著录格式:王青松,王光辉,朱林. 软件可靠性设计的应用[J]. 软件,2020,41(06):253256
【Abstract】: Software reliability is a very important quality attribute for software system. How to improve reliability of application is the first factor when project is developing. Ability of running steadily is essential to computer application. During the construction of the personnel platform of CFLAC, database backup, Improved defensive programming, multiple design and implementation ideas of the same function, load balancing cluster are used, which is important to the reliability of this software system. The platform performs smoothly since it is online.
【Key words】: Software reliability; Defensive programming; Dual computer backup; Multi version; Load balancing
0 引言
軟件可靠性(software reliability)是软件系统在规定的时间和既定环境条件下按照需求要求完成规定功能的能力,也就是系统无故障运行的概率[1]。规定的时间是指软件上线运行后实际运行的时间;既定的环境条件是指直接或间接与软件运行相关环境及条件;规定功能是指按照用户需求提供给定的服务,软件产品所必须具备的功能。软件可靠性不但与软件存在的缺陷和(或)差错有关,而且与系统输入和系统使用有关。提高计算机应用系统可靠性的技术可以分为避错技术和容错技术。避错是预防和避免系统在运行中出错,一般的常用的避错技术主要是测试,进行较充分的测试,想尽可能的穷尽软件的错误,但是错误和故障是不可能穷尽的,容错就显得非常重要,常用的容错技术主要包括结构冗余、信息冗余、时间冗余、冗余附加技术等。不同的应用系统要根据自己业务及基于的软硬件的实际情况采取不同的设计方式,尽量提高系统的可靠性,保证运行的持续稳定运行。
在文联人事工作网络平台项目实施过程中,为实现系统的易用性、可扩展性、稳定性、良好的性能、可靠性等效用指标,在系统设计时,主要使用数据库双机热备、改进防卫式程序设计、多种设计实现方式、负载均衡保障系统无故障稳定运行。
1 软件可靠性设计
1.1 恢复块设计
恢复块设计是一种动态的故障屏蔽技术,一般采用后向恢复策略。如图1所示。
恢复块方法提供具有执行结果相同的功能模块的主块和若干个不同的备用块,一个块就是实现一个功能的模块、功能、函数或者程序段,主块首先
投入使用,运行完成后进行验证测试,如果没有通过验证测试,需将系统进行恢复并且由其中一个备用块代替主块运行,这一过程可以一直重复进行直到耗尽所有的备用块,或者其中一个故障行为超出预料,从而导致不能恢复的结果。设计时需保证主块及所有备份块之间的独立性,避免类似错误的产生,使主块和后备块之间共性错误降到最低限度,并且需要确保验证测试程序的正确性。
1.2 N版本程序设计
N版本程序设计是一种静态的故障屏蔽技术,采用前向回复策略。如图2所示。
其设计思想是使用多种不同的算法或者设计思路实现相同的功能,最终的结果通过表决器来决定。其中N份程序需要由不同都设计者或者开发者独立设计,使用不相同的方法,尽量使用不相同的设计开发语言、不相同的开发环境、不相同的工具来实现。这样做的原因是不同人设计可以减少不同版本软件相类似错误的概率。另外,由于各种不同版本并行执行,甚至在不同的计算机中执行,互相之间如何同步时需要重点考虑的问题。
1.3 防卫式程序设计
防卫式程序设计的容错机制与传统容错技术的实现方法都不太一致。针对系统中肯存在的错误或者不一致性,防卫式程序设计的基本思想是通过在系统代码中包含错误检查代码、错误恢复代码,这样可以使一旦发生错误,程序能撤销错误状态,恢复到一个已知正确的状态中去[1]。也可以理解为备份恢复或者回滚功能,但是程序自己意识到错误自动恢复,从而提高系统的可靠性和稳定性。防卫式程序设计原理如图3所示。
2 软件可靠性设计应用
在文联人事工作网络平台项目的实施过程中,为实现约定的易用性、稳定性、可靠性、安全性、良好的性能等非功能性需求,结合既有的软硬件条件及运行环境,分析采纳可靠性设计的诸多方法,经综合考虑主要采用了数据双机备份、改进防卫式程序设计、同功能多种实现方式、负载均衡几种方法提高软件系统的可靠性。
2.1 数据库双机备份
数据库是系统的核心所在,所有业务数据都存在数据库中,业务数据的遗失或失效将造成不可容忍的系统故障,提高系统可靠性首先应该保证业务数据的稳定性和安全性。
在项目的实施过程中,数据库中存储的业务数据是关于干部履职信息及学员培训信息的,对于提高相关工作效率,改变传统工作模式而言异常重要。项目实施过程中数据库通过双机备份来保证数据库的稳定与安全,数据库中的业务数据、数据表结构表都按照既定的备份策略进行备份,形成数据冗余。应用示意图如图4所示。
当其中一台数据库受到何种影响不能正常提供服务后将自动启用备份数据库。通过此种方式可以减少人事平台因为数据库的原因造成系统不可用的概率和时间。两台数据库服务器之间,通过备份策略互相监控状态,在其中一台服务器不能使用后则切换至可用的一台,达到提高数据库的稳定性与可靠性进而保障人事平台整个系统的可靠性。
2.2 改进防卫式程序设计
为了让系统稳定运行,提高应用系统本身的可用性至关重要,如果过软件故障或者因为不可预知的异常而宕机,将会引起十分严重的后果。在人事平台实施过程的系统整体设计时,在系统层面考虑可靠性及稳定性,尽量减少或者尽可能避免因为系统本身的原因造成的不稳定,系统在总体设计中借鉴了防卫式程序设计的思想,在系统中写入了系统备份策略、错误检查程序、错误恢复机制,当系统发生故障时可以自动恢复到前一个正确的版本,同时记录发生的问题进行记录及捕捉。事后可以对捕获得异常进行分析改进,并且升级应用软件,稳定运行后备份新的版本。系统的备份方式如图5所示。
秉承持续改进的思想结合防卫式程序设计的理念,设计实施本项目,当系统更新时,备份整个系统,系统运行过程中对系统进行监控,当发生故障及时将系统恢复为上一个正确的版本,可以更有效的提高整个应用系统的可靠性。
2.3 多种设计实现思路
功能多版本多实现方式实现是针对相同的功能或者模块设计多种实现方式,不同设计思路和不同实现的方式之期间要存在差异,即存在相异性,从而可提高功能或者模块的可用性。在人事平台的设计中,多个功能模块都通过此方式进行设计,以培训学员报名参加培训为例,学员可以自己登录平台进行报名,也可以由他人代报或者帮助他人报名,还可以由后台相关管理员在后台管理端批量帮助学员进行报名,如图6所示。
在功能设计中还存在很多这种设计方式,培训班发布的问题,既可以通过报名开始时间,利用定时器自动启动,也可以通过开启报名按钮手动启动报名;培训评估问题可以在账户上也可以通过扫描二维码实现;关于履职活动填写工作,可以在个人前台账号上填写录入,也可以由工作人员(秘书或者活动组织者)批量导入或者录入。相关功能通过多种设计方式不同的实现方式提高了系统的可靠程度,当某个功能或者模块因为意外不能使用时,还可以通过其它方式完成工作此种实现方式不仅可以为用户提供多入口,同时又增强了系统的可用靠性。
2.4 负载均衡
人事平台作为一个互联网应用,同时在线用户可能会成千上万,如何让所有用户都可以流畅访问系统,是设计本项目需要重要考虑的问题。本项目的部署设计通过负载均衡实现集群,进一步提高可用性,并且分担了各服务器的压力,提高了性能。Nginx实现负载均衡,是一种基于反向代理服务器的负载均衡,支持高并发,避免单机访问量过大而引起的宕机问题,Nginx在高并发情况下表现良好,能够支持高达50000个并发响应[3]。
本项目前台用户面向的是全国范围内所有文艺工作者,同时在线用户会超过10000人,因此部署设计通过高性能服务器通过轮换机制组成集群,满足高并发情况下系统的可用集群中多台服务器通过轮换机制分担访问压力,资源分配也比较均衡。此外,多台服务器同时互为备份,其中一台服务器出现故障,系统依旧可用。提高可用性的同事也提高了性能。负载均衡的实现在本项目最终上线运行过程中保障可靠性方面起到了非常重要的作用。
3 结束语
人事平台在设计实施中通过数据库双机冗余备份、防卫式程序设计、相同功能多种设计方式多种实现策略、应用部署实现负载均衡、提高了系统可用性及可靠性,保证系统上线后7*24小时稳定运行,提高了相关部门相关工作的工作效率,同时促进相关工作的无纸化办公发展。针对项目中的不足和考虑不周的地方,需要在以后的工作中加以改进和完善。提高软件系统可靠性的方法多种多样,如何更好的根据不同情况选择不同方法,因地制宜提高系统可靠性是今后应该努力的方向。
参考文献
[1] 杨春晖, 孙伟, 等. 系统架构设计师教程[M]. 第2版. 北京, 清华大学出版社. 2012.
[2] https://baike.so.com/doc/5380532-5616806.html
[3] 于乐洋. 基于MPC8280处理平台的软件容错与快速恢复设计[D]. 北京邮电大学, 2016.
[4] 钟读杭, 齐治昌, 徐锡山. 基于N版本程序设计的Web服务组合可靠性优化[J]. 计算机工程与科学, 2008(06): 115-118.
[5] 朱涛. 基于双主机的冗余控制系统软件设计与实现[J]. 工业控制计算机, 2019, 32(10): 94-95.
[6] 王权. 计算机数据库的备份与恢复技术研究[J]. 数字通信世界, 2019(09): 99.
[7] 吳海明. 基于Linux高可用性负载均衡集群技术的研究与应用[J]. 科技创新与应用, 2018(36): 17-18.