💡
原文中文,约1200字,阅读约需3分钟。
📝
内容提要
作者在 fly.io 分布式系统挑战中实现支持 transaction, totally-available, read committed 的分布式 K/V 数据库。通过实现 WAL 和 watermark 算法来保证数据一致性和可用性。
🎯
关键要点
- 作者在 fly.io 的挑战中实现了支持 transaction, totally-available, read committed 的分布式 K/V 数据库。
- 基于中心化 KV 数据库实现了 WAL,事务的写操作被追加到数据库中。
- 为了获取实际数据,读操作通过应用 WAL 中的可见写操作来实现。
- 每个节点维护一个 snapshot,以避免每次都应用全部的 WAL。
- 第二个版本通过定期清理不需要的 WAL 解决了 WAL 过长的问题。
- 维护 watermark 来判断 WAL entry 是否在所有节点的 snapshot 中。
- 通过计算 watermark 的最小值来确定可以删除的 WAL entry。
- 每个 WAL entry 包含一个事务的所有写操作,确保事务的原子性。
- 即使出现网络问题,服务仍能正常工作,符合 totally available 的定义。
- 插入 WAL 后,事务被认为已提交,因此只能读取已提交的修改。
🏷️
标签
➡️