해결책
전 세계에 분산된 데이터베이스는 트랜잭션이 마치 하나의 순서로 일어난 것처럼 보이기를 원하지만, 서로 다른 데이터센터의 서버들은 시계를 공유하지 않으며 어느 쓰기가 먼저였는지 합의할 수 없다.
Spanner는 TrueTime으로 이 문제를 해결한다. 각 데이터센터는 GPS 수신기와 원자 시계에서 시간을 읽고, 단일 시점 대신 시간 구간을 보고하므로 불확실성이 명시적으로 드러난다. 트랜잭션은 겹치는 다른 트랜잭션의 가능한 최신 시점보다 자신의 커밋 시간이 안전하게 뒤처질 때까지 기다린 뒤, 그 타임스탬프로 모든 복제본에 커밋한다.
그 결과 Spanner는 글로벌 규모에서 외부 일관성을 갖춘 분산 트랜잭션을 제공한 최초의 시스템이 되었으며, 과거 시점의 비차단 읽기, 잠금 없는 읽기 전용 트랜잭션, 모든 복제본에 걸친 원자적 스키마 변경을 가능하게 했다.
이룬 성과
시간 측정을 단지 빠르게 만드는 것이 아니라 신뢰할 수 있게 만들었다
GPS와 원자 시계가 불확실성에 상한을 두므로 시간을 신뢰할 수 있다
불확실성이 지나가기를 기다리면 추측이 증명 가능한 순서로 바뀐다
하나의 글로벌 타임스탬프가 모든 복제본에 동일한 커밋 지점을 부여한다
지역 간 읽기와 스키마 변경을 병렬로 안전하게 실행할 수 있게 한다
분산 시스템에 전순서가 필요할 때는 영리한 메시징만으로는 충분하지 않다. 공유 시계를 신뢰할 수 있게 만들면 모두가 동의하는 시간에서 순서가 자연스럽게 도출된다.
그 후
Spanner는 구글의 지역 간 트랜잭션 서비스를 뒷받침하는 핵심 기반이 되었고, 이후 Cloud Spanner로 공개되었다. TrueTime 접근법은 실제 세계의 시계를 활용해 분산 일관성을 해결하는 사례 연구가 되었다.
근거 확인하기
출처
- Spanner: Google's Globally-Distributed Database Google Research · research.google
- Spanner: TrueTime and external consistency Google Cloud Documentation · cloud.google.com