编程 TigerBeetle 深度拆解:一个用 Zig 写的金融级数据库如何让转账吞吐量达到 100 万 TPS——从 VSR 共识到确定性模拟测试的极致工程哲学

2026-08-03 13:13:59 +0800 CST views 15

TigerBeetle 深度拆解:一个用 Zig 写的金融级数据库如何让转账吞吐量达到 100 万 TPS——从 VSR 共识到确定性模拟测试的极致工程哲学

引言:当金融交易遇到性能天花板

在分布式系统的江湖里,有一个被反复验证的残酷现实:通用数据库在高并发交易场景下,写入吞吐量存在一个约 100-1000 TPS 的硬上限

这不是因为硬件不够快,而是因为架构设计本身出了问题。传统 SQL 数据库的交互式事务模型——应用持有锁、在数据库外处理业务逻辑、再写回——在高竞争场景下,网络锁的开销会让性能断崖式下跌。Amdahl 定律告诉我们,即使只有 10% 的竞争度,多线程扩展的收益也会被锁争用吃掉。

2020 年,一个名为 TigerBeetle 的项目悄然出现在 GitHub 上。它的目标极其明确:成为下一代金融交易处理系统的核心引擎,为未来 30 年的 OLTP(在线事务处理)提供支撑

五年后的今天,TigerBeetle 已经在生产环境中证明了自己的能力:单集群可达 100K-500K TPS,P100 延迟在 100ms 以内,已处理超过 1 万亿笔交易,管理超过 10 亿个账户。更令人惊叹的是,这一切是在一个单线程、无锁、确定性执行的架构上实现的。

TigerBeetle 到底做对了什么?为什么一个用 Zig 语言从零开始构建、没有使用任何外部依赖的数据库,能在性能和安全性上同时碾压传统方案?

本文将从四个核心维度深入拆解 TigerBeetle 的架构设计:

  1. Debit/Credit 数据模型——为什么复式记账是 OLTP 的最优解
  2. VSR 共识引擎——如何实现真正的多云高可用
  3. 极致性能工程——从 io_uring 到单线程设计的每一处优化
  4. 确定性模拟测试(VOPR)——如何用 1024 核 24/7 模糊测试消灭 bug

一、Debit/Credit:为什么复式记账是 OLTP 的最优数据模型

1.1 从 SQL 到 Debit/Credit 的范式转变

在 TigerBeetle 出现之前,大多数金融系统的做法是:用通用 SQL 数据库 + 应用层业务逻辑来处理交易。一个典型的支付流程可能是这样的:

-- 1. 检查账户余额
SELECT balance FROM accounts WHERE id = 123;

-- 2. 扣减付款方余额
UPDATE accounts SET balance = balance - 100 WHERE id = 123;

-- 3. 增加收款方余额
UPDATE accounts SET balance = balance + 100 WHERE id = 456;

-- 4. 记录交易日志
INSERT INTO transactions (from_id, to_id, amount, created_at) VALUES (123, 456, 100, NOW());

看起来很简单?问题在于:这四个操作不是原子的。在步骤 2 和步骤 3 之间,如果应用崩溃了,钱就凭空消失了。即使加上事务,SQL 的锁机制在高并发下也会成为瓶颈。

TigerBeetle 的做法完全不同——把业务逻辑下沉到数据库内部

import tigerbeetle

# 创建客户端连接
client = tigerbeetle.Client(cluster_id=0, addresses=["3000"])

# 定义账户
accounts = [
    {
        "id": 123,
        "ledger": 1,
        "code": 10,  # 用户类型
    },
    {
        "id": 456,
        "ledger": 1,
        "code": 20,  # 商户类型
    }
]

# 创建账户
account_errors = client.create_accounts(accounts)

# 执行转账——一个原子操作完成所有事
transfers = [
    {
        "debit_account_id": 123,
        "credit_account_id": 456,
        "amount": 100,
        "ledger": 1,
        "code": 1,  # 转账类型
    }
]

transfer_errors = client.create_transfers(transfers)

这一个 create_transfers 调用,在数据库内部就完成了:

  • 余额检查(借方是否有足够余额)
  • 余额更新(借方减少、贷方增加)
  • 交易记录(不可变的审计日志)
  • ACID 保证(原子性、一致性、隔离性、持久性)

一次查询,8189 笔交易——这就是接口设计带来的性能红利。

1.2 复式记账:600 年的智慧

