Spanner Omni는 TrueTime API의 소프트웨어 기반 버전을 구현하여 자체 관리 환경에서 외부 일관성을 달성합니다. 이 시스템은 클러스터 기반 아키텍처를 사용하여 신뢰할 수 있는 타임스탬프를 제공하므로 트랜잭션이 인프라 전반에서 엄격한 직렬 순서를 반영합니다.
정확하고 일관된 타임스탬프와 직렬화 가능성을 유지하려면 네트워크 지연 시간과 시계 드리프트를 기반으로 시간 간격을 계산하는 기본 시간 서버와 호스트 기반 클라이언트를 구성하세요. 특정 측정항목을 통해 배포의 성능을 모니터링하고 기본 하드웨어가 클럭 속도 오류 및 타임스탬프 동기화에 필요한 사양을 충족하는지 확인합니다.
Spanner Omni 및 TrueTime
관리형 버전의 Spanner와 동일한 외부 일관성을 제공하기 위해 Spanner Omni는 Google의 TrueTime API의 소프트웨어 기반 구현을 사용합니다. 관리형 Spanner 환경에서 TrueTime은 물리적 GPS 수신기 및 원자 시계와 동기화된 여러 시간 서버를 사용하여 불확실성 간격을 좁힙니다. Spanner Omni는 자체 관리 인프라에서 실행되며 이 물리적 하드웨어를 사용할 수 없으므로 대신 클러스터 기반 아키텍처를 사용하여 일관성을 달성합니다.
이 구현을 사용하면 모든 트랜잭션이 순차적으로 실행됩니다.
트랜잭션 하나가 완료되기 전에 다른 트랜잭션이 시작되면 두 번째 트랜잭션에 첫 번째 트랜잭션의 효과가 반영됩니다. Spanner Omni는 다음과 같은 인과적 순서를 따릅니다. t2 = TrueTime::Now() 호출이 시작되기 전에 t1 = 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)을 기반으로 시간 간격을 계산합니다. 배포의 모든 호스트 머신에는 속도 오류에 대해 알려진 범위 내에서 작동하는 로컬 시계가 있어야 합니다.
불확실성 (입실론) 및 지연 시간 영향
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 Machine Image (AMI)에는 예외가 있습니다. 자세한 내용은 Spanner Omni 시스템 요구사항을 참고하세요.
관측 가능성
Grafana의 TrueTime 대시보드를 사용하여 다음 측정항목을 모니터링할 수 있습니다. 이러한 측정항목을 사용하여 소프트웨어 기반 TrueTime이 예상 매개변수 내에서 작동하는지 확인하세요.
| 측정항목 | 설명 | 권장 조치 |
|---|---|---|
true_time_is_available |
TrueTime API를 사용할 수 있는지 확인합니다. | 사용 불가능한 경우에 대한 알림을 구성합니다. TrueTime을 사용할 수 없으면 Spanner Omni도 사용할 수 없을 가능성이 높습니다. 사용 불가는 일시적일 수도 있고 지속적일 수도 있으며 조사가 필요합니다. |
sla_tester_violation_count |
잠재적인 시계 동작 문제 또는 하드웨어 요구사항 위반을 나타냅니다. | 조사하여 위반 원인을 파악합니다. 가능한 원인은 라이브 마이그레이션, VM 일시 중지 또는 TSC가 예상된 바운드 클럭 속도 외부에서 작동하는 것일 수 있습니다. |
true_time_interval_uncertainty |
TrueTime 간격의 epsilon을 추적합니다. | 트랜잭션 지연 시간을 최소화하려면 이 측정항목을 모니터링하세요. 불확실성이 높으면 커밋 대기 시간이 늘어나 전체 트랜잭션 지연 시간이 늘어날 수 있습니다. |