美国最大的投资银行摩根大通(JP Morgan)再也没有Perl了。最后一个Perl代码于2019年退役。
银行中有几个Perl脚本,大约在2018年,总计10k LOC,最初是在20年前编写的。
这就是可以发现的一切,搜索覆盖了5000万行代码和数千台服务器的存储库,所有可以访问和解释的东西。
我当时正在那里工作,接到了一项不幸的任务去调查这件事。(小贴士:如果你看到路过的关于一些旧系统的电子邮件,不要回复,否则人们可能会利用这个机会让你做这项工作)。
我说的是“研究一下”,而不是升级、重写或退役,因为这些词不准确。处理旧的潜在关键系统的第一步是了解它们,然后再考虑是否可以或应该做任何事情。
第二步(如果有)是添加日志记录,以尝试捕获正在使用的内容。最终未使用的可以退役。变得琐碎或过时的事情可以解决(例如,对getcorecount.pl的调用可以由内置API调用代替)。
超过一半的脚本最终被证明是未使用的(或足够接近),可以安全地退役。剩下几个脚本要处理,总共有几千行。
生产中活跃的Perl的最后几个部分是在2006年左右编写的,根据源代码控制历史记录,从那以后几乎没有人碰过它。
那里有一个存储子系统的建筑部件。简而言之,它类似于AWS S3。
Perl在它的时代被认为是一种粘合语言,用于编写短小的脚本来将东西粘合在一起,就像bash脚本一样,但复杂性要高出一个档次。当Perl代码将一些低级别的东西粘合在一起时,这并不令人惊讶。
而Perl代码从一开始就基本是原始的。“整个”的其余部分就不是了。
存储是许多项目的基本需求。最初只是一个构建块在几周内被黑客入侵,但在整个业务中的使用量迅速增长。
整个公司都创建了额外的集成和API来与之交互(不是在Perl中,也不一定在主repo中)。它得到了广泛的使用,并建立在更多的基础上。
十年来,它成为存储大量和各种数据、存储每日报告、存储风险分析结果、市场数据、过去和未来交易的首选解决方案。考虑csv/xlsx/pdf可能涵盖的任何用例(并在银行带动数十亿美元)。
[注:这意味着人工使用和程序化使用,这是最敏感的处理方式。人类依赖的系统在临界性和影响方面天生就是有限的(人类只能在物理上尽可能快地单击,并且会对未按预期工作的事情发出警报)。然而,自动化系统有无限的灾难潜力,因为它们可能会以“机器速度”无休止地反复故障,并驱动其他相关系统故障,有时甚至是静默的。]。
当然,在依赖它的数千个应用程序和开发人员中,没有一个人意识到他们最终依赖于一堆Perl。大概有两个人会认识这个话题。(在任何组织中,无论规模有多大,只有1-3个人熟悉任何给定的系统)。
在分析结束时,很明显Perl每天推动数十亿美元,可能是数万亿美元。它是摩根大通最关键的3个系统的竞争者,因为它的使用在摩根大通无处不在。这可能是地球上最关键的系统之一,因为世行推动了美国经济和世界的很大一部分。
结论很简单,这是不能退役的,因为它已经被使用了。
[我将省去导致结论的1001个因素,一些细节最好不要披露。]。
相反,必须将其重写为开发人员积极维护和理解的内容。
重写将在Python2.6上运行,因为Python2.6是非常棒且稳定的…。更重要的是,它是RHEL 6附带的版本,也就是它运行的地方。
[虽然替代版本运行在python2.6上,但它也可以在python2.7和python3.7上运行。通过对细微差别的笨拙了解和对依赖项的严格管理,可以制作在任何地方都能运行的小型软件。最初的项目在十多年的时间里运行良好,重写的时间也一样长。直到可能有人不得不在2030年把它挖出来,并为RHEL 9做出调整。]。
长话短说,剧本经过了广泛的重写和测试。(跳过关于测试如此重要的软件的叙述,否则文章将长50页)。