Debit/Credit(复式记账)不是 TigerBeetle 的发明,它已经有至少 600 年的历史。但 TigerBeetle 做了一件了不起的事情:把这种古老的记账方式用现代分布式系统重新实现

复式记账的核心原理极其简单:

每一笔交易,都必须有一个借方和一个贷方,且金额相等。钱不会凭空产生,也不会凭空消失。

这个原理在数学上等价于牛顿第三定律:作用力与反作用力大小相等、方向相反。

TigerBeetle 把这个原理内置到了数据模型中:

// TigerBeetle 的 Transfer 结构体(简化版)
const Transfer = extern struct {
    id: u128,               // 唯一标识(客户端生成)
    debit_account_id: u128,  // 借方账户
    credit_account_id: u128, // 贷方账户
    amount: u128,            // 金额(整数,避免浮点精度问题)
    ledger: u32,             // 账本类型
    code: u16,               // 交易代码
    flags: TransferFlags,    // 标志位
    timestamp: u64,          // 时间戳(纳秒精度)
    // ... 更多字段
};

每个字段都精心设计:

  • id:由客户端生成的 u128,保证端到端幂等性。即使网络重试,同一笔交易也只会被处理一次
  • debit_account_id / credit_account_id:强制双入口模型,不可能只扣不加
  • amount:u128 整数,彻底避免浮点精度问题(金融系统的大忌)
  • 不可变性:交易一旦记录,永远不能被修改或删除。冲正?用另一笔反向交易来实现

1.3 相比 SQL 的三大优势

维度传统 SQLTigerBeetle Debit/Credit
原子性需要开发者正确使用事务数据库内置保证
一致性幂等性、隔离性靠应用层数据库内置严格串行化
性能跨网络锁 → 高竞争下崩溃无锁、批量处理 → 线性扩展
审计需要额外的审计表交易不可变,天然审计日志
Schema 迁移新业务 = 新表/新字段统一模型,无需迁移

Uber 在 2018 年启动了一个 40 人团队、耗时 2 年的项目,将支付平台迁移到基于复式记账的架构。Airbnb 在 2012-2016 年间经历了 MySQL 管道的崩溃,最终也回到了复式记账。Stripe 内部同样依赖复式记账系统来记录所有支付交易。

历史反复证明:自己造轮子做记账,早晚会回来用复式记账。


二、VSR 共识引擎:真正实现多云高可用

2.1 为什么不是 Raft?

说到分布式共识,大多数人第一反应是 Raft。但 TigerBeetle 选择了另一条路:Viewstamped Replication(VSR)

这个选择不是偶然的。TigerBeetle 团队对共识算法有极深的理解——他们实现的 VSR 来自 MIT 的论文《Viewstamped Replication Revisited》,并且做了多项创新。

VSR 相比 Raft 的核心优势:

1. 确定性 View Change

Raft 的 leader 选举依赖超时机制,存在"脑裂"风险——两个节点可能同时认为自己是 leader。VSR 通过确定性的 view change 消除了这个风险。

Raft:                    VSR:
  Node A 超时              View Change
  → A 自认为 leader        → 所有节点按确定性规则
  → B 也超时                 选出新的 primary
  → B 也自认为 leader       → 无脑裂风险
  → 脑裂!

2. 多路径消息传递

VSR 使用多条复制路径,即使某条路径出现延迟或故障,数据仍能通过其他路径到达多数派。

3. Flexible Quorums

这是 TigerBeetle 最聪明的设计之一。传统的共识算法要求复制和选举使用相同的多数派(例如 3/5)。TigerBeetle 使用 Heidi Howard 在 2016 年提出的 Flexible Quorums:

  • 复制 quorum:3/6(只需 3 个副本确认)
  • 选举 quorum:4/6(需要 4 个节点同意才能选出新 leader)

这意味着什么?复制只需 3 个节点,但选举需要 4 个节点。复制延迟更低,同时选举更安全。这是一个双赢的设计。

传统 5 节点:
  复制:3/5 → 需要 3 个节点
  选举:3/5 → 需要 3 个节点

TigerBeetle 6 节点:
  复制:3/6 → 只需 3 个节点(更宽松)
  选举:4/6 → 需要 4 个节点(更严格)

2.2 多云部署:真正的生产级高可用

TigerBeetle 推荐的生产部署方案是 6 个副本,跨 3 个云服务商(每个云服务商 2 个副本)。这种部署方式可以:

  • 容忍任意一个云服务商完全宕机(6-2=4,仍满足 4/6 选举 quorum)
  • 消除供应商锁定(AWS、GCP、Azure 同时使用)
  • 满足合规要求(数据主权、地理分布)
  • 自动绕过灰色故障(某个副本变慢时自动切换)
