CS Insights

분산 환경의 시간 동기화 한계와 구글 Spanner의 TrueTime API 혁신

분산 환경의 시간 동기화 한계와 구글 Spanner의 TrueTime API 혁신
글로벌 결제 네트워크 망을 구축하며 가장 허무하게 무너져 내린 로직은 다름 아닌 "시간(Time)" 그 자체였습니다. 서울 서버에서 기록된 1시 0분 0.1초의 결제 내역과 뉴욕 서버에서 생성된 1시 0분 0.2초의 환불 내역 중, 실제로 어떤 이벤트가 선행되었는지 물리적으로 증명할 방법이 없었습니다. 우리가 믿어 의심치 않던 System.currentTimeMillis()는 단지 서버 메인보드에 결합된 싸구려 쿼츠 진동자의 진동수에 불과합니다. 이 진동자는 온도와 물리적 충격에 의해 하루에도 수 밀리초씩 빨라지거나 느려지는 클럭 드리프트(Clock Drift) 현상을 겪습니다. 이를 교정하기 위해 전 세계의 서버들은 주기적으로 NTP(Network Time Protocol) 데몬을 통해 원자시계와 동기화하지만, 네트워크 패킷이 태평양 해저 케이블을 건너오는 동안 필연적으로 발생하는 라우팅 지연 시간의 불확실성 때문에 서버마다 수 밀리초에서 수십 밀리초의 절대적인 오차가 상시 존재하게 됩니다. 이 거대한 분산 시스템의 시간의 불확실성 때문에 분산 데이터베이스는 메시지의 선후 관계, 즉 인과성(Causality)을 절대 수학적으로 정렬할 수 없는 아키텍처적 절망에 봉착합니다. 이 장벽을 하드웨어와 수학으로 동시에 박살 내버린 것이 구글 Spanner 데이터베이스의 TrueTime API입니다. 구글은 전 세계 모든 데이터센터의 랙 지붕마다 GPS 수신기와 루비듐 원자시계를 물리적으로 박아 넣었습니다. 그리고 기존의 NTP가 "지금 시간은 X입니다"라는 단일 점을 반환했던 것과 달리, TrueTime은 "지금 시간은 확실히 [Earliest, Latest] 구간 사이에 있습니다"라는 불확실성 한계치(Uncertainty Boundary)를 명시적으로 반환합니다. 만약 트랜잭션 A의 최대 늦은 시간이 트랜잭션 B의 가장 이른 시간보다 작다면, 분산 서버들은 통신조차 하지 않고도 A가 무조건 B보다 먼저 일어났음을 입증해 냅니다. 이 대담한 시간의 구간화 기법을 도입한 이후, 구글 스패너는 글로벌 규모의 분산 노드들 사이에서 동기화 커뮤니케이션 오버헤드 없이 완벽한 외부 일관성(External Consistency)을 증명해냈습니다. 시각이라는 절대적인 물리 변수를 프로그래밍의 논리 상수로 통제하려 한 엔지니어링의 정점을 체감하는 주제입니다.

Related Posts