首发在聊聊架构 ,发到这里备份一下:前端
由于经常在聊聊架构群里看到有不少朋友在问旧系统升级改造的一些原则与经验,你们面临着各类各样的问题,因而在这里跟跟你们聊聊我经历的那些旧系统改造的那些事儿。程序员
本文是整个系列的第一篇内容,文章以使用COBOL语言开发于70年代的某日本公司W系统的改造升级为例,来介绍系统升级改造的总体思路。web
当系统日益臃肿,情况频出,难以知足公司业务发展的须要,运维感到压力山大,但公司出于保护投资的动机,又不能彻底抛弃现有系统,另起炉灶。那么对该系统进行升级改造呢就不得不提上日程,所以咱们首先要作的是直面系统所存在的问题,明确系统升级所须要达到的目标,再根据目标提出相应的架构解决方案。数据库
咱们来看一个案例:某日本公司W系统使用COBOL语言开发于70年代,运行在IBM 的Mainframe 大型机上,数据存储使用VSAM(Virtual Storage Access Method),结构上采用C-S架构,用户使用仿真终端工具远程登录主机;批处理使用JCL(Job control language);在使用了30多年后,公司不得不进行改造升级。首先咱们应当分析其存在的问题:express
一、运行平台维护困难,成本高昂。windows
该系统运行于IBM Mainframe大型机系统,诞生于1964年的S/360,系统为OS 360,后面陆续推出OS 370,OS390,最新的是IBM Z13大型机,以其强大的计算能力,极高的可靠性(年维护时间不超过5分钟)以及其安全性深受各个行业所信赖,尤为普遍应用于银行金融等关键领域。但购置费用极其昂贵(注:2014年Z10 报价2000万美圆,最便宜配置也是500万,据说近来降价了), 其运维成本更是十分巨大,运维人员费用昂贵你们都知晓,其余仅机房空调电费一项就很是可观,不是土豪用不起啊。后端
在30多年前性能强安全稳定的服务器屈指可数,价格昂贵天然是情理之中,但现在各类架构服务器价格已经亲民许多,所以在服务器上已有足够多的选择,采够相对实惠的硬件能够将有限的预算花到其余更须要的地方;尤为是对于企业而言,如何将预算使用的更加高效是天天都要面对的问题;所以成本概念不只仅是公司老板和财务经理须要,做为架构师也是须要具有成本成本意识,关注软件架构在各个阶段的成本。浏览器
二、数据和代码维护困难,难以跟其余企业信息系统进行数据交换安全
COBOL语言还属于面向过程的高级语言,有着严格的代码格式,位置写错了都编译不过,在主机上debug极其不便,基本只能靠log文件输出查看数据;何况这些代码都用了近30年,当时比我年龄都大,也是历经屡次更改,具体业务也几经变迁, 当年写代码的程序员只怕是都退休了,维护极为困难。使用了CICS(Customer Information Control System)中间件,因为IBM 主机系统的封闭性,该系统与其余企业信息系统进行数据交换困难,COBOL 调JAVA,COBOL调C 等异构程序间的数据交互的开发很是繁琐,对人员技术要求较高。数据存储采用了 VSAM,是一种文件存储方式,远远不能知足当今数据存储的要求;在对数据分析挖掘的需求日益增多的今天,更是没法知足这些新需求的须要。前端框架
三、主机终端资源有限,同时在线用户数难以扩容
在C-S架构下,使用系统是经过终端设备链接至主机系统,因为主机资源有限,各系统同时终端链接数是固定的,所以当须要进一步扩大同时在线用户数量则受到诸多限制;毕竟主机资源昂贵,开一颗CPU核心也是须要付出不菲的美刀的。
针对上述三个主要矛盾点,咱们发现主要的问题在于平台架构和运行环境所带来的桎梏使得非改不可。因此就这样的需求而言,解决方案就很是直接:
一、平台总体移植至windows,数据存储由vsam向数据库迁移。
首先是决定将IBM COBOL代码经过转换使其运行在Windows平台的Micro Focus Net/Enterprise Server Express服务器上,解决了硬件昂贵的问题,毕竟相对于主机而言,Windows服务器的购置成本和运维成本仅仅是主机的九牛一毛,从而使系统运维成本大幅降低,运维人员也更易招募。其次,变VSAM文件存储为Oracle数据库,解决数据管理和使用上的种种障碍,毕竟在二十一世纪了,数据库较文件存储不知高到哪里去了(+1s)。最后,将批处理代码由JCL迁移至BAT脚本,调度控制采用了Hitachi JP1 server,由这主要的三步将平台所有代码完整迁移至Windows平台。固然,同语言的异平台间的迁移的项目在平常工做当中难以见到,但给了咱们一种思路,就是不要被底层运行环境所限制了思想,跳出来反而能得到新的收获。
二、系统由C-S架构转向B-S架构
将用户界面作总体转换,由以前的UI由CICS实现的LMAP页面转换为Java web 应用,因为采用了流行的BS架构,以前因为终端数量限制的问题则获得解决。因为,CICS系统自己有较多页面控制功能,所以咱们采用Java自行实现了其前端框架的主要功能,如先后端数据转换与传输,页面显示及跳转这些基础功能。
由于客户公司要求界面及控制方式要与原有系统一致,保证彻底的界面及功能与原有系统相同,从而减小对原有员工的培训和适应期,保证系统的顺利切换,避免所以带来的风险。固然这个跟日本的文化或者是人的特质决定的,他们在这方面要求比较古板,甚至显得十分使人难以理解的迂腐,但他们作事情的严谨态度仍是值得学习。
三、将COBOL程序服务化
经过Micro Focus Net Express为COBOL 程序配置web service接口定义,并生成相应的Java 接口代码,并将转换后的COBOL源代码部署至Micro Focus Server Express ,Java /.NET工程经过SOAP 调用web service,由server express传递数据给相应 COBOL服务。经过服务化将原有封闭的COBOL程序转变成web服务,使其不只可使得现有程序能够调用,也使得第三方程序在须要的状况下能够有接入的可能,转封闭为开放。
从以上三个对策而言,从根本上解决了原有的三个主要问题,使旧系统焕发了新的活力,再也不收到昂贵硬件平台的限制,采用现有的廉价平台就能知足以前系统的所有功能,同时还提供了种种新特性知足各方面新的须要,兼顾了下降了企业的运维成本,保护了既有投入,在方案当中也彻底符合现有用户使用习惯,避免了新老系统切换过程当中用户出现不适应的状况,更是将人员培训成本降到最低,会使用浏览器就能使用新系统。固然以上方案的实施并不是我描述的这般简单,当中有着各类各样的挑战,在克服这些挑战的同时,这样的移植升级项也花费了近200我的月的成本。最终呈现的系统架构如:
对于这样陈旧的系统的移植升级改造,有着以下流程:
一、首先作好技术调研,拿典型的程序作好技术的试点验证(所谓pilot)。
异构系统,在选则移植方案的时候,首先要作的就是要尝试手动作一次程序移植,把关键技术点解决掉,使得方案可行性获得足够的验证。在这个过程中搞清楚两个系统间的异同,从环境到代码,采用到的各类技术都要造成完整的文档。若是选定的典型程序移植后,功能和数据验证经过,才能进行下一步的扩大规模的尝试移植升级。好比说,我这个案例当中提到的这个项目,在pilot阶段,就完成了Java web框架,把CICS系统当中的页面控制,数据传输的95%的功能都完成了;更是验证了IBM COBOL程序转换为MF-COBOL的规范,制定了相应的转换规则,也经过MicroFocus Net xpress 实现了COBOL代码的服务化。后面会讲到的如何制造和使用工具一节,起到关键的做用,有了转换规则才能编写工具去完成代码转换。
因此pilot阶段是作好系统移植和升级的最重要阶段,要完成整个项目的绝大部分技术难点的调研。只有作好了这个阶段,才能往下作较大规模的展开改造,由于即便这个阶段失败了,发现方案有缺陷,连最基本的程序都完不成转换的话,这个方案基本上就能够否决,这样一来经过试错,来验证方案的可行性,为将来的总体工做打好基础,与此同时也下降了项目风险。
二、经过pilot阶段后,须要作进一步的较大规模验证。
在pilot阶段成功后,只是说明方案可行,但离实际应用还有一段距离。切不可掉以轻心,认为基本方案验证了就没有了问题。因此在全面铺开前再作中等规模的方案验证,将完整流程再验证一番,进一步排查出pilot阶段未发现的各类问题。这个阶段尤为重要,咱们在这个阶段进一步完善了工具,完善了Java Web框架,把新系统中运行的各类部署问题都一一化解,为最终的大规模铺开奠基坚实的基础。把系统从转换到开发,测试以及部署的完整链条所有打通。也在此阶段培训新人加入项目,由于pilot阶段,项目人不多,在此阶段后,在中等规模和全面铺开的阶段须要完成对人员的培训,各类规范的实施和监督,确保完成移植的代码知足项目制定的需求。
三、大规模铺开前,人员培训和规范相当重要
这个属于管理问题,创建文档,项目开发流程代码规范等,在后面的文章里面会详细讲到。培训则是赞成全体成员的认识,确保工做成果不走样,创建基本的质量保证。
言而总之,无论是对既存系统的升级改造,或是新建立业务系统,对于架构而言,选择什么样的技术方案,都须要预先作好技术调研,了解好方方面面的问题。好比选择微服务很是火,不少人就想是否是所有整成微服务?在作这样的决定以前,必定要了解你既有系统的状况,根据你的业务场景来判断,是否是适合作成微服务?作成微服务后如何部署管理等等后续措施是否是可以跟上?等等问题都须要在调研阶段给出答案。大胆尝试,当心验证,是不会错的。
做者介绍
王巍,涟拓网络架构师,先后就任于Achievo、IBM、HP,关注前沿技术,分布式系统架构,组件化系统开发,机器学习和大数据,如今创业公司负责系统架构,乐于与你们一块儿聊聊架构