2000 多个 Bug!让银行瘫痪、13 亿人账户出错、最终损失超过 28 亿

2023-12-24 14:58

本文主要是介绍2000 多个 Bug!让银行瘫痪、13 亿人账户出错、最终损失超过 28 亿,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

公众号关注 “GitHubDaily”

设为 “星标”,带你了解圈内新鲜事!

转自量子位,作者鱼羊,郭一璞

2000 多个 bug,这样一个千疮百孔的系统,被用在了一家有 13 亿用户的银行里。

这是去年 TSB 银行系统迁移大事故的报告结果,出自 Slaughter and May 律所。

Bug 连篇、测试没做好、IT 服务商无能,这一切的一切,导致了灾难级后果。

当系统启用的时候,用户们纷纷发现自己的钱不见了、花一两块扣掉几千、账户被别人登录……

银行为了启用这个系统,投入了 2500 人年的成本;而事后为了补锅,也花费了高达 28 亿的资金。

系统迁移捅了 13 亿用户的娄子

故事,是从一桩 “离婚再嫁” 的案子开始的。

离婚再嫁的主角,是英国银行 TSB

2015 年,TSB 银行结束了与劳埃德银行(Lloyds Bank)长达 20 年的 “婚姻”,从他们合并的集团中拆分出来,并卖身给了新欢、西班牙公司萨瓦德尔(Sabadell)集团,收购价 17 亿英镑,按当时的汇率大概是 158 亿人民币。

然而,过去的 20 年,世界变了太多,银行业也进步了太多。20 年的 “婚姻” 留给 TSB 银行的,还有和 “前夫” 剪不断理还乱的 IT 系统。

TSB 银行 540 万客户的数十亿记录,都还留在 “前夫” 劳埃德银行的系统里,而且因为缘分已断,不能白嫖人家的系统,每年还要给前夫交 1 亿英镑(大约 9.3 亿人民币)的费用。

这就好像肉身虽然已经和 “新欢” 在一起,但支付宝和微信账号还是跟 “前夫” 共用一套,而且还要给 “前夫” 付账号租金,自然令人不爽。

于是,在筹备了许久之后,2018 年,他们终于要行动了:把 “前夫” IT 系统里的客户信息记录,迁移到 “新欢” 专门为 TSB 银行准备的新系统里。

他们把迁移的日子,定在了 4 月 22 日星期日的晚上,先把银行的 IT 系统离线,迁移完之后再上线,恢复客户访问自己银行账户的权限。

为了这场迁移,他们已经投入了超过 2500 人年的人力成本,西班牙 “新欢” 集团的 CEO 在前一年的圣诞节就大声放话:这是全欧洲史无前例的大项目,我们投入了 1000 多名专业人才,将极大地促进我们在英国的增长。

不过,虽然大佬们在台上豪言壮语,实际上负责迁移的员工们心里却慌得一逼。这个迁移项目本来要筹备 18 个月,结果时间超了,预算也超了,事情难办的很。

Flag 果然不能立太早,打脸的结果很快就来了。

迁移结束,客户的访问权限,他们以为万无一失,但就在 20 分钟后,收到了问题报告:

有的客户发现自己的钱不见了;

有的客户花了一点小钱,账户里却记录成了花费数千美元;

有的客户登录上去之后,发现不是自己的账户,而是看到了别人的银行账户。

13 亿客户的账户记录都出了问题,于是,他们把 TSB 银行骂成狗,金融监管机构们则连夜找银行喝茶。

而此后的几个星期,银行都在拼命的恢复系统,但数以百万计的客户们已经人心惶惶,拼命的把自己存在 TSB 银行的钱取出来。

TSB 银行,被自己捅的篓子扔进了地狱模式。

而问题的根源,在于测试。

英国金融监管机构金融行为监管局(FCA)首席执行官 Andrew Bailey 在事故几周后对外公开表示,造成系统混乱的很大原因在于缺少测试,而 TSB 银行请来救急的 IBM 专家也发现,TSB 银行没有采用严格的上线标准。

而且由于地球上的金融体系都是相连的,事故所造成的错误被永久的保留在了金融体系里,不可逆转。

这起弥天大祸,也让 TSB 银行赔了很多钱。为了赔偿客户、解决系统出问题后浑水摸鱼的交易、找第三方帮忙总共花了 3.302 亿英镑,按当时汇率算大约 28.4 亿人民币。

