Adam DePrince 在木刻风格的软件工作室里,身边是穿着裤子的丝羽乌骨鸡

行情数据 / 数据库 / 系统工程

Adam DePrince.

我构建行情数据流水线及其背后的服务系统。

历史数据处理、紧凑数据库结构、分层存储和实时行情接入。我的工作从解析与内存布局延伸到事件分发和系统运行测量。

主要项目:处理历史行情的 massive-speedup、实现紧凑数据库结构的 Goblin Core,以及探索存储层次的 Goblin Store。

自 1989 年起构建生产软件

代码背后的经历

我的工作涵盖 Quantlab 和 Massive.com 的量化与行情系统、S&P Global 的大规模金融数据,以及 Google 和 Amazon 的系统工程。下面的开源项目公开了我目前在数据接入、传输、重放和系统运行方面的工作。 数据系统主要使用 C++ 和 Python,终端文字处理器使用 Rust 编写。

部分开源项目 / 行情与数据库

行情数据:从存储到交付

先看 massive-speedup、Goblin Core 和 Goblin Store:历史数据、数据库内部机制和存储层次。下面的行情接入与消息传输项目将这些工作延伸到实时系统。

历史行情 / 存储 / 因果重放

massive-speedup

读取 处理 Massive 的压缩历史数据,构建按时间戳排序的存储。

重放 按时间顺序推进市场事件,支持可配置延迟及考虑买卖报价的订单模拟。

语义 策略代码无法读取未来成交价,订单使用配置延迟之后可见的买价或卖价。

系统中的位置 参考系统将历史路径与 Goblin Slurp 的实时接入、RTTA 的流式分析结合起来。

数据库内部机制 / 紧凑索引 / C++23

Goblin Core

结构 Redis 兼容操作,包含带类型的紧凑有序集合、Swiss 哈希表和使用内存池索引的 B+ 树。

测量 在 Wikipedia 重放中,8080 万个 INT32/FLOAT32 页面计数器的最终进程 RSS 为 2.10 GiB,并通过完整状态映射验证。

可检查内容 阅读布局、工作负载与结果。RESP/SBE 传输和 Pub/Sub 同时支持实时事件总线。

存储层次 / 内存与 I/O / C++23

Goblin Store

设计 NUMA 感知、兼容 Memcached 的大对象缓存与 HTTP 服务器。

数据路径 在 RAM 中保留延迟敏感的对象头部,从 SSD 流式读取温数据,并预读 HDD 上的冷尾部。

证据 与 Memcached 和 extstore 的公开比较包含工作负载、延迟、内存和存储成本上下文。

实时行情接入 / C++23

Goblin Slurp

接入 原生桥接程序接收经过授权的商业 WebSocket 行情,将源数据帧拆分为独立事件。

规范化 向 Goblin Core 发布 JSON 或 SBE 事件,供下游订阅者使用。

流量控制 使用有界队列和显式背压,将接入与发布之间的交接纳入系统设计。

实际用途 它是我的研究与日内交易参考系统中的实时行情接入组件,Goblin Core 负责内部扇出。

抓包分析 / 延迟与丢包

Latency Lab

输入 PCAP、PCAPNG 和 Nasdaq 风格的二进制抓包。

分析 模拟速率、分帧、排队和压缩阶段,报告逐层延迟分布、最高至 p99.99 的分位数,以及精确的丢包归因。

范围 模型未计入压缩计算时间;公开文档明确说明了这一假设。

消息传输 / 组播 / Python 集成

Aeron over InfiniBand

传输 Aeron 的 InfiniBand 传输扩展,支持 UD 与 RC、组播、零拷贝发送,并提供公开硬件基准。

集成 pyaeron 提供原生 CPython 绑定,支持 IPC、UDP、可选的嵌入式媒体驱动和 Python 缓冲区直接处理。

下游消费 / 流式状态

RTTA

状态 319 种公开因果算法,覆盖指标、在线模型和流式研究信号,提供 C++23 与 Python API。

语义 在重放和实时运行中,每次接收一条观测并向前推进状态。

证据 公开基准说明算法覆盖范围和 CPU 环境,并分别测量纯状态更新与返回 Python 结果的成本。

组件如何协同运行

一套完整的参考系统

Massive 的历史与实时数据分别通过 massive-speedup 和 Goblin Slurp 接入。Goblin Core 分发实时事件,RTTA 推进分析状态,Jinghong 路由仓位意图,Hyperion 提供操作员控制。

该部署使用 Massive 和 Alpaca,面向研究与日内策略。架构文档说明数据路径、心跳约定、重启后的预热,以及操作员如何主动干预。

阅读架构与运行行为

工程笔记

有证据的调查

正确性和运行行为需要比一个漂亮的延迟中位数更多的证据。这些文章通过仪器观测和受控实验追踪问题,并说明结果的适用范围。

时钟行为

更快,不等于更好

更快的数据包路径反而加剧了时钟抖动:对四种网络路径的计时、争用和恢复行为进行研究。

尾延迟诊断

拖垮尾延迟的引导监听器

序列与消息交付检查排除了丢包;跟踪最终发现,一个非阻塞 accept 循环让服务器停顿。

基准验证

嘈杂的基准测试机器

受控测量揭示测试环境噪声后,一个负面的编译器测试结论发生了变化。

数据库内部机制

2.10 GiB 容纳 8080 万个 ID

在包含 14.8 亿次更新的 Wikipedia 重放中,研究带类型的记录、紧凑索引与完整状态验证。

更多性能工程 / cppdjango

Django 6.0.7。
移植到 C++。

