【TiKV / HTAP 内核】TSO:物理加逻辑的全局时间戳

💡 原文中文,约8500字,阅读约需21分钟。
📝

内容提要

本文讨论了TiDB中的时间戳分配服务TSO(Timestamp Oracle),其核心在于确保全局事务的严格顺序。TSO通过46位物理时间和18位逻辑计数器组合成64位时间戳,由PD leader负责分配,以确保单调性和故障恢复。通过批量请求机制,多个事务可以共享一次网络往返,从而降低延迟。

🎯

关键要点

  • TSO(时间戳服务)确保全局事务的严格顺序,通过46位物理时间和18位逻辑计数器组合成64位时间戳。

  • TSO由PD leader负责分配,保证时间戳的单调性和故障恢复能力。

  • PD leader定期校准物理时钟,确保时间戳只增不减,避免回退。

  • 在逻辑计数器耗尽时,PD leader会等待物理时间前进,以继续分配时间戳。

  • 故障恢复机制通过etcd持久化时间窗口,确保新leader分配的时间戳严格大于旧leader的所有值。

  • 客户端通过批量请求机制合并多个时间戳请求,降低网络延迟。

  • TSO与Spanner的TrueTime解决同一问题,但采用不同的实现方式,前者是中心化的确定值服务,后者是去中心化的不确定性区间。

🔎

延伸解读

TSO的设计优势

TSO通过将物理时间和逻辑计数器结合,确保了全局事务的严格顺序。这种设计不仅提高了时间戳的分配效率,还通过PD leader的单一分配机制,避免了时间戳的冲突和回退,增强了系统的可靠性。

故障恢复机制的重要性

TSO的故障恢复机制依赖于etcd持久化的时间窗口,确保新leader分配的时间戳严格大于旧leader的所有值。这一设计有效防止了时间戳回退的问题,保障了事务的可见性和一致性,尤其在高可用性场景中至关重要。

批量请求的性能优化

通过批量请求机制,TSO能够将多个时间戳请求合并为一次网络调用,从而显著降低网络延迟。这种优化不仅提升了系统的响应速度,也减少了因频繁网络往返带来的性能损耗,适合高并发的应用场景。

与Spanner的比较

TSO与Spanner的TrueTime在解决全局事务排序问题上采取了不同的策略。TSO是中心化的确定值服务,而TrueTime则依赖去中心化的不确定性区间。选择哪种方案取决于系统的需求和基础设施的投入,反映了不同架构的设计哲学。

延伸问答

TSO是什么,它的主要功能是什么?

TSO(时间戳服务)是TiDB中的时间戳分配服务,主要功能是确保全局事务的严格顺序。

TSO是如何分配时间戳的?

TSO通过PD leader负责分配时间戳,采用46位物理时间和18位逻辑计数器组合成64位时间戳,确保单调性和故障恢复。

PD leader在TSO中扮演什么角色?

PD leader在TSO中负责分配时间戳,确保时间戳的单调性,并定期校准物理时钟以避免时间戳回退。

TSO如何处理故障恢复?

TSO通过etcd持久化时间窗口,确保新leader分配的时间戳严格大于旧leader的所有值,从而避免时间戳回退。

TSO与Spanner的TrueTime有什么区别?

TSO是中心化的确定值服务,而Spanner的TrueTime是去中心化的不确定性区间,二者解决全局事务排序的问题但实现方式不同。

如何通过批量请求机制降低TSO的延迟?

客户端通过批量请求机制合并多个时间戳请求,减少网络往返次数,从而降低延迟。

🏷️

标签

➡️

继续阅读