The Write Last, Read First Rule
6 months ago
- #database
- #consistency
- #transactions
- TigerBeetle是一个专为财务交易正确性设计的数据库,核心采用账户与转账的双重记账体系。
- 该系统将主数据(存储于Postgres)与交易数据(存储于TigerBeetle)分离,实现独立扩展并满足不同的安全合规需求。
- TigerBeetle内部交易具有原子性,但跨系统(Postgres与TigerBeetle)的事务组合需通过协调机制保障一致性。
- 系统必须维护安全性原则:一致性(Postgres中每个账户在TigerBeetle中有对应账户,反之亦然)和可追溯性(TigerBeetle中余额为正的账户必对应Postgres中的账户)。
- TigerBeetle被指定为记录系统(决定账户存在性),而Postgres作为参照系统。
- '先写参照,后读记录'原则确保一致性:先写入参照系统,再写入记录系统;读取时优先查询记录系统。
- 操作需具备幂等性以应对中断并确保最终完成,可借助Resonate的分布式异步等待等框架实现。
- 应用层通过解析子系统(Postgres和TigerBeetle)响应来强化应用级语义,检测顺序冲突或数据不一致等违规情况。
- 正确性通过精心设计、持久化执行、有序操作和幂等性实现,即使在没有传统事务的情况下也能保障。