而 TSB 的乙方、IT 提供商 Sabis 也因为这起事故收到了 1.53 亿英镑(超过 13 亿人民币)的赔偿账单。

而受此影响,TSB 银行当年亏损了 1.054 亿英镑(9.2 亿人民币),CEO Paul Pester 引咎辞职。

业绩这么差,银行的经营也难以为继,今年 11 月底 TSB 关闭了英国 86 个分行,至少 400 个工作岗位也因此消失。

银行系统很复杂

信息化时代,银行的 IT 系统也变得越来越复杂。

六十年前,人们只能选择在柜台存取现金,普通客户并没有机会直接接触计算机系统。当时,银行虽然也启用了巨型计算机,但它们只会在一天或一周交易结束的时候对纸质数据进行汇总。

也就是说,银行的 IT 系统仅由银行员工使用,银行与客户在柜台上的交互用的还是纸质工具。

这种情况在 1967 年发生了改变。

这一年,世界上第一台自动柜员机(ATM)在英国诞生,并被安装到伦敦北部的巴克莱银行 Enfield 分行。从此,银行和客户交互的方式发生重大变革。

ITRS Group 首席执行官盖伊・沃伦(Guy Warren)解释说:

直到真正的 ATM 和在线银行业务出现,公众才可以直接访问银行的 IT 系统。

这还仅仅是个开始。

全球互联的时代,互联网和移动银行的发展进一步拉近了客户和银行 IT 系统之间的距离,而这样的系统,也越来越成为银行赖以运营的关键所在。

或许你会觉得,登个支付宝 / 微信,亮出付款码,让小钱钱在银行跟银行之间发生小小的流动,并没有什么难度。但事实上,每一次信息的加载和刷新背后,都发生了复杂的数据移动 ——

每一次动作可能关联到许多个单独的系统,所有这些系统都必须彼此交互,并与核心大型计算机连通。系统要现在后端复制数据,将现金从一个账户转移到另一个账户,保持同步更新。

而这样的运算量,还要乘以数十亿倍

根据世界银行的数据,现在,全球至少有 69% 的成年人都拥有银行账户。人们每一天都在通过银行账户支付账单、贷款还款、订阅各种服务…… 并且,这些活动常常是跨行,甚至跨国进行的。

一家银行内部的多个 IT 系统(移动银行、ATM 等),不仅需要彼此交互,甚至还必须跟其他国家的银行建立联系。比如我在国内办了一张 visa 信用卡,在美国也要能消费才行。

迁移问题很麻烦

TSB 正是栽在了这样的高度复杂性上。

IBM 在为 TSB 编写的报告中指出:新应用程序的组合,对先进微服务的应用和双活数据中心的使用,导致了 TSB 生产中的复合风险。

如何正确地处理银行 IT 系统迁移中出现的问题,对于任何一个银行来说,都是不小的挑战。

其中,大量的事前规划和测试工作是不可避免的。

像汇丰银行这样的跨国银行,具有高度复杂、相互关联的系统,这些系统会定期进行测试、迁移和更新。

即使在这方面如此经验丰富,汇丰银行的前 IT 主管兰开斯特仍坦承:诀窍就是让员工在这件事上付出更多的时间。

他还指出,TSB 的 IT 系统迁移是一件很复杂的事:

我不确定他们是不是真的意识到了这件事的复杂程度。他们甚至没有完全想好要怎么去测试系统。

FCA 首席执行官 Andrew Bailey 则表示:

TSB 的这一事故反映出他们缺少强大的回归测试

注:回归测试是软件测试的一种,旨在检验软件原有功能在修改后是否保持完整

而最新的事故报告也引起了 hacker news 上网友们的热烈讨论。

有网友表示,如果 TSB 能选择小规模多次迁移,而不是在某一天进行大爆炸式迁移,那这种严重的事故可能就不会发生。

花几周 / 几个月的时间在生产过程中进行检查,以确保旧数据库和新数据库返回的结构相同。最终,将数据都转移到新数据库中,并在一段时间之后再关闭旧的数据库。这样做效果是比较好的。

而对测试不足导致了银行系统瘫痪的这一调查结论,有人吐槽说:

作为测试工程师,我一点也不意外。花费更多的时间、投入更多的人员来打造更好的测试架构,对于很多公司来说都是 “可以节省的成本”。

经理们总是在设定的上线日期前问:“测试咋能花那么多时间?!” 真要出事了他们又开始甩锅了。

