大型银行从Java迁移到C++:一年后的成果
2021年初,一家俄罗斯系统重要性银行(消息人士称是“阿尔法银行”)做出了一个激进的决定:将其高负载交易系统的核心从Java替换为本机C++代码。迁移完成一年后,管理层分享了初步成果。数据令人印象深刻。
根据内部报告,关键服务的性能提升了40–60%。单笔交易的平均处理时间(P99)从12毫秒降至4.5毫秒。主要原因是放弃了Java虚拟机(JVM)和垃圾回收器,后者在峰值负载时曾导致长达200毫秒的延迟。“在C++中,我们实现了确定性的内存管理——这在高峰时段消除了90%的延迟问题,”新闻办公室援引开发部门技术总监的话说。
然而迁移并不轻松。120人的开发团队中有35人因不愿转岗而离职。银行不得不从金融科技和游戏开发市场招聘50名C++工程师,平均薪资上涨了25%。迁移耗时14个月,花费约23亿卢布(包括重写代码、测试和调试)。
经济效益:基础设施运营成本降低了30%——处理相同交易量所需的服务器减少了40%。项目预计在2.5年内收回成本。银行代表在HighLoad++ 2022大会上补充道:“我们不打算重写所有内容。前端和移动应用将保留在Java/Kotlin上。但核心——必须使用本机代码。”
专家意见不一。一些人认为,对于高频交易和结算,C++是合理的。另一些人则提醒风险:内存泄漏和遗留代码维护的复杂性。“Java是开发速度与性能之间的折衷。这家银行选择了执行速度,代价是开发速度。我们拭目以待五年后的情况,”TAdviser首席分析师评论道。
尽管如此,市场中的其他参与者已经在研究这个案例。据传,俄罗斯联邦储蓄银行和俄罗斯外贸银行也已启动试点项目,将部分微服务迁移到C++和Rust。