Hacker News 中文摘要

RSS订阅

银行Python的口述历史(2021) -- An oral history of Bank Python (2021)

文章摘要

这篇文章介绍了大型投资银行内部使用的“银行Python”系统,这是一种对标准Python生态系统的专有分支,与常见Python差异显著。作者通过虚构的“Minerva”系统,揭示了这些鲜为人知的软件系统的奇特运作方式。

文章总结

好的,这是根据您的要求,对原文主要内容进行的中文重述,保留了核心细节,并删减了与主题无关的评论性内容。


文章标题:大型投资银行使用的Python:一个口述历史

核心内容:

本文介绍了一种不为公众所熟知的软件系统——“银行Python”。它本质上是整个Python生态系统的专有分支,被许多大型投资银行使用,与常见的Python版本差异巨大。文章通过一个虚构的、综合性的系统“Minerva”来阐述其特点。

1. Barbara:全局键值存储

Minerva构建在一个全局的Python对象数据库Barbara之上。它是一个极其简单的键值存储系统,使用picklezip实现,拥有层级化的键空间和多个“环”(命名空间)。默认环是一个全银行共享的单一对象数据库,用于存储交易数据、工具数据、市场数据等。应用程序也常将内部状态存入Barbara。Barbara的节点会复制写入,提供最终一致性,但可通过连接特定实例实现强一致性。它非常健壮,但对象大小有约16MB的软限制,且不适合需要大量二级索引的场景。

2. Dagger:金融工具的有向无环图

Dagger用于管理金融工具之间的估值依赖关系。金融工具(如债券、衍生品)的价值可能依赖于其他工具,形成有向无环图。Dagger追踪这些依赖关系,当底层工具价值变化时,自动重新计算所有受影响的衍生品价值。它支持将金融模型从Excel迁移到Python,实现测试和版本控制。Dagger不仅处理估值,也处理银行用于风险管理的各种“风险指标”,例如快速计算整个银行对某家公司的总风险敞口。

3. Walpole:全行作业运行器

Walpole是一个全行统一的作业运行器,类似于Jenkins和systemd的结合体。源代码也存储在Barbara的一个特殊环中,而非文件系统。Walpole负责运行长期服务、周期性任务(如每日/每周的数据更新)和构建。它具备重启、告警、日志记录和作业依赖管理功能。其最大优势是降低了部署门槛:只需一个简单的INI配置文件,任何人都可以部署作业,无需复杂的硬件或团队协商,这比当前复杂的“云原生”技术栈(如Kubernetes)更易用。

4. MnTable:通用表格库

Minerva使用专有的表格库MnTable,而非开源的pandas。MnTable支持内存密集、易于磁盘读写、可通过B树索引高效访问、支持批量操作和惰性求值。它在银行中广泛使用,因为银行数据多为“中等规模”(GB级别),既不能为每行创建对象,也无需分布式计算集群。

总结与特点:

  • 数据优先:Minerva的设计是“数据优先”而非“代码优先”。数据被组织成表格,代码独立存在,这与面向对象设计(围绕行为组织代码)形成对比。
  • 大一统:Minerva倾向于使用一个大型的、统一的组件(一个代码库、一个数据库、一个作业运行器),这消除了许多偶然的复杂性,使得从编写脚本到生产环境部署可以在一小时内完成。
  • 与Excel的渊源:Minerva深受金融行业技术路径依赖(尤其是Excel)的影响。任何新方案都必须与Excel比较。Minerva的简单Python函数方式,比微服务等“大企业技术”更能保留Excel用户的自主性和灵活性,让他们能学习并贡献代码。
  • 封闭性:Minerva与开源Python世界的差距日益增大,其内部拥有专有的IDE、Web框架等,体现了投资银行“只进不出”的开源态度,这被视为一种“非我发明”综合征,并导致员工在外部软件技能上的退化。

未涵盖的子系统:文章还提及了专有时间序列数据结构、变更审批系统、Dagger的时间旅行功能、非Git版本控制系统、基于Prolog的权限系统等,但未展开详述。

结语:作者认为,软件行业应更多地从现有系统(如Minerva)中学习其设计优劣,而非一味追求“颠覆”。这些“异域”系统的做法,虽然听起来可能荒谬,但能拓宽思路,促使我们反思自身实践。

评论总结

根据评论内容,总结如下:

主要观点与论据:

  1. 系统独特性与历史渊源:评论指出Barbara系统与Goldman Sachs的SecDB/Slang一脉相承,后经JPM和Merrill发展为Python版本(Alpha和Quartz)。关键引用:elemeno提到“much of this originated with SecDB/Slang at Goldman”;tsukikage解释“battle-hardened mature off-the-shelf solution did not exist at the time”。

  2. 内部生态的封闭性:评论强调这些系统形成独立IT世界,技能高度绑定,文档极差。关键引用:Havoc指出“these huge amounts of people that spend their entire working life inside this alternate IT reality”;skissane遗憾“they’ll likely never open source any of this stuff”。

  3. 技术实现特点:系统将源代码存储在数据库环中,与Haskell等传统做法形成对比。关键引用:TZubiri对比“this contrasts with Mercury's Haskell infra”;axus描述“source code is in Barbara too, not on disk”。

  4. 争议与质疑:部分评论质疑全局数据库的可行性,以及用户对“分钱”问题的敏感度。关键引用:jgalt212问“Is this really the case?”;horticulturist反驳“I’ve had clients ring up about pennies”。

平衡性说明:评论整体对系统表示惊叹,但Havoc、mhh__等指出其封闭性和维护困难,jgalt212和horticulturist则对具体细节提出质疑。