分布式 / 数据库 / 网络

2026-W10 阅读集,8 篇。三条主线:分布式一致性理论与实践数据库技术四连底层网络与运行时黑科技


分布式一致性

ZZ-800 · Peter Bourgon: Consistency Without Consensus

链接: https://www.youtube.com/watch?v=em9zLzM8O7c
演讲者: Peter Bourgon(SoundCloud 基础设施工程师,Go 社区知名人物)
时长: 41 分钟

核心命题: 不要用 Paxos/Raft 硬解所有分布式问题。CRDT(Conflict-free Replicated Data Types)可以在完全无共识的情况下实现可证明的最终一致性。

理论基础

  • CALM 原则(Consistency as Logical Monotonicity):系统只朝一个方向增长,天然避免冲突
  • ACID 2.0(不是传统 ACID):Associative + Commutative + Idempotent — 满足这三条性质即为 CRDT,可证明最终一致,无需协调

SoundCloud Roshi 实战

播放计数器问题: 整数加法不幂等 → 重建模为 user ID 集合,Union 做 merge,幂等性自然满足

Activity Feed (Roshi) 架构 — 4 层:

  1. Redis 分片 — 底层存储,sorted set + Lua 原子操作
  2. Pool 映射 — 管理分片路由
  3. Cluster — 暴露 CRDT 语义(修改版 LWW-Element-Set)
  4. Farm — 多副本 + 写 quorum,读时 fan-in

读取优化策略:

  • 90% 直接返回第一个 cluster 响应(低延迟)
  • 后台 targeted read-repair
  • 低频 key 每 8 小时全扫

开源: ~2000 行 Go,github.com/soundcloud/roshi

金句: “Sometimes that requires bending the problem rather than trying to hammer it into a square-shaped hole.”

亮点: 这个演讲的精髓是”重新建模问题”——播放计数不是一个整数,而是一个集合。这种思维方式转换是 CRDT 实用化的关键。


ZZ-564 · Disaggregated OLTP Systems — 存算分离数据库全景

链接: https://transactional.blog/notes-on/disaggregated-oltp

云原生时代 OLTP 数据库架构的系统性梳理,覆盖学术界和工业界主要论文。

核心思想:Log is the Database

Aurora 首创的设计哲学:存储层只需要理解 redo log,计算层不再负责落盘。这一理念催生了整个存算分离数据库生态。

主要系统对比

系统厂商关键指标
AuroraAmazon35x TPS 提升,87% IO 减少
SocratesMicrosoft (SQL Server)四层解耦架构
PolarDB阿里云共享分布式存储
TaurusDB / GaussDB华为国内自研存算分离

亮点: 这篇 Notes 带★标注推荐论文,是进入存算分离 OLTP 领域的最佳导读。


跨文连线:ZZ-800 vs ZZ-564

  • ZZ-800(CRDT)选择放弃强一致性,用数学性质保证收敛 → 适合写多读多、可接受最终一致的场景(feed、计数)
  • ZZ-564(存算分离 OLTP)通过共享日志维持强一致,用网络换 IO → 适合传统 OLTP 工作负载
  • 两者代表分布式系统设计的两条路:relaxed consistency vs shared truth

数据库四连

ZZ-569 · Postgres JSONB Columns and TOAST Performance Guide

链接: https://www.snowflake.com/en/engineering-blog/postgres-jsonb-columns-and-toast/

深入解析 PostgreSQL JSONB 遇到 TOAST 机制时的性能陷阱。

TOAST 机制回顾

PostgreSQL 对超过 ~2KB 的字段自动启用 TOAST(The Oversized-Attribute Storage Technique):压缩或切片存入侧表(pg_toast_*)。每次访问含 TOAST 字段的行都需要额外 IO。

“TOAST 税”实测

场景查询延迟
10K 行,40KB JSON,直接查500ms(TOAST 税)
Generated Column(提取常用字段)5ms
Expression Index80ms
GIN Index(精确值匹配)23ms

三种逃生方案

  1. Generated Columns(最优)ALTER TABLE ... ADD COLUMN field TEXT GENERATED ALWAYS AS (data->>'field') STORED,物理存储为真实列,查询最快
  2. Expression Index — 不存数据,但加速 WHERE 过滤
  3. GIN Indexjsonb_path_ops,适合精确包含查询

核心教训: 把可预测、高频访问的 JSONB 字段提取为普通列;JSONB 只存真正灵活/稀疏的部分。


ZZ-599 · LLMs Are Good at SQL — Mendral 用 AI 查 TB 级 CI 日志

链接: https://www.mendral.com/blog/llms-are-good-at-sql

Mendral 公司让 AI agent 通过自由编写 SQL 查询 ClickHouse 中的 TB 级 CI 日志,实现自动化 flaky test 根因分析。

惊人规模

  • 每周 15 亿日志行、70 万 jobs → 全部进 ClickHouse
  • 压缩比 35:1;5.31 TiB 未压缩 → 154 GiB 磁盘(每行含全部元数据仅 21 字节!)
  • commit_message 字段单独压缩比 301:1

Agent 工作模式

8534 次调查,52312 条查询(平均每次 4.4 条 SQL):

先广后深策略:
job 元数据(便宜,索引好)→ 原始日志行(贵,全文搜索)

典型扫描:33.5 万行;P95:9.4 亿行

关键设计洞察

SQL > 固定 API — 给 agent 一个 SQL 接口,而不是 get_failure_rate() 这类预设函数。LLM 能问出设计者没预想到的问题。

