摘要:
2018年下半年,本人有幸参加了某汽车玻璃生产厂商的“产品质量追溯与条码管理系统”的开发建设工作。该系统基于三层B/S架构,是以条码管理为基础、涵盖原材料采购、capitel
生产物料准备、生产制造执行、仓储管理、成品调拨销售为一体的综合性管理系统。在该系统的建设中,本人作为系统架构负责人,主要负责需求分析与架构主体设计等工作。 探秘古墓本文以该系统的构建开发过程为例,首先探讨我们如何考虑容错问题,常用的容错技术的分类及具体的技术,然后着重探讨容错技术在该项目的建设过程中的应用及效果,包括数据库的主从复制、程序设计中的容错技术和应用的集部署。通过这些技术的使用,在该系统的可靠性和性能层面都达到了很好的效果,截至目前系统一直平稳运行,得到了客户的认可。 正文:
在汽车工业快速发展的今天,越来越多的汽车零部件生产企业意识到,实现产品可追溯是提高自身产品质量的有效保证。随着汽车召回制度的颁布,快速召回有缺陷的产品并根据缺陷产品的条码标识追溯到产品的型号、批次、原材料信息甚至生产工序、生产人员、生产时间、生产设备等信息,可以为查问题根源,快速解决产品缺陷带来极大便利。
2018年下半年,我公司受当地某汽车玻璃生产厂商的委托,开发“产品质量追溯与条码管理系统”。该系统采用三层B/S架构并集部署,数据库采用主从库方式进行部署。该系统是根田鼠基于条码管理的,涵盖该厂商整个生产过程的综合性管理系统。该系统需要覆盖该厂商分布在全国各地的三家生产基地和十多家供货仓库。客户希望通过该系统的建设达到如下几个目标:一是根据条码技术和生产数据的实时采集与记录,实现产品的可追溯属性;二是通过在生产过程中对条码的扫描核对,实现对生产过程的规范化控制,如批次控制、先进先出控制等;三是基于条码技术,实现物料防混,避免生产、发货过程中出现物料不一致的情况;由于现场车间采用3班倒24小时不间断的生产的制度,客户要求系统必须有较高的可靠性,不能出现影响现场生产的问题,另外系统涉及库存和账务信息传输时,必须保证数据正确和完整,不能出现问题。 丽绿刺蛾作为该系统的架构负责人,本人主要负责需求分析与架构主体设计等工作。在客户主体需求敲定,形成需求基线以后,我们开始着手结合需求和以往的设计经验,考虑应该采用什么样的容错技术和方法来满足系统的可靠性与实时性的要求。
提高系统的可靠性一般可以通过容错技术、避错技术和检错技术来实现。容错技术可以通
过N版本设计、恢复块设计、防卫式程序设计和冗余来实现。其中N版本设计和恢复块设计虽然能够很好的提高系统的可靠性,但是成本代价较大,不太适合于一般的应用软件系统,所以常采用的冗余技术和技术为防卫式程序设计,其中冗余技术是指通过冗余结构、资源、信息等手段来提高可靠性,冗余技术可以分为结构冗余、时间冗余和信息冗余,其中结构冗余包括动态冗余、静态冗余和混合冗余,时间冗余是通过指令重复的执行来避免瞬时的错误,信息冗余是指为信息增加一部分冗余信息进行校验或者纠错。防卫式程序设计是指在预见程序的什么位置可能会出现问题,然后当问题出现时执行一个防止损害的动作来使系统恢复正常。
在该系统的开发过程中,我们面对不同的需求场景综合使用了多种容错,下面我们将着重探讨 “应用服务器的集部署”、“数据库主从复制”以及“程序容错设计”这三种技术如何在系统中应用及其应用效果。
一、“应用服务器的集部署”
社稷我们通过对现场的调研了解到,该厂商拥有三家生产基地和十余家供货仓库分散在全国多个城市。生产基地均采用3班倒24小时不间断生产的制度,这就要求系统必须拥有较高的jnc mp3
可靠性来为生产基地和供货仓库提供服务,不能出现宕机等停止服务情况的发生,这会严重影响现场生产。基于这种情况,我们决定采用应用服务器集部署的方式来提高系统的可靠性。应用服务器集部署在多台应用服务器上,然后使用Nginx对三台服务器做负载均衡并提供统一的外部访问入口,Nginx采用最小连接数算法将请求平均分发到三台应用服务器上,通过这种处理,多台应用服务器即使某一到两台出现问题,从整体上仍然能够保证系统的可用,负载均衡技术降低了每台应用服务器的压力,提高了整个系统的实时性,从侧面也提高了系统的可靠性。
二、“数据库主从复制”
根据我们以往的设计经验,数据库的可靠性会从根本上影响应用系统整体的可靠性。该厂商的三家工厂和十多家供货仓库会24小时不间断的通过应用系统与数据库进行交互,这就要求数据库必须有较高的可靠性与实时性,系统数据库中存储着大量的关键数据,必定要保证数据的完整性,如果采用单点方式进行部署的话,一旦硬盘由于电压等原因损坏或失窃,都会导致关键数据丢失,这是不能被接受的。基于这种情况,我们决定采用主从部署的方式来提高数据库的可靠性。在部署层面,我们对主库和从库采用多机分别部署的方式,
并做数据的实时同步,主库主要承担写入操作,从库主要承担读取操作。主库与从库通过软件进行相互监控,当主库或者从库中任意一台发生宕机等异常情况时,其他数据库就会接过宕机机器的职责。通过这样的部署方式,首先可以提高整个数据库系统的可靠性,保证数据库系统可以持续提供服务,另外通过主从复制,做到了数据的异地备份,即使单台遗失,数据库管理员也能在最短的时间内通过备份来恢复数据,减少企业的损失。
三、“程序容错设计”
通过程序代码实现容错是提高系统可靠性的一种较为有效的方式,它可以应对很多程序运行时发生异常情况,其最常用的方式有防卫式程序设计和冗余设计。在设计该系统时,我们也采用了这两种方式来提高系统的可靠性。例如该在该系统的库存模块中,库存转移往往涉及到从某个子库出库同时再另一个子库入库,这两个动作必须保证同时可靠地完成,不然就会出现库存数据异常。为应对这种情况,我们采用了防卫式的程序设计,使用Try/Catch机制包裹执行这两个动作的代码块,当其中任何一个动作出现问题时,就会进入Catch处理。在Catch中,如果另一个动作尚未执行,我们会给前端返回提示,让用户再次进行尝试或联系系统管理员。如果另一个动作已经执行完毕,那么我们会将其回滚,然后
给前端返回提示。生产基地间或供货仓库间采用https协议进行通信,在传递关键数据时,我们通过信息冗余的方式来提高系统的可靠性,这里具体的做法是在发送方请求头中增加CRC循环校验码,接收方接收到数据后,会使用CRC校验码对传输的内容进行纠错,保证信息传输的可靠性。
我们在该项目中使用了许多容错技术来提高系统的可靠性与实时性。通过这些技术的使用,不仅满足了客户对可靠性的要求,也对系统的性能和实时性的提升起到了一定的作用,获得了客户的认可,在相关行业内也赢得了良好的口碑。经过这次实践,也使我们发现了自身的一些不足之处,比如防卫式程序设计的比较臃肿,许多可复用的代码也没有得到很好的复用,我们将在后续的工作与实践中继续磨练与提升。