TrueTime 和外部一致性

Spanner Omni 通过实现基于软件的 TrueTime API 版本,在自管理环境中实现外部一致性。此系统依赖于基于集群的架构来提供权威时间戳,从而确保交易在整个基础架构中反映严格的序列顺序。

为了保持准确一致的时间戳和可序列化性,请配置一个主时间服务器和基于主机的客户端,这些客户端会根据网络延迟和时钟漂移计算时间间隔。通过特定指标监控部署的性能,并验证底层硬件是否满足时钟速率误差和时间戳同步方面的所需规格。

Spanner Omni 和 TrueTime

为了提供与 Spanner 的托管版本相同的外部一致性,Spanner Omni 使用基于软件的 Google TrueTime API 实现。在受管理的 Spanner 环境中,TrueTime 通过使用多个与物理 GPS 接收器和原子钟同步的时间服务器来实现较窄的不确定性区间。由于 Spanner Omni 在自行管理的基础设施上运行,无法依赖此物理硬件,因此它改用基于集群的架构来实现一致性。

在此实现中,所有事务都按顺序执行。如果一个事务在另一个事务开始之前完成,则第二个事务会反映第一个事务的效果。Spanner Omni 依赖于以下因果序列:如果对 t1 = TrueTime::Now() 的调用在对 t2 = TrueTime::Now() 的调用开始之前完成(即使在不同的机器上),则 t2.latest 晚于 t1.earliest。通过分配这些时间间隔的提交时间戳,Spanner Omni 可确保,如果事务 t1 在事务 t2 开始之前提交,则关键时间戳会反映出 t1 在 t2 之前发生。

如需详细了解 Spanner 的受管版本如何使用 TrueTime,请参阅 Spanner 文档中的 TrueTime 和外部一致性。

TrueTime 架构

基于集群的架构使用两个核心组件在整个部署中提供 TrueTime:

  • 时间服务器:集群会将一个数据库服务器指定为主时间服务器。服务器是整个 Spanner Omni 部署的权威单一可信来源,可从其本地高精度时钟提供时间。为确保高可用性,如果主服务器停止响应,集群会动态提升另一个数据库服务器来承担此角色。时间服务器捆绑在 Spanner Omni 二进制文件中,不需要单独的基础设施或外部依赖项。

  • 时间客户端:在部署中的每个宿主机上运行的后台守护程序。它会定期查询主时间服务器以检索当前时间参数,并将其发布到机器上运行的进程。

TrueTime 基于有界时钟漂移以及 Spanner Omni 数据库服务器与主时间服务器之间的网络往返时间 (RTT) 来计算时间间隔。部署中的所有宿主机都必须具有在已知速率误差范围内运行的本地时钟。

不确定性(epsilon)和延迟时间影响

TrueTime 将时间表示为一个区间 [earliest, latest],而不是单个值。TrueTime 会根据以下两个因素计算此不确定性区间的大小:

  • 网络往返时间 (RTT):时间客户端与主时间服务器之间同步期间的延迟时间。与位于远程数据中心的客户端相比,与主时间服务器位于同一数据中心的客户端的时间不确定性明显更低。

  • 时钟漂移:客户端和服务器机器上的物理时钟在同步之间发生的自然漂移。

高不确定性可能会增加事务提交等待时间。不过,由于 Paxos 复制也需要网络通信,因此只要 TrueTime 不确定性小于 Paxos 往返延迟时间,就不会增加事务提交延迟时间。

如需了解详情,请参阅 Spanner 探秘:了解严格的可序列化和外部一致性。

硬件要求

为了使基于软件的 TrueTime 正常运行,底层硬件必须满足以下要求:

  • 时间戳计数器:您必须使用硬件时间戳计数器。在 Linux x86 架构上,此计数器是时间戳计数器 (TSC)。
  • 有界限的时钟速率误差:本地时钟必须以已知且有界限的速率误差运行,该误差与它们的标称频率有关。您可以使用 sla_tester_violation_count 指标监控时钟速率错误违规情况。如需了解详情,请参阅 TrueTime 可观测性。

限制

在实时迁移运行 Spanner Omni 的虚拟机 (VM) 或容器期间,不支持 TrueTime。不过,在 Amazon Web Services (AWS) 等平台上,特定符合条件的机器类型和 Amazon Machine Image (AMI) 除外。如需了解详情,请参阅 Spanner Omni 系统要求。

可观测性

您可以使用 Grafana 中的 TrueTime 信息中心监控以下指标。使用这些指标可确保基于软件的 TrueTime 在预期参数范围内运行:

指标 说明 建议采取的操作
true_time_is_available 检查 TrueTime API 是否可用。 为任何不可用情况配置提醒。如果 TrueTime 不可用,Spanner Omni 也可能不可用。不可用状态可能是暂时性的,也可能是永久性的,需要进行调查。
sla_tester_violation_count 表示可能存在时钟行为问题或违反硬件要求。 调查以确定违规原因。可能的原因包括实时迁移、虚拟机暂停或 TSC 在预期边界时钟速率之外运行。
true_time_interval_uncertainty 跟踪 TrueTime 区间的 epsilon。 监控此指标可最大限度缩短交易延迟时间。较高的不确定性会增加提交等待时间,从而增加整体事务延迟时间。