cppdjango 保留熟悉的 Django API 和普通的 import django 接口, 同时把经过测量的 PostgreSQL ORM 终端路径移入原生代码。

在由点查询、有序 IN 查询和点更新组成的平衡测试中,框架侧 ORM 工作的 CPU 性能提高 436%, CPU 消耗减少 81.4%。数据库本身没有变快,项目也不声称每一个 Django API 都获得了同样的加速。

运行时 / Rust / 存储 / 算法

覆盖其他层次的系统工程

对解析、内存、状态和测量的关注,同样贯穿我的 Rust 终端软件、存储服务器和数值计算库。

Rust / 终端软件

Goblin Purrfect

编辑器 使用 Rust 编写、受 WordPerfect 启发的原生 Unicode 文字处理器。

实现 公式解析和交互预览在编辑器内部运行,使用真实字体轮廓,以及 Kitty、Sixel 或 Unicode 盲文点阵绘制。

格式 支持图像、Markdown 互转和 LaTeX/PDF 输出。阅读项目介绍与文件兼容性限制。

SIMD 序列算法

stride-align

问题 比对和距离算法拥有昂贵内循环,而且不同 CPU 的指令集差异巨大。

工作 面向 C++ 与 Python 的 Smith-Waterman、Needleman-Wunsch、编辑距离、语音编码和时间序列距离。

证据 基准公开后端、评分、位宽、工作负载和 CPU 上下文,而不是给出一个万能加速比。

LoongArch 优化

DragonArray

问题 当上游软件停留在通用代码或较窄向量扩展时,有用的硬件也会表现缓慢。

工作 可安装的 LoongArch 软件包、NumPy LASX、SIMD 超越函数和 BLAKE3 LoongArch 移植。

证据 补丁与基准一起发布,让架构支持成为用户可以运行的东西,而不是幻灯片。

小型状态估计

fast-kalman

问题 小型状态空间模型不应该承担动态矩阵或逐次 Python 调用的高额开销。

工作 固定尺寸 C++23 Kalman 变体、直接 Python 绑定,以及支持不规则时间与观测方差的批量更新。

测量 公开的二状态、单观测线性批量案例在文档所述机器上每个测量值约需 43 ns。

外部排序

bsort

问题 当定长记录数据集大于 RAM 时,局部性和缓存行为本身就成为算法。

工作 面向局部访问、可预测记录和 LRU 友好行为设计的 C++ 与 Python 外部排序器。

历史 这个实验后来成为一家创业公司的技术基础,并继续以开源形式提供。

更多系统工程

实验、移植和实用工具

更多关于终端会话、运行时内部机制、处理器架构支持和实用工具的工作。《如果当年胜出的是终端?》介绍 Goblin Mosh、GoblinView、Inkline 和上面的 Rust 编辑器 Goblin Purrfect 如何协同工作。

远程终端会话

Goblin Mosh

Mosh 分支,支持网络漫游、预测式本地回显、静态 Kitty 图形,以及优先保障交互输入的后台文件传输。

窄带链路 / 网状无线电网络

Goblin Modem

在 macOS 上使用 pf,对低速或按流量计费的链路实施网络接口级流量控制;通过 goTenna Mesh 网络发现对等节点并共享互联网出口;经由两台无线电设备传输 Goblin Mosh 会话,终端图形使用 DjVu 压缩。面向 macOS 和 Debian/Ubuntu 的开发预览版。

电子纸终端 / reMarkable 2

Inkline

面向 reMarkable 2、支持 Kitty 的终端模拟器和小型 Unix 工作环境,提供 USB 键盘模式,可将草稿作为键盘输入发送到另一台计算机。0.4.10 预览版,采用 GPLv3-or-later 许可。

终端窗口管理器

GoblinView

持久会话搭配可重叠、可移动的终端窗口,支持鼠标交互、Kitty/Sixel 图形及两种协议之间的转换。

数学 / 无障碍阅读

mathspeak

从 TeX 直接生成的 PDF 中还原公式,用于语音朗读,或导出为 LaTeX、MathML、AsciiMath、Word 和 WordPerfect 5.1 格式。

解释器内部机制

CPython SIMD

面向编解码器、文本、字节、JSON、CSV、URL 和哈希表的运行时 SIMD 实验。

数值计算

NumPy LASX

面向 Loongson 系统的 256 位 LASX 概念验证移植。

增量图搜索

negcycle

在单个报价变化后精确分析货币循环的 SIMD Bellman-Ford 路径。

模拟信道 / 高频天波

Goblin Cannon

开放的高频天波行情数据传输路径,连接芝加哥与上海,路线最高纬度接近 71°N。记录了涵盖 BPSK、QPSK 和 8-PSK 的 908 次模拟信道运行;24 项配置全部满足 2.1 ms 的处理预算;其余缺陷已在项目页面列出。尚未进行实际无线电发射。

推荐系统

Goblin Recommends

一个实时演示:每收到一个偏好信号,就重新排列现有文章,并可调节兴趣分离程度和推荐结果的多样性。

采购与分类

搜索工具

NAICS 与 CPV 语义代码查找器。

Goblin Reactor

把棘手的系统问题带给我

我用开放系统证明能力。Goblin Reactor 把这些能力带进客户系统:应用运行时、 数据库、内存、存储、网络、原生代码和生产行为。

告诉我哪里慢
电子邮件
f"{given_name.lower()}.{family_name.lower()}@gmail.com"
电话
f'{2**8}-{2*3**2*37}-{13*101}'
GitHub
github.com/adamdeprince
开发笔记
adamdeprince.com/zh-CN/blog