亚马逊是如何实现自动将美国国防部大型机cobol重构到政务云Java?


亚马逊的AWS团队将美国国防部在大型机上运行的COBOL系统成功迁移到基于x86 Red Hat Enterprise Linux(RHEL)的Java系统中:
目标是通过利用Amazon Web Services(AWS)来引入敏捷性,降低成本,使技术堆栈现代化并增强安全性。我们使用自动代码转换工具和技术完成了这项工作,同时保留了所有功能,屏幕和报告。
现代化目标是建立基于亚马逊的政务云:AWS GovCloud(美国),以解决国防部严格的安全和合规要求,如美国公民身份。

背景和目标
老系统的一个主要组件有54年历史,用COBOL编写,并提供零售级业务逻辑。该组件运行在已经证明极难更改和管理,但是现在需要对组件进行现代化,以降低运营成本并转移到开放平台,同时保留所有功能。
过去,由于任务的庞大规模和复杂性,使组件现代化的尝试失败了。事实上,组件的现代化被认为是一项艰巨的任务,它在2003年的“ 现代化遗留系统:软件技术,工程流程和商业实践”一书中得到了强调。
经过54年的运营,维护和扩展,组件的代码记录得很糟糕。现有系统的技术设计是支持现代化工作所必需的,必须从现有系统和代码中获得。
该组件的主要特征包括:

  • 年运营成本超过3000万美元,主要归因于大型机托管和维护成本。
  • 130万行COBOL源代码行(SLOC)。
  • 一个数据管理系统,由120万行COBOL代码组成,每天支持大约500,000个事务。
  • 几乎没有剩下的主题专家(SME)。
  • 难以找到合格的,负担得起的COBOL程序员。

该组件需要进行现代化并迁移到经济实惠的开放系统和托管环境,无需停机,数据丢失,功能丢失,性能损失和最小的任务风险。国防部从未做过这样的事情

现代化方法与解决方案
多年来,我们的团队通过提供改变和改善供应任务的解决方案,与国防部项目管理办公室建立了可信赖的关系。2015年,国防部与我们的团队签订合同,对组件进行现代化改造,使其成为整个系统的一个整体和可持续发展的组成部分。
我们通过识别和评估解决方案选项来启动项目:

  • 完全手动重写和重新构建解决方案无法满足程序的时间限制,成功率一直很低(高风险),并且成本太高。
  • 未选择替代解决方案,因为国防部需要保留所有当前的业务规则。
  • COBOL仿真器重新托管解决方案是一种权宜之计,无法达到J2EE / RHEL / SQL DB架构未来的状态要求。

这种分析导致我们决定使用COBOL-to-Java代码自动重构解决方案。此选项将采用低风险,渐进的方法,并应用混合的敏捷/传统方法和工具,以确保快速,高质量的软件交付。

组件现代化阶段
一旦选择了COBOL-to-Java代码自动重构解决方案,就会出现一个三阶段方法来满足DoD的全部要求以及成本,进度和风险限制。

  • 阶段1(18个月):COBOL-to-Java代码自动重构到x86 / RHEL平台 这是最复杂和最危险的阶段,因为我们在虚拟化的x86 RHEL平台上自动将大型机的COBOL代码重构为Java代码,同时不会丢失任何代码功能或性能。生成的Java代码包含COBOL的设计残余,并且开发和测试环境已移至AWS Cloud。
  • 第2阶段(12个月):代码高级重构以消除COBOL设计暗语。 我们对Java代码库进行了更多重构,以消除残留的COBOL残余,暗语和设计元素,从而提高可维护性。
  • 阶段3(3个月):基础设施迁移到AWS GovCloud(美国)我们将所有剩余环境迁移到AWS GovCloud(美国),包括登台和生产。AWS GovCloud(美国)使我们能够满足国防部的许多网络威胁安全要求。

得到教训
自动重构项目是一种可行的方法,可以对主要的遗留系统进行现代化,包括基于COBOL的复杂大型机,以便在经济高效的开放系统中保留现有的业务规则。
我们可以强调在该项目中学到的具体经验:

  • 通过自动重构进行代码转换是一种低风险的方法,可以放弃传统平台并迁移到AWS云。
  • 将努力分为几个阶段(现代化,迁移等)可以降低风险并确保任务成功。
  • 脱离传统的COBOL可以实现全新的维护机会,例如劳动力和工具。
  • 敏捷开发模型可实现实时课程更正并降低交付风险。
  • 最大程度的自动化对于转换数百万行代码同时保留功能等同性,降低风险和缩短项目时间表至关重要。
  • Java语言目标允许从各种经济高效的可靠计算选项中进行选择。在这种情况下,它允许弹性和可扩展性,以满足任务关键型DoD系统的需求。
  • 从传统的专有大型机和COBOL迁移到开放的Java平台,可以访问大量有才华的建筑师和专家进行设计和操作。
  • 抑制专有的COBOL技术可以提供更具成本效益和可靠性的应用服务器和数据库。