┌─────────────┐  ┌─────────────┐  ┌─────────────┐
│   AWS       │  │   GCP       │  │   Azure     │
│  ┌───┐┌───┐│  │  ┌───┐┌───┐│  │  ┌───┐┌───┐│
│  │ R1││ R2││  │  │ R3││ R4││  │  │ R5││ R6││
│  └───┘└───┘│  │  └───┘└───┘│  │  └───┘└───┘│
└─────────────┘  └─────────────┘  └─────────────┘
        │              │              │
        └──────────────┼──────────────┘
                       │
              VSR 共识层(3/6 复制 + 4/6 选举)

2.3 集群时间:不依赖 NTP 的时钟方案

分布式系统中,时钟同步是一个经典的难题。传统的 NTP 同步存在漂移和跳变,可能导致时间戳不一致。

TigerBeetle 的解决方案:集群时间(Cluster Time)——把所有副本的时钟组合成一个容错的逻辑时钟。

副本 A 时钟: 1000ms
副本 B 时钟: 1003ms  ← 略快
副本 C 时钟: 998ms   ← 略慢

集群时间 = 容错中值 + 安全边界
         = ~1000ms(所有节点一致认可的时间)

这意味着 TigerBeetle 不依赖 NTP,不使用 leader lease,应用只需要处理安全的相对时间(比如交易超时),而不需要依赖绝对时间的精确性。


三、极致性能工程:每一处优化都是为了更快

3.1 为什么选择单线程?

在一个追求极致性能的数据库中,选择单线程设计看似反直觉。但 TigerBeetle 团队有自己的理由:

1. 金融交易的热点账户问题

在真实的支付系统中,少数"热点账户"(比如平台账户、清算账户)会参与大量交易。如果用分片,这些热点账户所在的分片会成为瓶颈,其他分片的扩展能力完全浪费。

2. Amdahl 定律的铁律

单线程算法在低竞争下比多线程更快(避免了锁开销),在高竞争下也不会崩溃(因为根本没有锁)。参见论文 "Scalability! But at what COST?"。

3. 确定性执行

单线程意味着执行顺序完全确定——输入相同,输出必然相同。这为确定性模拟测试(VOPR)奠定了基础。

3.2 批处理:批量越大,单笔越便宜

TigerBeetle 的接口设计天生就是为批量处理优化的。单次查询最多可处理 8189 笔交易,这意味着:

  • 共识成本摊销:一次共识复制 = 8189 笔交易
  • I/O 批量合并:一次磁盘写入 = 多笔交易
  • CPU 缓存友好:紧凑的内存布局让 CPU 缓存命中率极高
单笔处理:           批量处理:
  网络往返 1ms        网络往返 1ms
  共识复制 2ms        共识复制 2ms
  磁盘写入 1ms        磁盘写入 1ms
  ─────────           ─────────
  单笔 4ms            8189 笔 4ms
                      单笔 0.0005ms  ← 8000x 提升!

在低负载时,批体会自动变小,用吞吐量换取更低的延迟——这是一个优雅的自适应策略。

3.3 从零开始的全栈优化

TigerBeetle 没有使用任何第三方依赖,从底层到顶层全部自己实现:

语言选择:Zig

Zig 是一种系统级编程语言,与 Rust 类似但更接近 C 的本质。选择 Zig 的原因:

  • 无垃圾回收(GC pause 在金融系统中是不可接受的)
  • 零成本抽象
  • 内存布局完全可控
  • 编译期检查,减少运行时错误

内存管理:静态分配

// TigerBeetle 预分配所有内存,永远不会出现 OOM
const arena = ArenaAllocator.init(.{
    .total_memory = config.storage_size_max,
});

所有内存在启动时一次性分配完毕。没有 malloc/free 的运行时开销,没有内存碎片,没有 GC 停顿。

I/O 模型:io_uring

TigerBeetle 专为 Linux 的 io_uring 设计。io_uring 是 Linux 5.1 引入的异步 I/O 接口,相比 epoll 有巨大优势:

特性epollio_uring
系统调用次数每次 I/O 一次批量提交,零系统调用
上下文切换频繁极少
内存拷贝多次共享内存
性能极好
epoll 模型:
  用户态 → 系统调用 → 内核态 → 完成通知 → 用户态
  每次 I/O 都有一次完整的上下文切换

