犀牛鸟 2026 研究笔记 estelledc.github.io

CockroachDB 深度解读

“Google Spanner 设计理念的工业级开源落地——每个节点都是完整的数据库”


一句话定位

CockroachDB 是 Cockroach Labs 研发的 PostgreSQL 兼容云原生分布式 SQL 数据库,直接复刻 Google Spanner 的全局一致性设计,每个节点存算一体、自动分片、自动均衡、强一致事务。

设计哲学上最精彩的地方

CockroachDB 最精彩的决策是“每个节点都是完整的数据库”

想象一个连锁便利店,每家店既能收银又能管库存,总部不需要专门的”存储中心”。任何一家店倒闭,客户去隔壁照常买东西。这种存算一体的设计消除了单点依赖,把高可用从一个需要额外建设的特性变成了架构的内在属性

源码中这个理念无处不在。pkg/kv/kvserver/store.go 是核心——每个 Store 管理多个 Range(数据分片),每个 Range 通过 Raft 复制到多个节点。CockroachDB 深度定制了自己的 Raft 实现(pkg/raft/),增加了 Store Liveness、Fortification 等创新特性。底层存储引擎是自研的 Pebble(LSM-Tree),替代了早期的 RocksDB。

工程文化:形式化验证驱动

CockroachDB 最让人印象深刻的工程实践是用 TLA+ 做形式化验证docs/tla-plus/ParallelCommits/ 包含了用 TLA+ 验证的并行提交协议——事务提交与最后一轮写并行执行,将 2PC 延迟从 2 轮 RTT 降到 1 轮。这不是学术论文,是实际跑在生产环境的代码。

代码文档的详细程度同样惊人:pkg/raft/doc.go 长达 398 行,完整描述了 Raft 实现的设计决策和与 etcd 版本的差异。Data-driven 测试遍布每个模块,testdata 目录里的测试用例既是测试也是文档。

竞争位置与生态

CockroachDB(约 32K Star)是 PostgreSQL 兼容阵营最成功的原生分布式数据库,Cockroach Labs 已于 2024 年上市。核心竞争力包括:默认 serializable 隔离级别(业界最强一致性保证)、Kubernetes 原生部署、企业级安全特性。主要对手是 Google Cloud Spanner(商业)和 YugabyteDB(开源)。

局限性与场景边界

HTAP 能力有限——CockroachDB 专注 OLTP,没有 TiDB 那样的列存引擎做分析加速。存算一体意味着扩展时必须同时扩展计算和存储,无法独立弹性伸缩。Go 单仓库的巨大代码量(pkg/ 下数千文件)让新贡献者上手曲线较陡。Serializable 默认隔离级别虽然安全但可能带来性能损耗,需要应用端做重试逻辑。

本地代码结构

cockroachdb/cockroach (Go)
  pkg/
    kv/
      kvserver/        # KV 存储服务(Range 管理、Raft 复制)
        store.go       # Store 核心,管理多个 Range
    raft/              # 深度定制的 Raft 实现
      doc.go           # 398 行设计文档
      tracker/         # Fortification tracker
      raftstoreliveness/ # Store Liveness 机制
    storage/
      pebble.go        # Pebble LSM-Tree 存储引擎封装
      mvcc.go          # MVCC 存储层
    sql/               # SQL 层(解析、优化、执行)
    server/            # 节点服务入口
  docs/
    tla-plus/          # TLA+ 形式化验证
      ParallelCommits/ # 并行提交协议验证
  cmd/cockroach/       # 入口 main

本地关键文件

文件 用途
pkg/kv/kvserver/store.go Store 核心,Range 管理 + Raft 复制调度
pkg/raft/doc.go Raft 实现的 398 行设计文档
pkg/storage/mvcc.go 基于 Pebble 的 MVCC 存储层
pkg/storage/pebble.go Pebble 存储引擎封装
docs/tla-plus/ParallelCommits/ 并行提交的 TLA+ 形式化验证
pkg/sql/catalog/ SQL 元数据目录管理