【TiKV / HTAP 内核】TSO:物理加逻辑的全局时间戳
内容提要
本文讨论了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的延迟?
客户端通过批量请求机制合并多个时间戳请求,减少网络往返次数,从而降低延迟。