【TiKV / HTAP 内核】CockroachDB 对照:Range + Raft 的另一种落地

💡 原文中文,约12000字,阅读约需29分钟。
📝

内容提要

本文对比了TiKV与CockroachDB的架构差异。两者均基于Raft协议,但在角色划分、事务提交协议和部署形态上有所不同。CockroachDB引入了Leaseholder角色,采用Parallel Commits优化事务提交,而TiKV使用Percolator模型。TiKV的默认隔离级别为快照隔离,CockroachDB为可串行化。TiKV为分离式组件,CockroachDB为单进程一体化,运维和扩展方式各异。

🎯

关键要点

  • TiKV与CockroachDB都基于Raft协议,但在角色划分、事务提交协议和部署形态上有所不同。

  • CockroachDB引入了Leaseholder角色,TiKV没有将Raft leader和租约角色分开。

  • TiKV使用Percolator模型进行事务处理,而CockroachDB采用Parallel Commits优化事务提交。

  • TiKV的默认隔离级别为快照隔离(Snapshot Isolation),而CockroachDB为可串行化(Serializable)。

  • TiKV为分离式组件,包含TiDB、TiKV和PD三个独立进程;CockroachDB为单进程一体化,所有组件在同一进程中运行。

  • TiKV的时间戳由PD的TSO集中分配,CockroachDB使用混合逻辑时钟(HLC)生成时间戳。

  • TiKV的陈旧读机制依赖于safe-ts,而CockroachDB使用Closed Timestamps来保证一致性读。

🔎

延伸解读

架构选择的影响

TiKV和CockroachDB在架构设计上有显著差异,TiKV采用分离式组件架构,而CockroachDB则是单进程一体化。这种选择影响了运维的复杂性和扩展的灵活性。TiKV的分离式设计允许独立扩展各个组件,但可能导致运维管理的复杂性增加;而CockroachDB的单进程设计简化了运维,但在资源分配上可能存在耦合问题。

事务模型的比较

TiKV使用Percolator模型进行事务处理,而CockroachDB则采用Parallel Commits。这两种模型在事务提交的效率和复杂性上有所不同。TiKV的两阶段提交可能在高并发场景下表现出延迟,而CockroachDB通过压缩提交路径来提高性能。开发者在选择时需考虑具体业务场景对事务处理效率的要求。

隔离级别的选择

TiKV默认提供快照隔离(Snapshot Isolation),而CockroachDB则默认使用可串行化隔离(Serializable)。这意味着在并发事务处理时,CockroachDB能更好地防止写偏斜等问题,但可能导致更高的事务重试率。开发者需要根据业务需求选择合适的隔离级别,以平衡性能和数据一致性。

延伸问答

TiKV和CockroachDB的主要架构差异是什么?

TiKV和CockroachDB都基于Raft协议,但在角色划分、事务提交协议和部署形态上有所不同。CockroachDB引入了Leaseholder角色,而TiKV没有将Raft leader和租约角色分开。

TiKV和CockroachDB的事务提交协议有什么不同?

TiKV使用Percolator模型进行事务处理,而CockroachDB采用Parallel Commits优化事务提交,后者将提交延迟压缩到接近一轮共识。

TiKV和CockroachDB的默认隔离级别是什么?

TiKV的默认隔离级别为快照隔离(Snapshot Isolation),而CockroachDB的默认隔离级别为可串行化(Serializable)。

TiKV和CockroachDB在时间戳生成上有什么区别?

TiKV的时间戳由PD的TSO集中分配,而CockroachDB使用混合逻辑时钟(HLC)生成时间戳。

TiKV和CockroachDB的部署形态有什么不同?

TiKV为分离式组件,包含TiDB、TiKV和PD三个独立进程;而CockroachDB为单进程一体化,所有组件在同一进程中运行。

TiKV和CockroachDB的陈旧读机制有什么不同?

TiKV的陈旧读机制依赖于safe-ts,而CockroachDB使用Closed Timestamps来保证一致性读。

🏷️

标签

➡️

继续阅读