io_uring 模型:
  用户态 → 提交队列(共享内存)→ 内核批量处理
  → 完成队列(共享内存)→ 用户态
  批量提交,零系统调用

数据结构:Cache-Line 对齐

// Transfer 对象精确设计为 128 字节,刚好是两条 CPU cache line
const Transfer = extern struct { // 128 bytes
    // ... 字段定义 ...
};
// 执行一批 Transfer 就是一个紧凑的 CPU 循环

3.4 单线程的极致:零拷贝、零反序列化

由于所有数据结构都是固定大小的(Account、Transfer),TigerBeetle 可以做到:

  • 零拷贝:数据在内存中连续存储,直接指针操作
  • 零反序列化:固定布局的结构体可以直接内存映射
  • Direct I/O:绕过操作系统的 Page Cache,直接与磁盘交互
传统数据库:
  磁盘 → Page Cache → 反序列化 → 应用逻辑 → 序列化 → Page Cache → 磁盘

TigerBeetle:
  磁盘 → Direct I/O → 固定布局结构体 → CPU 循环处理 → Direct I/O → 磁盘
  (无 Page Cache,无序列化/反序列化)

四、确定性模拟测试(VOPR):让 bug 无处藏身

4.1 为什么单元测试和集成测试不够?

传统的测试方法在分布式系统中面临一个根本性问题:不确定性

网络消息的到达顺序是不确定的,磁盘 I/O 的完成顺序是不确定的,线程调度是不确定的。这意味着:

  • 同一个 bug 可能 1000 次测试只复现 1 次
  • 无法保证修复一个 bug 不引入新的 bug
  • 边界条件几乎不可能被测试覆盖

4.2 VOPR:数据库领域的"飞行模拟器"

TigerBeetle 的解决方案是 VOPR——Viewstamped Operation Replicator,一个确定性模拟器。

VOPR 的灵感来自三个来源:

  • 电影《WarGames》(战争游戏)
  • Dropbox 的 Nucleus 测试系统
  • FoundationDB 的确定性模拟测试

核心思想:用伪随机数替代真实世界的不确定性,让整个系统的行为完全可重现

真实世界:                    VOPR 模拟:
  随机网络延迟  →  伪随机种子决定延迟
  随机磁盘故障  →  伪随机种子决定故障
  随机 CPU 调度  →  确定性执行顺序
  ────────            ────────
  不可重现            完全可重现

4.3 VOPR 的工作原理

VOPR 模拟一个完整的 TigerBeetle 集群(通常 6 个副本),在虚拟的"世界"中运行:

  1. 确定性执行:所有代码的执行顺序由伪随机数生成器(PRNG)决定,相同的种子 → 相同的执行轨迹

  2. 故障注入:在每个时间步,VOPR 可以注入各种故障:

    • 网络分区(某些节点之间断开)
    • 消息延迟(某些消息故意延迟到达)
    • 节点崩溃(某些节点突然停止响应)
    • 磁盘故障(模拟数据损坏)
  3. 1000x 加速:VOPR 以 1000 倍的速度运行模拟,相当于在几小时内测试完现实世界几个月的运行情况

  4. 断言检查:每一步都执行数以千计的断言,检查不变量是否被违反

# 运行 VOPR 模拟测试
scripts/vopr.sh

# VOPR 会输出类似这样的日志:
# VOPR: tick 1,234,567 — injecting network partition between replica 2 and 4
# VOPR: tick 1,234,568 — replica 4 detected as slow, rerouting replication
# VOPR: tick 1,234,569 — 3/6 quorum maintained, no data loss
# ... 数百万步后,如果没有触发任何断言,测试通过

4.4 70K+ 视角:实时观看 VOPR 运行

TigerBeetle 提供了一个可视化工具,让你实时观看 VOPR 的运行过程:

  • 实时时间 vs 模拟时间的比例约为 1:700
  • 你可以看到网络分区如何被自动恢复
  • 你可以看到灰色故障(slow node)如何被自动绕过
  • 你可以看到数据如何在副本之间保持一致

这是一个真正的"飞行模拟器"——让工程师能在安全的环境中测试最极端的故障场景。

4.5 Jepsen 认证:经受住了最严苛的测试

TigerBeetle 是第一个通过 Jepsen "螺旋故障"(helical fault)注入测试的数据库。Jepsen 的测试方式是:在所有机器上同时注入随机位翻转,模拟宇宙射线导致的比特翻转。

Jepsen 的测试结论:

