论软件的可靠性设计
在准备架构师考试过程中发现可供参考的论文范围非常少且内容陈旧给学习带来很大烦恼,通过考试后把我准备的论文共享出来水平有限但内容格式迎合考试,希望给大家一个参考。范文以“论软件的可靠性设计”为题书写,希望对大家有所帮助。
【摘要】
2017年5月,我参加了某省质量技术监督局“生产制造一体化监管平台”项目(以下简称一体化平台),担任架构师职务负责整体架构设计与中间件选型。该系统以监管企业生产制造为主线,旨在帮助各级监督部门解决监管企业生产、报审、送检、勘验、巡检和执法等问题。本文以一体化平台为例,论述了软件的可靠性设计在项目中的应用,并阐述了选择检错技术、容错技术和降低复杂度技术的原因、实施过程和效果。最后总结了在开发过程中遇到的问题及解决方式。实践证明通过合理的可靠性设计及相关技术的应用,使开发工作取得了成功,一体化平台于2018年10月验收上线,目前已稳定运行1年时间得到了各级监管部门和企业用户的一致认可和好评。
【背景】
质量技术监督在生产领域、市场流通领域等方面都起到至关重要的作用,关乎到企业生产和人民日常生活。某省质量技术监督局在信息化方面起步较早,先后建设了数套专项系统,但缺乏对业务的统一监管,为贯彻落实国家市场监督总局《关于加快推进质量体系监管信息化建设要求》,一体化平台的建设工作受到各级领导的关注。项目建设目标覆盖省、市、县区三级质量监管部门及全省三十多万家企业,为工业生产、报审、送检、勘验、巡检和执法工作提供支持。我所在公司长期从事相关行业的软件开发,对质量监督领域有着丰富经验,因此顺利中标承建了该项目,初期投入15名技术人员分成三个组,由我担任架构师职务,负责软件架构设计和中间件选型。
项目启动后通过对业务的梳理,初步将一体化平台划分为四大模块,其中政务服务模块针对的是通过互联网访问系统的企业用户,在功能上主要包括报审、送检、公示和政策法规宣传等功能;而其它三个模块针对的是通过电子政务外网访问系统的监管部门和事业单位用户,其中运行管理模块主要功能包括审批、勘验、颁证、建档;企业监管模块主要功能包括巡检、执法;电子监察模块主要功能包括实时监控、预警纠错和效能评估。
【论点】
在架构设计开始阶段,我意识到可靠性设计对架构设计的重要性,因此在基本需求确定后,我邀请了客户代表和领域专家,针对一体化平台可靠性设计进行了论证。系统建成后要承担起全省制造型企业从生产、送检、勘验到年审等各环节的监管工作,一旦出现故障将造成重大的经济损失和社会性事件,因此必须保证系统7*24小时稳定运行,常用MTTF、MTBF和MTTR指标进行衡量。根据经验保障大型复杂系统的可靠性并不能单纯靠一种或几种技术措施就能做好,而是需要从预防、检查和处理三方面来共同保障,对应架构设计则是降低复杂度技术、检错技术、容错技术,三者缺失任何一环都会造成可靠性的下降。
- 检错技术
检错是一种能够自动发现故障、确定故障性质和部位的技术,但必须配合容错技术才能排除故障。检错可用专门的程序实现属于程序设计的范围。常见的检错技术有判断返回结果、计算运行时间和状态检测等。相比航空科研等涉及大量计算的高精尖业务场景,一体化平台则更关注的是系统整体提供不间断服务的能力,通过风险分析活动识别出威胁系统可靠性主要的风险来自硬件设备和网络故障。对此在具体实现上我采取了两个措施,一是,针对数据交换业务,开发了一个网络监控模块,采用ping/echo程序监控前置机到生产库的网络情况,并基于图形化界面实时展示网络状态。另外,为了防止交换程序假死对Kettle(ETL工具)组件进行了集成,可实时检测服务状态,当故障发生时首先停止相关服务记录异常,然后通过网关发送报警短信,由人工处理;二是,针对双机部署的web程序我采用了Keepalived组件做心跳连接,当检测到Master宕机可迅速切换到Buckup继续服务,整个过程自动完成,无需人工干预。通过以上检错技术的应用成功的提高了系统故障检测和应急处理能力。
- 容错技术
容错是保证系统在某些组成部分出现故障时仍能正常工作的技术。常见的容错技术有冗余技术、双机技术、集群技术。针对一体化平台用户量大、可用性要求高的业务特点,我选择了采用双机技术和集群技术来满足不同场景的容错要求。在逻辑上我将一体化平台可划分为面向公众服务和内部办公服务两部分。对于面向公众服务,作为办事入口和宣传平台必须提供7*24不间断服务。根据这个业务特点我在部署方式上采用了高可用集群技术,首先使用一台Nginx服务器 + 三台应用服务器构成负载均衡集群解决并发问题。然后为避免Nginx单点故障,实际部署两套Nginx作为Master节点和Buckup节点同时指向应用服务器,并使用Keepalived组件连接两台Nginx服务器做心跳检测,构成高可用集群保障服务的连续运行;对于内部办公服务,因部署的节点较多,考虑到资源限制采用的是双机互备技术,将两个独立的模块在两台机器上同时运行,但彼此均设为Buckup,当某一台服务器心跳检测失败时,服务可用在短时间内进行切换,从而保证了业务的持续性。通过以上容错技术的应用成功的保障了系统的稳定运行。
- 降低复杂度设计
随着系统规模不断的扩大,架构复杂度也在不断的攀升,对于大型复杂系统有效的管理软件复杂度,已成为保障系统可靠性的一个重要手段。常见的降低复杂度方式有应用架构设计,使用构件和设计模式等。针对架构设计本次项目采用J2EE技术开发,其本身就具有N层架构的特点,结合系统业务我采用了三层B\S架构设计来构建系统,其层次划分为表现层、功能层和数据层。表现层,运行在客户机浏览器上,是应用的用户接口担负着用户与应用间对话功能;功能层,运行在 Web 服务器上,负责响表示层的用户请求、执行业务逻辑;数据层,就是数据库管理系统,它运行在数据库服务器上负责管理数据读写和执行事务。另外,在项目中我使用了多种构件来降低系统复杂度,例如使用RabbitMQ消息中间件,使系统以消息为中心进行交互有效降低各模块间耦合度;使用SpringMVC框架解耦视图和模型,提高代码重用度;使用Hibernate框架解耦持久层和数据库,使持久层专注于面向对象编程,无需关心具体实现,降低了程序复杂度。最后在开发过程中还应用了抽象工厂、策略、责任链等多种模式来解耦代码。通过以上方式成功的降低了软件的复杂度,提高了系统可靠性。
【结尾】
由于在项目中多种可靠性技术的成功应用,有效的保障了系统的稳定性和可靠性,使开发工作取得了成功。但在项目过程中也遇到过问题,因客户单位部分用户派驻到办事大厅工作,窗口办公需要配合高拍仪、读卡器等硬件设备,而浏览器出于安全考虑隔离了web程序调取本地资源仅提供有限支持,给系统推广带来了困难。对此我采用了富客户端技术,使用Electron框架封装了一个客户端专门负责调取硬件资源及时解决了该问题,没有对项目造成实质影响。
通过项目组全体成员的共同努力,一体化平台于2018年10月完成验收正式上线,截至目前系统运行稳定运维工作量可控,得到了监管部门和企业用户的一致认可和好评。在今后的工作中我将不断总结和提升专业技术能力,争取为我国信息化事业贡献一份力量。
本文地址:https://blog.csdn.net/hamster204/article/details/107015427
上一篇: 微服务拆分,选型与演进