论高可靠性系统中软件容错技术的应用

摘要

2014年12月,本人所在的深圳市XX科技有限公司启动了一个销售过程管理系统的开发项目,本人作为IT部门程序组经理,担任了此项目的系统分析师角色。该系统主要用户为销售和售前技术人员。为销售人员提供项目机会的创建、项目机会跟进的功能。为售前技术人员提供项目机会协助支持功能。本文论述了为了提高可靠性常见的各种技术和方法,在软件容错层面COP系统主要采取的防卫式软件设计具体应用,以及在采用这些技术和方法时,如何平衡开发成本与满足高可靠性需求,及如何兼顾实时性要求。文章最后总结了采用这些方法的实际效果。

正文

项目背景

本人所在的深圳市XX科技有限公司是一个本土的电子元器件分销企业,主要业务为代理销售来自欧美、日本20多个品牌的电子元器件,公司有10多个办事处,200多业务员及60多个技术支持人员分布在全国各主要城市。 公司主要业务模式为将国外品牌的电子元器件通过项目协同设计的方式分销给国内的制造企业及设计公司。销售过程管理是公司核心业务流程。2014年12月,公司着手销售过程管理系统(内部名称为COP系统)的开发。该系统定位于公司内部客户服务人员的协同作业平台,主要用户为销售和技术人员。系统为销售人员提供 项目机会的创建、项目机会跟进、项目机会转化功能。而对于技术人员,如何鼓励他们更多更好地服务有价值项目同时避免资源过度集中,以实现公司整体价值最大化正是本系统着重要解决的问题。本人有幸在该项目中担任系统分析师,全程参与了该系统的需求分析、架构设计、系统开发及上线工作。项目历时4个月,于2015年4月正式上线。

可靠性要求

COP系统作为全公司所有销售和技术人员的客户服务协作平台,管理整个销售过程,公司领导对此系统非常重视,要求所有销售项目、销售机会必须及时录入系统管理,系统数据绝对不容丢失,除提前公告的系统停机维护外,系统要求7*24小时正常运行。为此我们除了硬件上采用双机热备,数据库文件存放在raid5的磁盘阵列中,磁盘阵列与数据库服务器间采用双光纤通道连接外,软件上我们也作了一些特别的容错设计来提高系统的可靠性。

提升软件可靠性常用方式介绍

为了提高软件可靠性,核心是要软件容错,业界常用的方法主要有N版本程序设计,恢复块方法及防卫式程序软件,N版本程序设计思路为对于同一个功能模块,,由不同的团队基于相同的需求不同的设计独立开发出几个版本,各自验证OK后,在系统中用一个表决器组装起来,程序运行时,由表决器比较各个版本执行的结果,一般采用多数通过的方式,得以将某个偶然出现的错误屏蔽掉,这种方法实时性非常高,实现代价也最大,一般只应用在核心的,可靠性要求特别严格,出错可能导致灾难性后果的模块。 恢复块方法是首先设计好几个备用块,类似Plan A, Plan B, Plan C, 首先执行Plan A代码块,然后执行验证程序,如果验证不通过,则执行Plan B代码块,依次类推直到找到满意结果为止。由于需要验证结果然后后执行恢复块,可能要执行多个恢复块,故实时性比N版本程序设计稍差一些。这种方法对验证模块的正确性要求非常高,实现代价也比较大。防卫式程序设计则是另外一种思路,在程序中检测到错误后,不是启用另外一个模块重新计算或者同时计算几个模块表决出一个正确的结果,而是将程序往前回退到一个正确的状态,以便后续外部环境修复后重新处理。这种方法实现较容易,代价也比较小。适合实时性要求不是那么高的系统。因为我们这套COP系统作为企业内部使用的业务系统,对数据安全可靠性要求比较高,对系统实时性要求不是太高,同时考虑到开发成本,故我们主要在如下几个地方采用了防卫式程序设计。

具体采用的提升可靠性方法

一、审批模块,审批模块是一个独立的构件,负责将请求来源模块提交的审批请求提交到后台数据库系统,提供展示页面内容给主管审批时参考,记录审批结果并将审批最终结果反馈给审批请求来源。在将审批结果反馈这个环节,考虑到请求来源模块可能存在临时性故障,比如数据库锁,通信中断,模块代码更新异常等导致审批模块审批已经完成,而来源模块没有接收到审批结果的情形。所以我们在这个地方做了一个防卫式设计,在反馈请求来源模块审批结果后,再次检查来源模块审批结果是否成功接收,如果判断接收成功则审批模块成功结束,如果不成功则将审批结果回退到未审批的状态,让审批人有机会下次重新审批。

二、公共池模块,在公共池模块中,有一个场景是技术部门主管在查看下属公共池领养情况时,可以将一个成员已经领养的销售机会重新指派给另外一个成员。我们设计的做法是,先让原成员自动执行弃领过程,再让新成员自动执行领养过程。这里就有一个风险,就是旧成员弃领成功后,新成员执行自动领养时可能各种原因领养不成功,所以我们这个地方也加入了一个防卫式设计,就是新成员领养后,判断是否成功能领养,如果不成功,则将该销售机会让原成员重新领回。

三、数据同步模块,COP系统中有很多地方需要与外部系统做数据同步,比如项目资料需要从COP系统同步到电商平台,电商平台是我们公司独立的一个平台,集网站、APP一体,数据库是Mysql数据库,Mysql数据库与COP系统所用的Oracle数据库属于异质数据库,不能用常规的事务处理方式保证数据一致性与完整性。我们设计的方案是,首先借用透明网关从Oracle服务器建立一个DB Link到Mysql 数据库,然后在Oracle数据库端建立一个定期执行的同步过程,该过程中先将待同步的项目数据取出,标识为同步中状态,同步到电商平台后,做防卫式判断是否同步成功,同步成功后再将数据状态标识为已同步,如果不成功,则将数据恢复为待同步的状态。

实际效果

项目成功上线后系统可靠性非常好,得到使用单位用户和领导的高度认可,系统使用至今已经超过1年,基本上没有异常停机过。维护工作量也比较少,维护工作内容基本上为功能改善性维护,极少数据修正维护。虽然系统没有采用实时性更高的N版本程序、恢复快方法,但是由于系统在采用防卫式设计时配合及时的信息反馈,让用户第一时间知晓系统监测到的错误,得以及时联系相关部门同事处理,故用户对系统实时性感受还是不错的。

总结

通过这个项目本人也学到了很多,不仅加深了对系统可靠性设计的理解,同时也意识到系统可靠性的提高不仅能够提高用户对系统的满意度,更能大大减少后期系统维护的成本。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容