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 开始之前提交,则关键时间戳会反映出 t1t2 之前发生。

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

TrueTime 架构

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

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

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

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

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

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

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

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

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

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

硬件要求

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

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

限制

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

可观测性

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

指标 说明 推荐措施
true_time_is_available 检查 TrueTime API 是否可用。 为任何不可用情况配置提醒。如果 TrueTime 不可用, Spanner Omni 也可能不可用。不可用情况可能是暂时性的,也可能是永久性的,需要进行调查。
sla_tester_violation_count 表示潜在的 时钟行为问题或硬件 要求违规情况。 进行调查以找出违规原因。可能的原因 包括实时迁移、虚拟机暂停或 TSC 在预期时钟速率范围之外运行。
true_time_interval_uncertainty 跟踪 epsilon 的 TrueTime 间隔。 监控此指标以最大限度地缩短事务延迟时间。不确定性过高 会增加提交等待时间,从而增加整体事务 延迟时间。