cobol和java_现代化历险:策略+将COBOL转换为Java的示例

cobol和java

在Keyhole Software,我们在很大程度上是一家现代化公司。 我们有一些顾问,专门研究将旧的代码迁移到新的,翻新的残旧代码库,并为大多数已经被供应商锁定的企业设计更光明的未来。

作为这些经验的一个有趣的副作用,我们遇到了一些重复的模式和策略,以了解如何实现遗留系统的现代化。

在此博客中,我们将介绍一种看起来非常流行的策略,即Re-Platforming ,并将用我们开发的Keyhole Labs产品进行演示。 这篇文章的基本流程是:

“我要进行一次现代化……不等,也许要两个……”

当我们第一次围绕现代化主题吸引客户时,我们会看到他们在此过程中实际想要完成的工作的定义各不相同。 这些范围包括从大型机应用程序退出,从ESB /经典SOA架构过渡到基于云的PaaS实施,再到从供应商锁定/分层架构迁移到DevOps /微服务架构。

随着十年前最近更新其技术堆栈的公司遇到成功运营或成长的一些关键问题,所有这些情况的发生频率越来越高:

  • 部署问题:所有内容都必须作为一个单元进行部署,这是一个痛苦的过程,并且/或者与其所有基础架构紧密耦合
  • 可伸缩性问题:可伸缩性的垂直极限受到了打击–这意味着机器无法足够快地变大以应对容量的增加
  • 性能问题:系统中消息/事务的数量正在增加延迟,在某些情况下会导致级联故障
  • 资源问题:使用该系统的工程师和计算机科学家本来就不在或即将退休,并且不再在学校教授编程语言


因此,请进入现代化计划。 让我们首先回顾一下“重平台”策略及其优缺点。

这就像修理我的靴子吗?”

重新平台有时也称为升降机。 从根本上讲,重新平台是将一种代码语言转换为另一种代码语言,即进行翻译。 作为现代化策略,这意味着将较旧的代码语言转换为较新的代码语言。

由于各种原因,大型机在一些大型企业中仍然很普遍,因此,像COBOL这样的旧代码库也仍然存在。 脱离这些较旧的代码库和大型机的原因通常是以下之一:

  • 资源问题(如上所述):大型机程序员正变得稀缺,并且这些语言集并没有深入地涵盖在现代课程中。 招聘新开发人员比较困难,尤其是在快速变化和技术选择日趋广泛的情况下。 更少的员工愿意研究某些被淘汰的技术。
  • 对于任何规模的企业而言,大型机都是一笔巨大的费用,而垂直增长则是唯一的增长选择–有时这是昂贵的。
    大多数现代体系结构中常见的灾难恢复和高可用性策略可能会对大型机造成成本上的限制。
  • 程序语言构造(OOP,函数式编程,响应式编程等)中不能轻易利用更新的编程模式-因此限制了选择的范围。
  • SDLC的变化–即从瀑布过渡到敏捷过程以保持竞争力。

因此,长话短说-说“重新平台化”实际上是什么意思?

在此过程中,将分析较旧的代码库以确定代码库中的语法或模式。

一旦定义了语法树或一组代码模式,便会通过某些单步或多步编译器软件运行原始代码库(即COBOL),以将旧代码转换为所需的最终状态(通常是Java, C#或更高版本的等效语言。

从业务角度来看,这可能非常有吸引力。 无需让产品所有者和开发人员组成团队来逐渐用新语言重新编写每个旧代码位,此方法有望通过几次按钮操作来完成所有繁重的工作。 听起来不错!

好吧,教授,请稍等一下-在继续进行之前,这种方法存在一些固有的问题,需要提到。 最难的事情是:

代码翻译不一定能解决技术问题!

在某些情况下,这些旧代码库可能已经存在了20多年。 这可能是20多年的错误决定,或者是特定于大型机的决策被嵌入到您的代码中。

所有的翻译过程都将为您提供那些潜在的代码地雷,这些地雷现在正在使用一种新的语言,它们可能无法从大型机的某些慷慨和能力中受益。

代码可能看起来比大型机差!

在此过程中运行代码有时可能最终看起来像是被削木机扔掉了。 某些大型机和遗留代码构造/行为无法很好地或根本无法转化为较新的代码库。 (例如:在一个最近的客户处,我们找到了一个示例,其中在一个代码库中x / 0的数学运算返回0!)

即使代码可以转换并看起来不错,这也不意味着它将始终运行!

仅仅翻译成另一种语言并不能保证执行成功–一次成功的翻译通常意味着没有语法错误。

可能需要一些调整,其他基础结构来帮助代码工作和构建。

正在运行!=正在执行

同样,如果我们让它运行和构建,那么在我们的试验性转换中,一切似乎都很棒。 一旦我们处理了数百万笔交易和记录,您就会发现其中的所有漏洞。

这个过程很可能不会降低复杂性!

在此过程中,您很可能会从处理其所有复杂性的过程(在某些情况下,几乎没有或没有I / O损失)过渡到对资源的​​慷慨解囊。

将这些代码库转移到较新的语言中,通常涉及一些关注点分离:

  • 与内联SQL语句相对的数据访问层
  • 与基于文件的数据存储相反的潜在新关系数据存储
  • 表示层,与直接在其中烘焙的UI代码相对
  • 服务/业务逻辑层作为自己的层

可能需要一些其他基础架构来处理大型机免费提供的功能

像消息传递,容器或虚拟机编排,队列和AD / LDAP / OAuth集成等。

因此,现在您可能会感觉就像您刚走进一家医药商业广告,我在那儿说:

“这种小药丸可以解决您所有的背痛和黄色的趾甲问题。 潜在的副作用可能包括呕吐,眼睛和/或耳朵出血,暂时性视力丧失,自发性脱发以及对字母“ A”的痛苦敏感性。”

但是,如果您专注于以下方面,这可能是一个成功的旅程:

  1. 如果您有使用旧版/大型机语言编写的大型代码库,则此过程可以使您的代码库很快地转变为更现代的代码库。
  2. 从这一点开始,仅凭他们现在可以读取代码的事实,您的开发团队就可以更有能力在所需的最终状态下更新应用程序。

如果您选择一个可以将语法树用于初始转换的过程,则……

您只需调整语法并重新运行即可快速调整和调整更新后的输出。

有时基于模式的转换是唯一的选择。 但是

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值