분산 시스템의 핵심 과제, 시계 동기화의 모든 것

by DD
1개월 전
조회수 8

분산 시스템(Distributed Systems)에서 시계 동기화는 데이터베이스 일관성, 디버깅, 금융 거래 등 다양한 문제에 영향을 미치는 핵심 요소임

크리스티안 알고리즘(Cristian Algorithm), 버클리 알고리즘(Berkeley Algorithm), NTP(Network Time Protocol), PTP(Precision Time Protocol) 등 다양한 시계 동기화 기술 소개

구글 스패너(Google Spanner)TrueTime하이브리드 논리 시계(Hybrid Logical Clocks) 등 실제 시스템에서의 구현 사례 제시

람포트 시계(Lamport Timestamps)벡터 시계(Vector Clocks)를 활용한 논리 시계(Logical Clocks)의 개념과 한계 설명

시계 동기화(Clock Synchronization)는 정확성, 지연 시간, 복잡성 간의 트레이드오프(Tradeoff)를 수반하며, 시스템 요구 사항에 따라 적절한 솔루션 선택 필요

시계 동기화의 근본적인 문제: 시계 왜곡(Clock Skew)과 드리프트(Drift)

분산 시스템에서 시계 왜곡(Clock Skew)시계 드리프트(Clock Drift)는 심각한 문제를 야기한다. 시계 왜곡은 두 시계 간의 시간 차이를 의미하며, 시계 드리프트는 시간이 지남에 따라 시계가 서로 멀어지는 현상을 나타낸다. 예를 들어, 데이터베이스(Database)에서 트랜잭션 순서를 잘못 지정하거나, 메이크 시스템(Make System)에서 파일 컴파일을 건너뛰는 등의 문제가 발생할 수 있다. 이러한 문제들은 시스템의 일관성을 저해하고, 디버깅을 어렵게 만든다.

크리스티안 알고리즘(Cristian Algorithm)과 버클리 알고리즘(Berkeley Algorithm)의 비교

시계 동기화를 위한 초기 접근 방식인 크리스티안 알고리즘(Cristian Algorithm)은 중앙 집중식 시간 서버에 의존하며, 네트워크 지연(Network Delay)으로 인해 정확성에 제약이 있다. 반면, 버클리 알고리즘(Berkeley Algorithm)은 여러 머신 간의 합의를 통해 시간을 동기화하며, 절대적인 시간 대신 상대적인 조정을 사용한다. 특히, 버클리 알고리즘은 시계를 뒤로 되돌리는 것을 방지하여 단조로운 시간(Monotonic Time)을 유지하는 데 중점을 둔다.

NTP(Network Time Protocol)와 PTP(Precision Time Protocol)의 차이점

NTP(Network Time Protocol)는 인터넷을 통해 밀리초(millisecond) 단위의 정확도를 제공하며, 일반적인 애플리케이션에 적합하다. 하지만, 네트워크 비대칭성(Network Asymmetry)과 운영체제 지연(Operating System Delays)으로 인해 정확도가 제한될 수 있다. 반면, PTP(Precision Time Protocol)는 하드웨어 타임스탬핑(Hardware Timestamping)을 사용하여 서브 마이크로초(sub-microsecond) 단위의 정확도를 달성한다. PTP(Precision Time Protocol)는 금융 거래 시스템(Financial Trading Systems)과 같이 정밀한 시간 동기화가 필요한 분야에 필수적이다.

구글 스패너(Google Spanner)의 TrueTime과 하이브리드 논리 시계(Hybrid Logical Clocks)

구글 스패너(Google Spanner)는 TrueTime을 사용하여 전 세계적으로 분산된 데이터베이스에서 강력한 일관성을 보장한다. TrueTime은 GPS 수신기(GPS Receivers)와 원자 시계(Atomic Clocks)를 결합하여 시간의 불확실성을 최소화한다. TrueTime은 단일 타임스탬프 대신 시간 간격(Time Interval)을 반환하며, 이를 통해 트랜잭션의 순서를 보장한다. CockroachDB하이브리드 논리 시계(Hybrid Logical Clocks)를 사용하여 TrueTime과 유사한 기능을 구현하며, 물리적 시간과 논리적 시계를 결합하여 디버깅 용이성을 높였다.

람포트 시계(Lamport Timestamps)와 벡터 시계(Vector Clocks)의 이해

람포트 시계(Lamport Timestamps)는 인과 관계(Causality)를 기반으로 이벤트의 순서를 결정하는 간단한 방법이다. 하지만, 람포트 시계는 동시성(Concurrency)을 구분할 수 없다는 단점이 있다. 벡터 시계(Vector Clocks)는 각 프로세스에 대한 카운터를 유지하여 람포트 시계의 한계를 극복하고, 모든 이벤트 간의 인과 관계를 정확하게 파악할 수 있다. 하지만, 벡터 시계(Vector Clocks)는 프로세스 수가 증가함에 따라 공간 복잡도가 증가하는 단점이 있다.

시계 동기화 기술 선택 시 고려 사항

시계 동기화 기술을 선택할 때는 정확성(Accuracy), 지연 시간(Latency), 복잡성(Complexity) 간의 트레이드오프(Tradeoff)를 고려해야 한다. NTP(Network Time Protocol)는 대부분의 애플리케이션에 충분한 정확도를 제공하지만, 더 엄격한 순서 보장이 필요한 경우 PTP(Precision Time Protocol)와 같은 정밀한 기술을 고려해야 한다. 또한, 논리 시계(Logical Clocks)는 물리적 시간(Physical Time)에 의존하지 않고 인과 관계를 보장할 수 있지만, 메시지 전송 시 시계 정보를 함께 전달해야 한다는 단점이 있다. 결국, 시스템의 요구 사항과 예산에 따라 적절한 기술을 선택해야 한다.

Clock Synchronization Is a Nightmare