【TiKV / HTAP 内核】Percolator 乐观事务落地:prewrite、commit 与三 CF

💡 原文中文,约10500字,阅读约需25分钟。
📝

内容提要

本文探讨了TiKV如何实现Percolator论文中的data/lock/write模型,分析了TiKV在编码、Prewrite/Commit过程中的调整,包括Rollback记录、短值优化和Lock类型写记录。TiKV将Prewrite的原子性单位从单行事务改为Region的Raft提交,并通过Async Commit和1PC优化减少延迟,满足在线事务的性能需求,展示了TiKV在生产环境中的应用与论文模型的差异。

🎯

关键要点

  • TiKV 将 Percolator 论文中的 data/lock/write 模型映射为 CF_DEFAULT/CF_LOCK/CF_WRITE,并通过 memcomparable 键和位反转时间戳编码确保同一用户键的多个版本按新旧顺序排列。

  • Prewrite 的原子性单位从论文中的 Bigtable 单行事务变为一个 Region 的一次 Raft 提交,涉及多个键时按 Region 分组并并发发送请求。

  • TiKV 引入了 Rollback 记录、短值优化和 Lock 类型写记录,解决了网络延迟和性能问题,这些都是论文中没有的工程补丁。

  • Commit 阶段的逻辑与论文一致,但 TiKV 的提交需要经过 Raft 提交以确保持久化,确保事务的原子性。

  • Async Commit 和 1PC 优化通过提前确定 commit_ts,减少了往返次数,适应了在线事务的低延迟需求,这些优化是针对生产环境的工程调整。

🔎

延伸解读

TiKV与Percolator的工程差异

TiKV在实现Percolator模型时,进行了多处工程调整以适应生产环境。这些调整包括引入Rollback记录、短值优化和Lock类型写记录,解决了网络延迟和性能问题。这些工程补丁并非简单的细节实现,而是针对实际应用中遇到的具体挑战,确保了TiKV在高并发场景下的稳定性和效率。

Prewrite与Commit的优化

TiKV将Prewrite的原子性单位从单行事务改为Region的Raft提交,这一变化使得多个键的Prewrite请求可以并发处理,显著减少了往返延迟。此外,Async Commit和1PC优化通过提前确定commit_ts,进一步压缩了事务的延迟。这些优化措施使得TiKV能够更好地满足在线事务的性能需求。

短值优化的实际意义

短值优化是TiKV针对小于等于64字节的值进行的性能提升措施。通过将短值直接嵌入CF_LOCK的锁信息中,TiKV减少了对CF_DEFAULT的查找次数,从而提高了读取效率。这一优化不仅节省了存储空间,还降低了查询延迟,适应了高频率的读写场景。

延伸问答

TiKV如何实现Percolator论文中的data/lock/write模型?

TiKV将Percolator的data/lock/write模型映射为CF_DEFAULT、CF_LOCK和CF_WRITE,并通过memcomparable键和位反转时间戳编码确保同一用户键的多个版本按新旧顺序排列。

TiKV在Prewrite阶段的原子性单位是什么?

TiKV的Prewrite阶段的原子性单位是一个Region的一次Raft提交,而不是论文中的单行事务。

TiKV引入了哪些工程补丁来解决性能问题?

TiKV引入了Rollback记录、短值优化和Lock类型写记录,这些都是为了解决网络延迟和性能问题。

Async Commit和1PC优化如何减少延迟?

Async Commit和1PC优化通过提前确定commit_ts,减少了往返次数,适应了在线事务的低延迟需求。

TiKV的Rollback记录有什么作用?

Rollback记录用于标记某个事务已被回滚,以防止因网络延迟导致的Prewrite请求错误地重新锁定key。

TiKV的短值优化是如何实现的?

短值优化通过在Prewrite阶段将短值嵌入CF_LOCK的锁信息中,减少了对CF_DEFAULT的查找,从而提高了读取效率。

🏷️

标签

➡️

继续阅读