"TigerBeetle 对磁盘故障表现出非凡的韧性。在我们的测试中,它从位翻转和其他文件损坏中恢复了过来,几乎覆盖了节点数据文件的每个部分——只要损坏仅限于少数节点。在 grid 等文件区域中,TigerBeetle 甚至能容忍所有副本中除一个以外的所有数据丢失或损坏。"

4.6 TigerStyle:安全关键代码的工程规范

TigerBeetle 的代码风格被称为 TigerStyle,灵感来自 NASA 的《Power of 10》安全关键代码规范:

  1. 静态内存分配:消除内存泄漏、OOM、use-after-free
  2. 6000+ 断言:在代码中设置数千个"绊线",任何违反不变量的行为都会被立即捕获
  3. 无隐藏控制流:避免 switch-case 中的隐式 fallthrough
  4. 最小接口面:暴露给用户的 API 尽可能小,减少误用可能
// TigerStyle 示例:使用 assert 检查不变量
fn process_transfer(self: *StateMachine, transfer: Transfer) void {
    // 断言:转账金额不能为零
    assert(transfer.amount > 0);
    
    // 断言:借方和贷方账户不能相同
    assert(transfer.debit_account_id != transfer.credit_account_id);
    
    // 断言:账户余额不能为负
    assert(self.get_balance(transfer.debit_account_id) >= transfer.amount);
    
    // 执行转账...
}

五、性能基准对比:与传统方案的真实差距

5.1 TigerBeetle vs PostgreSQL

在 OLTP 场景下,TigerBeetle 和 PostgreSQL 的差距是数量级的:

指标PostgreSQLTigerBeetle差距
TPS(单节点)1,000-5,000100,000-500,000100-500x
P100 延迟10-100ms< 100ms稳定
竞争下的扩展急剧下降线性-
审计能力需要额外设计内置不可变日志-

5.2 TigerBeetle vs Redis

Redis 虽然快,但它不是为交易处理设计的:

指标RedisTigerBeetle
数据安全可配置持久化(有风险)强制持久化(WAL 复制)
事务语义MULTI/EXEC(非严格 ACID)严格串行化
分布式一致性主从复制(可能丢失数据)VSR 共识(零数据丢失)
审计不支持内置不可变日志

5.3 TigerBeetle vs FoundationDB

FoundationDB 也是一个优秀的分布式数据库,但设计目标不同:

维度FoundationDBTigerBeetle
设计目标通用事务型 KV专用 OLTP 交易引擎
数据模型Key-ValueDebit/Credit
语言C++ / RustZig
测试方法模拟测试模拟测试(VOPR)
性能优秀1000x 更快(在 OLTP 场景)

六、实际应用场景与集成指南

6.1 典型应用场景

TigerBeetle 特别适合以下场景:

1. 支付系统

  • 实时支付清算
  • 跨境支付
  • 数字钱包

2. 金融交易平台

  • 证券交易
  • 期货/期权交易
  • 加密货币交易所

3. 游戏经济系统

  • 游戏内货币流通
  • 虚拟物品交易
  • 跨服交易

4. 能源交易

  • 电力现货交易
  • 碳排放权交易
  • 实时计费

6.2 Python 客户端集成示例

import tigerbeetle

# 连接到 TigerBeetle 集群
client = tigerbeetle.Client(
    cluster_id=0,
    addresses=["127.0.0.1:3000"]
)

# 1. 创建账户
accounts = [
    {
        "id": 1,  # 用户 A 的账户
        "ledger": 1,  # 美元账本
        "code": 10,  # 个人用户
    },
    {
        "id": 2,  # 用户 B 的账户
        "ledger": 1,
        "code": 10,
    },
    {
        "id": 3,  # 平台手续费账户
        "ledger": 1,
        "code": 20,  # 系统账户
    }
]

errors = client.create_accounts(accounts)
if errors:
    print(f"创建账户失败: {errors}")

# 2. 执行转账(带手续费)
transfers = [
    {
        "debit_account_id": 1,   # 用户 A 付款
        "credit_account_id": 2,  # 用户 B 收款
        "amount": 950,           # 实际到账金额(分)
        "ledger": 1,
        "code": 1,  # 普通转账
    },
    {
        "debit_account_id": 1,   # 用户 A 付手续费
        "credit_account_id": 3,  # 平台收取手续费
        "amount": 50,            # 手续费(分)
        "ledger": 1,
        "code": 2,  # 手续费
    }
]

errors = client.create_transfers(transfers)
if errors:
    print(f"转账失败: {errors}")

