热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【译】分布式系统中的时间同步:TiDB的时间戳

今天,分布式数据库引领市场,但分布式系统中的时间同步仍然是

原文链接:https://dzone.com/articles/tidbs-timestamp-oracle

作者:haitao gao


今天,分布式数据库引领市场,但分布式系统中的时间同步仍然是一个难以破解的难题。由于时钟偏差,分布式数据库不同节点的时间无法完美同步。许多计算机科学家提出了解决方案,例如 Leslie Lamport(2013 年图灵奖获得者)的逻辑时钟、混合逻辑时钟和 TrueTime。

PingCAP 的 TiDB 是一个开源的分布式 NewSQL 数据库,采用时间戳预言机(TSO)提供时间服务,并使用集中控制服务——Placement Driver(PD)——分配单调递增的时间戳。

在这篇文章中,我将介绍 TiDB 的 TSO,它如何提供时间服务,以及它的优缺点。

TiDB 的架构

在深入了解 TiDB 的时间服务之前,我们先回顾一下 TiDB 的架构。

TiDB 是一个开源的分布式数据库,具有水平扩展性、强一致性和高可用性。它由多个组件组成,包括 PD 集群、TiDB 集群、存储集群和 TiSpark。这些组件相互通信,形成一个完整的 TiDB 系统。

1.png

PD 是整个 TiDB 数据库的“大脑”,也是我们今天的重点。它有三个主要任务。它:



  • 实时存储和管理整个 TiDB 系统的元数据

  • 实时调度和平衡 TiKV 和 TiFlash 节点上的工作负载

  • 提供时间服务

TiDB 的 PD 集群和 TSO

PD 集群通常由多个 PD 实例(大多数情况下为三个实例)组成,这些实例中的 PD Leader 对外提供服务。 PD 集群中嵌入了 etcd 存储,以保证 PD 的可用性并提高其存储元数据的能力。

如果 PD Leader 崩溃,会自动选出新的 Leader,以保证时间服务的可用性。 etcd Leader 与 PD Leader 共享同一个 PD 实例,因此在 Leader 选举期间,etcd Leader 将优先于 PD Leader。选举过程如下:

2.png

TiDB 的 TSO 使用集中式混合逻辑时钟来提供时间服务。它使用 64 位来表示时间间隔。低 18 位代表逻辑时钟,其余 46 位代表物理时钟。由于其逻辑时钟为 18 位结构,每秒总共可以生成和分配 2^18 * 1,000 或 262,144,000 个时间戳。

接下来,我将介绍 PD 服务器中的 TSO 是如何发挥作用的。本节将描述 PD 如何校准、传递和快进时间。

校准时间

当新的 PD 领导者被选举出来时,它并不知道当前的系统时间。所以它的首要任务是校准时间。

首先, 新的 PD 领导者会读取时间并存储在前一个PD Leader中,存储的时间称为TLAST,是前一个PD Leader申请的物理时间的最大值。读取TLAST后,新的PD Leader知道前一个Leader分配的时间戳小于TLAST。

然后,新的 PD Leader 比较本地物理时间 TLAST 和 TNOW:



  • 如果 TNOW – TLAST <1 ms,则当前物理时间 TNEXT = TLAST + 1;

  • 否则,TNEXT = TNOW。

新的PD Leader完成这些步骤后,时间校准就完成了。

传递时间

完成时间校准后,新的 PD Leader 开始提供 TSO 服务。 为了保证当前领导者崩溃之后,下一个被选举的 PD 领导者可以成功的传递时间, 当前PD领导者应该存储 TLAST 每次在提供时间服务后都在 etcd 中。但是,如果PD领导每次都这样做,PD的表现就会受到很大影响。因此,为避免此类问题,PD Leader 预先申请了一个可分配的时间窗口 Tx。它的默认值为 3。

它首先将等于TNEXT + Tx 的TLAST 存储在etcd 中,然后将时间段[TNEXT, TNEXT + Tx) 内的所有时间戳分配到内存中。

预分配修复了 etcd store 频繁操作导致的 PD 性能损​​失问题。然而,缺陷在于如果 PD Leader 崩溃,许多预先分配的时间戳将被浪费。

当客户端请求 TSO 服务时,返回一个 64 位混合逻辑时间戳。它的物理时间值是校准后的 TLAST,它的逻辑时钟值会随着请求而自动递增。如果其逻辑时钟值超过其最大值(1 <<18),则休眠 50 ms 以等待物理时间快进。物理时间快进后,如果还有时间戳需要分配,PD Leader继续分配。

TSO 服务请求是跨网络的,为了降低网络带宽消耗,TiDB 的 PD 服务器支持批量请求 TSO 服务。

快进时间

在时间服务过程中,PD 只能通过逻辑时间的增量来分配时间戳。当增量值达到上限时,无法再分配时间戳,需要快进物理时间。

PD 每 50 毫秒检查一次当前物理时间,然后快进时间。根据公式 JetLag = TNOW – TLAST 如果 JetLag > 1 ms,则混合逻辑时钟中的物理时间比当前物理时间慢,需要快进以使 TNEXT = TNOW。

此外,当逻辑时钟在时间服务期间达到其阈值时,它会停止并等待。因此,为了防止这种情况发生,当当前逻辑时钟超过其阈值的一半时,混合逻辑时钟内部的物理时钟也会提前。完成此操作后,逻辑时钟的值将重置为 0。