ClickHouse 优化技巧:

  • 主键排序(降低扫描范围)
  • Bloom filter skip index
  • ngram 全文搜索
  • 物化视图预聚合常用统计

反直觉设计: 每行日志带 48 列元数据(完全反规范化),但列式存储 + 压缩让这几乎免费。

亮点案例: agent 追踪一个 flaky test 到 3 周前的依赖升级,数百次查询数亿行日志,几秒完成。这就是”给 LLM 结构化数据访问”的威力。


ZZ-623 · SQLRooms — DuckDB-WASM 浏览器端数据分析

基于 DuckDB-WASM 的 React 组件库,让浏览器成为完整的数据分析环境。

亮点: 零后端、零服务器,直接在浏览器内运行 DuckDB,查询本地文件(CSV/Parquet)或远程数据源。构建块设计,可嵌入任意 React 应用。


ZZ-617 · DuckDB in Action — Manning 新书

Manning 出版的 DuckDB 实操指南,韩文版已出版。

亮点: DuckDB 生态成熟度的标志——有 Manning 级别的书,说明这不再是小众工具。


跨文连线:数据库四连

ZZ-569(Postgres JSONB)→ 传统 RDBMS 的性能精调
ZZ-599(LLM + ClickHouse)→ 列式 OLAP 的 AI agent 接入
ZZ-623(DuckDB-WASM)→ 浏览器端嵌入式 OLAP
ZZ-617(DuckDB书)→ 嵌入式 OLAP 生态成熟

四个维度:调优、AI 接入、端侧部署、学习资源。DuckDB 占了后三席,俨然成为新一代数据分析基础设施。


底层网络与运行时

ZZ-637 · libp2p vs WebRTC — P2P 技术选型

深入对比两种 P2P 网络技术。

定位差异

WebRTClibp2p
层次低级 P2P API(浏览器原生)高层模块化 P2P 网络栈
开发者W3C/IETF 标准Protocol Labs
传输单一(DTLS/SRTP/SCTP)多种(TCP/QUIC/WebRTC/WebTransport)
内置能力音视频 + 数据通道Peer Discovery、DHT、PubSub、Relay
适用场景浏览器音视频/数据实时通信构建完整 P2P 网络(IPFS、区块链节点)

关键关系:不是竞争,是包含

libp2p 将 WebRTC 作为传输层之一使用,专门用于:

  • 浏览器 ↔ 服务器连接
  • 浏览器 ↔ 浏览器连接(无需 CA 证书即可加密,优于 WebSocket)

NAT 穿透

  • WebRTC:公网 NAT 穿透成功率约 80%(STUN/TURN)
  • libp2p:有 relay 机制作为 fallback,成功率更高

亮点: 很多人把两者对立,实际上选择 libp2p 并不排斥 WebRTC——libp2p 在需要时会用 WebRTC 做传输。真正的选择是:直接用 WebRTC API,还是要 libp2p 提供的上层抽象(路由、发现、多协议)。


ZZ-633 · Apple Rosetta 2 Linux VM 揭秘

链接: https://blog.inoki.cc/2026/02/28/Apple-Rosetta-Linux-VM-Secret/

ARM64 内核上如何伪装成 x86-64 运行环境——Rosetta 2 在 Linux VM 中的实现黑科技。

架构欺骗三层

  1. 系统调用拦截uname() 返回 x86_64,让程序以为自己在 Intel 机器上
  2. 硬编码 CPU 信息/proc/cpuinfo 的 model name、MHz、cache 全是假数据
  3. 三层翻译 — 静态翻译(AOT) + 动态翻译(JIT) + 系统调用映射

但有一个漏洞:/proc/device-tree 会暴露真实的 arm-v8 硬件信息。

实际意义

OrbStack 和 Docker Desktop 的 linux/amd64 支持就是用这套技术实现的。 你在 M1 Mac 上跑 x86 Docker 镜像时,底层经历了:

x86-64 二进制
  → Rosetta 2 翻译(指令集)
  → ARM64 Linux 内核(系统调用被映射)
  → Apple Hypervisor(虚拟化)
  → M 系列芯片(实际执行)

彩蛋: 这篇文章的作者正在为 libvirt 开发 Virtualization.framework 后端,他的工作会让 Linux 上的 macOS 虚拟化栈更完整。

亮点: Rosetta 2 最常被描述为”无缝透明”——这篇文章把黑盒打开了,透明背后是精心设计的系统级欺骗。


跨文连线:ZZ-637 + ZZ-633

两篇都在研究”抽象层下面发生了什么”:

  • libp2p 把 WebRTC 包装成传输层 → 用户看到的是统一 P2P 接口
  • Rosetta 2 把 ARM 伪装成 x86 → 用户看到的是无缝兼容

底层黑科技让上层开发者无感知,这是系统软件最优雅的地方。


本周总结

主题代表条目核心洞察
CRDT 无共识一致性ZZ-800重建模问题,而非强套共识协议
存算分离 OLTPZZ-564Log is the database
Postgres 性能调优ZZ-569JSONB + TOAST = 性能陷阱,Generated Column 是出路
LLM + OLAPZZ-599给 AI 一个 SQL 接口比固定 API 强 10 倍
DuckDB 生态ZZ-623 + ZZ-617嵌入式 OLAP 正在成为标准基础设施
P2P 选型ZZ-637libp2p ⊃ WebRTC,不是竞争关系
运行时黑科技ZZ-633Rosetta 2 靠系统级欺骗实现透明兼容

Takeaway