# 3. 查询账户余额
balances = client.get_account_balances(account_id=1)
print(f"用户 A 余额: {balances}")

# 4. 查询交易历史
transfers = client.get_account_transfers(
    account_id=1,
    limit=10,
    flags={"credit": True, "debit": True}
)
for t in transfers:
    print(f"交易 {t.id}: 金额 {t.amount}")

6.3 部署建议

# 1. 下载 TigerBeetle
curl -Lo tigerbeetle.zip https://linux.tigerbeetle.com
unzip tigerbeetle.zip

# 2. 格式化数据文件(首次运行)
./tigerbeetle format --cluster=0 --replica=0 --addresses="127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002" 0_0.tigerbeetle

# 3. 启动 3 节点集群
./tigerbeetle start --addresses="127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002" 0_0.tigerbeetle

# 4. 运行基准测试
./tigerbeetle benchmark

七、TigerBeetle 的局限性与适用边界

没有任何技术是万能的。TigerBeetle 的设计决定了它适合 OLTP,但不适合:

不适合的场景:

  1. 复杂查询:TigerBeetle 没有 SQL,不能做 JOIN、GROUP BY 等分析查询
  2. 全文搜索:不是搜索引擎的替代品
  3. 高频读取:写优化设计,读取性能不是重点
  4. 小规模项目:如果你只需要简单的 KV 存储,Redis 更合适

适合的场景:

  1. 金融级交易处理(支付、清算、结算)
  2. 高竞争写入场景(热点账户、实时交易)
  3. 需要强一致性审计的系统
  4. 需要零数据丢失保证的系统

与 OLAP 系统的搭配

TigerBeetle 官方推荐的架构是 OLTP + OLAP 分离

┌──────────────────────────────────────────┐
│              应用层                        │
│                                          │
│  写入路径:                    读取路径:   │
│  App → TigerBeetle    TigerBeetle → OLAP │
│        (OLTP)                (分析查询)    │
└──────────────────────────────────────────┘

写入最后到 TigerBeetle(保证强一致性),读取先从 OLAP 系统(保证性能)。这种分离是金融系统的最佳实践。


八、总结与展望

TigerBeetle 的成功证明了一个道理:在正确的领域,专用设计可以碾压通用方案

它没有试图成为一个"万能数据库",而是专注于一件事:把金融交易处理做到极致

核心创新总结:

创新点影响
Debit/Credit 数据模型600 年的智慧 + 现代分布式系统 = 零错误的交易处理
VSR 共识 + Flexible Quorums真正的多云高可用,无脑裂风险
单线程 + 批处理消除锁争用,1000x 性能提升
io_uring + Direct I/O零系统调用的极致 I/O
静态内存分配零 OOM、零碎片、零 GC 停顿
VOPR 确定性模拟1024 核 24/7 模糊测试,消灭 bug
TigerStyle 工程规范NASA 级别的安全关键代码标准

TigerBeetle 给我们的启示是:不要试图用通用工具解决专用问题。当你面对的是金融交易这种对正确性和性能都有极端要求的场景时,从第一性原理出发、用正确的语言(Zig)、正确的模型(Debit/Credit)、正确的测试方法(确定性模拟),才是正道。

未来,随着实时支付、数字货币、能源交易等场景的爆发,TigerBeetle 这类专用交易引擎的价值只会越来越大。它不只是一个数据库,更是一种工程哲学的体现——安全和性能不是对立的,而是可以同时达到极致的


参考资源:

  • TigerBeetle 官方文档:https://docs.tigerbeetle.com
  • TigerBeetle GitHub:https://github.com/tigerbeetle/tigerbeetle
  • TigerStyle 规范:https://tigerstyle.dev
  • VOPR 在线模拟器:https://sim.tigerbeetle.com
  • Jepsen 测试报告:https://github.com/jepsen-io/jepsen
  • Viewstamped Replication 论文:https://dspace.mit.edu/handle/1721.1/71763
  • "Scalability! But at what COST?" 论文:https://www.usenix.org/system/files/conference/hotos15/hotos15-paper-mcsherry.pdf

推荐文章

如何在 Linux 系统上安装字体
2025-02-27 09:23:03 +0800 CST
CSS Grid 和 Flexbox 的主要区别
2024-11-18 23:09:50 +0800 CST
ElasticSearch简介与安装指南
2024-11-19 02:17:38 +0800 CST
Golang中国地址生成扩展包
2024-11-19 06:01:16 +0800 CST
程序员茄子在线接单