램포트 타임스탬프 (Lamport timestamp)
쉽게 풀면
여러 컴퓨터의 시계는 조금씩 어긋나므로 어떤 사건이 먼저인지 시각만으로는 판단할 수 없습니다. 램포트 타임스탬프는 각 노드가 사건마다 자기 카운터를 1씩 올리고, 메시지를 보낼 때 그 값을 함께 실어 보냅니다. 받는 쪽은 자기 값과 받은 값 중 큰 것에 1을 더해 카운터를 맞추므로, 인과적으로 앞선 사건은 반드시 더 작은 값을 갖게 됩니다.
왜 중요한가
분산 시스템에서 시간과 순서를 어떻게 정의할지를 처음으로 명확히 한 개념으로, 이후 모든 분산 알고리즘의 언어를 만들었습니다. 상호 배제, 복제본 갱신 순서 결정, 로그 정렬 등 순서가 필요한 곳에서 물리 시계 동기화 없이도 쓸 수 있는 기준을 제공합니다. 1978년 램포트의 논문은 분산 컴퓨팅에서 가장 널리 인용되는 성과 중 하나입니다.
논문에서는 이렇게 쓰입니다
논리 시계에 노드 번호를 덧붙여 모든 사건에 일관된 순서를 매겼다는 뜻입니다.
조금 더 깊게 보면
사건 a가 b보다 인과적으로 앞서면 반드시 타임스탬프가 작다는 성질이 성립하지만 그 역은 성립하지 않아, 값이 작다고 인과적으로 앞섰다고 단정할 수 없습니다. 값이 같은 경우는 노드 식별자로 임의의 순서를 매겨 전순서를 만들 수 있으며, 이 전순서가 분산 상호 배제 알고리즘 등에 쓰입니다. 동시성 여부까지 판별하려면 노드마다 카운터를 따로 관리하는 벡터 클럭으로 확장해야 합니다.
주의할 점
벡터 클럭과 달리 두 사건이 동시에 일어난 것인지 인과관계가 있는 것인지 구분하지 못한다는 점이 결정적 한계입니다. 이 값은 실제 시각과 아무 관계가 없으므로 경과 시간이나 만료 시점을 계산하는 데 쓸 수 없습니다.