当 TLAST – TNEXT <= 1 ms 时,表示之前申请的时间窗口已经用完,需要申请下一个时间窗口。因此,PD Leader 将 TLAST(等于 TNEXT + Tx)存储到 etcd 中,并在新的时间窗口内继续分配时间戳。

TSO 的优缺点

TiDB 采用了 TSO,一种集中式时钟解决方案,本质上也是一个混合逻辑时钟。由于中心化时钟提供单点时间服务,所有事件都是有序的。实现起来也很简单。它也有以下缺点;幸运的是,他们中的大多数都有相应的解决方案:

跨区域提供时间服务时性能损失。为了解决这个问题,可以将PD集群部署在同一个区域。

单点故障。为了解决这个问题,将 etcd 嵌入到 PD 集群中,并使用 Raft 共识算法使时间服务高可用和一致。

可能的性能瓶颈。由于 TSO 服务仅由 PD 负责人提供,因此从技术上讲,将来可能会出现性能瓶颈。幸运的是,PD Leader 每秒可以生成 2.6 亿个时间戳,并且经过多次优化。到目前为止,我还没有看到性能瓶颈。



推荐阅读
  • 构建高可用性Spark分布式集群:大数据环境下的最佳实践
    在构建高可用性的Spark分布式集群过程中,确保所有节点之间的无密码登录是至关重要的一步。通过在每个节点上生成SSH密钥对(使用 `ssh-keygen -t rsa` 命令并保持默认设置),可以实现这一目标。此外,还需将生成的公钥分发到所有节点的 `~/.ssh/authorized_keys` 文件中,以确保节点间的无缝通信。为了进一步提升集群的稳定性和性能,建议采用负载均衡和故障恢复机制,并定期进行系统监控和维护。 ... [详细]
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • 基于iSCSI的SQL Server 2012群集测试(一)SQL群集安装
    一、测试需求介绍与准备公司计划服务器迁移过程计划同时上线SQLServer2012,引入SQLServer2012群集提高高可用性,需要对SQLServ ... [详细]
  • 在《Linux高性能服务器编程》一书中,第3.2节深入探讨了TCP报头的结构与功能。TCP报头是每个TCP数据段中不可或缺的部分,它不仅包含了源端口和目的端口的信息,还负责管理TCP连接的状态和控制。本节内容详尽地解析了TCP报头的各项字段及其作用,为读者提供了深入理解TCP协议的基础。 ... [详细]
  • 本文详细介绍了如何安全地手动卸载Exchange Server 2003,以确保系统的稳定性和数据的完整性。根据微软官方支持文档(https://support.microsoft.com/kb833396/zh-cn),在进行卸载操作前,需要特别注意备份重要数据,并遵循一系列严格的步骤,以避免对现有网络环境造成不利影响。此外,文章还提供了详细的故障排除指南,帮助管理员在遇到问题时能够迅速解决,确保整个卸载过程顺利进行。 ... [详细]
  • 本文提供了在Windows系统上部署和启动MySQL免安装版本的详细步骤。首先,从MySQL官方网站下载社区版免安装包(https://dev.mysql.com/downloads/mysql/8.0.html),将其解压至指定目录,例如D:\tools\mysql。接着,配置系统环境变量,确保MySQL命令行工具可以在任意路径下使用。此外,还需创建并配置my.ini文件以设置MySQL的基本参数,确保数据库服务能够顺利启动和运行。 ... [详细]
  • MySQL:不仅仅是数据库那么简单
    MySQL不仅是一款高效、可靠的数据库管理系统,它还具备丰富的功能和扩展性,支持多种存储引擎,适用于各种应用场景。从简单的网站开发到复杂的企业级应用,MySQL都能提供强大的数据管理和优化能力,满足不同用户的需求。其开源特性也促进了社区的活跃发展,为技术进步提供了持续动力。 ... [详细]
  • Spring Data JdbcTemplate 入门指南
    本文将介绍如何使用 Spring JdbcTemplate 进行数据库操作,包括查询和插入数据。我们将通过一个学生表的示例来演示具体步骤。 ... [详细]
  • 短暂的人生中,IT和技术只是其中的一部分。无论换工作还是换行业,最终的目标是成功、荣誉和收获。本文探讨了技术人员如何跳出纯技术的局限,实现更大的职业发展。 ... [详细]
  • 为什么多数程序员难以成为架构师?
    探讨80%的程序员为何难以晋升为架构师,涉及技术深度、经验积累和综合能力等方面。本文将详细解析Tomcat的配置和服务组件,帮助读者理解其内部机制。 ... [详细]
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • Linux CentOS 7 安装PostgreSQL 9.5.17 (源码编译)
    近日需要将PostgreSQL数据库从Windows中迁移到Linux中,LinuxCentOS7安装PostgreSQL9.5.17安装过程特此记录。安装环境&#x ... [详细]
  • 本文介绍了如何利用HTTP隧道技术在受限网络环境中绕过IDS和防火墙等安全设备,实现RDP端口的暴力破解攻击。文章详细描述了部署过程、攻击实施及流量分析,旨在提升网络安全意识。 ... [详细]
  • 尽管我们尽最大努力,任何软件开发过程中都难免会出现缺陷。为了更有效地提升对支持部门的协助与支撑,本文探讨了多种策略和最佳实践,旨在通过改进沟通、增强培训和支持流程来减少这些缺陷的影响,并提高整体服务质量和客户满意度。 ... [详细]
  • FastDFS Nginx 扩展模块的源代码解析与技术剖析
    FastDFS Nginx 扩展模块的源代码解析与技术剖析 ... [详细]
author-avatar
兴霖先玲广_215
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有