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 负责内部扇出。

消息传输 / 组播 / 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 都获得了同样的加速。

运行时 / 存储 / 算法

覆盖其他层次的系统工程

对解析、内存、状态和测量的关注,同样贯穿我的运行时优化、存储服务器和数值计算库。

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 外部排序器。

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

Iðunn / 开源终端工具

终端里的日常工具

Iðunn 汇集了我的终端、远程连接、邮件、文字处理、桌面工具,以及电子纸与 Android 环境,面向中低带宽链路设计。阅读这些终端项目如何协同工作。

终端模拟器 / macOS 与 Linux

Silkie

我的 kitty 分支增加了笔与触控输入、矢量图形、HDR 色彩和显示时序协议,让终端应用拥有更丰富的绘图与交互方式。

远程会话 / 窄带链路

Goblin Skiff

面向低速、不稳定链路的 Mosh 扩展分支。通过代理转发、文件传输、kitty 与 Silkie 图形、压缩和带宽节奏控制,在每个字节都很宝贵的连接上保持远程会话可用。

邮件 / Alpine 分支

Skaði

Alpine 的分支,支持内嵌图像、富文本撰写、离线邮件,以及 kitty 与 Silkie。延续 Pine 风格,用键盘处理邮件。

终端桌面 / 持久会话

Hliðskjál (Odin)

原名 GoblinView。终端多路复用器,提供 DESQview 风格的重叠窗口、可移动与调整大小的工作区、持久会话,以及窗口内完整的 kitty 图形支持。

电子纸终端 / reMarkable 2

Inkline

面向 reMarkable 2 的终端模拟器,通过 Type Folio 或外接键盘,在电子纸上运行命令行、文本应用与终端图形。终端代理可防止平板上与工作无关的流量占用窄带链路。

图形桌面查看器

Goblin Scry

在支持 kitty 图形的终端内查看 RDP、VNC,以及本地 X11 或 Wayland 桌面。Scry 将画面划分为字符大小的单元,只重传发生变化的部分,也能在 Hliðskjál(Odin)中运行。

Android 上的 Linux / Debian

GoblinReactor for Android

Android 上的 Linux 环境,使用真正的 User-Mode Linux 内核运行 Debian,并提供原生 Silkie 终端。支持 kitty 图形、多终端会话、笔与触控输入,应用更新后保留 Linux 文件。

更多系统工程

实验、移植和实用工具

更多关于无线电链路、运行时内部机制、处理器架构支持和实用工具的工作。

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

Goblin Modem

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

解释器内部机制

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 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