也有网友严厉批评道:TSB 的问题不应该说是测试不足,而是在多个层面上都测试不足,并且缺少可恢复的备份。

也有人指出,避免出错最简单的办法就是减少变化。

问题在于,无论是银行还是其他领域的公司,业务都是在不断进化的。

根据 FCA 发布的数据,从 2017 年到 2018 年,英国金融服务部门报告的技术中断增加了 187%。

盖伊・沃伦就认为:系统停机不会消失。问题在于,可接受的度在哪里?

你怎么看呢?

参考链接:

https://news.ycombinator.com/item?id=21870089
https://www.tsb.co.uk/news-releases/slaughter-and-may/
https://www.tsb.co.uk/news-releases/slaughter-and-may/slaughter-and-may-report.pdf
https://increment.com/testing/what-broke-the-bank/
https://www.ft.com/content/d1f37ab2-0eb8-11ea-a225-db2f231cfeae

推荐阅读:
编程能力与编程年龄让开发效率 “飞起” 的 VS Code 插件最新世界大学排名:计算机专业哪家强?对不起,学会这些计算机基础知识后我飘了未来有望干掉 Python 和 JavaScript 的编程语言

这篇关于2000 多个 Bug!让银行瘫痪、13 亿人账户出错、最终损失超过 28 亿的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/532171

相关文章

MySQL多实例管理如何在一台主机上运行多个mysql

《MySQL多实例管理如何在一台主机上运行多个mysql》文章详解了在Linux主机上通过二进制方式安装MySQL多实例的步骤,涵盖端口配置、数据目录准备、初始化与启动流程,以及排错方法,适用于构建读... 目录一、什么是mysql多实例二、二进制方式安装MySQL1.获取二进制代码包2.安装基础依赖3.清

JAVA中安装多个JDK的方法

《JAVA中安装多个JDK的方法》文章介绍了在Windows系统上安装多个JDK版本的方法,包括下载、安装路径修改、环境变量配置(JAVA_HOME和Path),并说明如何通过调整JAVA_HOME在... 首先去oracle官网下载好两个版本不同的jdk(需要登录Oracle账号,没有可以免费注册)下载完

如何在Mac上彻底删除Edge账户? 手动卸载Edge浏览器并清理残留文件技巧

《如何在Mac上彻底删除Edge账户?手动卸载Edge浏览器并清理残留文件技巧》Mac上的Edge账户里存了不少网站密码和个人信息,结果同事一不小心打开了,简直尴尬到爆炸,想要卸载edge浏览器并清... 如果你遇到 Microsoft Edge 浏览器运行迟缓、频繁崩溃或网页加载异常等问题,可以尝试多种方

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

安装centos8设置基础软件仓库时出错的解决方案

《安装centos8设置基础软件仓库时出错的解决方案》:本文主要介绍安装centos8设置基础软件仓库时出错的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录安装Centos8设置基础软件仓库时出错版本 8版本 8.2.200android4版本 javas

Python函数返回多个值的多种方法小结

《Python函数返回多个值的多种方法小结》在Python中,函数通常用于封装一段代码,使其可以重复调用,有时,我们希望一个函数能够返回多个值,Python提供了几种不同的方法来实现这一点,需要的朋友... 目录一、使用元组(Tuple):二、使用列表(list)三、使用字典(Dictionary)四、 使

linux服务之NIS账户管理服务方式

《linux服务之NIS账户管理服务方式》:本文主要介绍linux服务之NIS账户管理服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、所需要的软件二、服务器配置1、安装 NIS 服务2、设定 NIS 的域名 (NIS domain name)3、修改主

一文教你如何解决Python开发总是import出错的问题

《一文教你如何解决Python开发总是import出错的问题》经常朋友碰到Python开发的过程中import包报错的问题,所以本文将和大家介绍一下可编辑安装(EditableInstall)模式,可... 目录摘要1. 可编辑安装(Editable Install)模式到底在解决什么问题?2. 原理3.

Java中Switch Case多个条件处理方法举例

《Java中SwitchCase多个条件处理方法举例》Java中switch语句用于根据变量值执行不同代码块,适用于多个条件的处理,:本文主要介绍Java中SwitchCase多个条件处理的相... 目录前言基本语法处理多个条件示例1:合并相同代码的多个case示例2:通过字符串合并多个case进阶用法使用

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、