요약
- 분산 시스템에서 이벤트의 순서를 결정하기 위한 논리적 시계
- Leslie Lamport가 1978년 제안
- 물리적 시간 동기화 없이 이벤트 순서 추적 가능
왜 필요한가?
- 분산 시스템의 각 노드는 독립적인 물리적 시계를 가짐
- 노드 간 시간 동기화가 어려움 (네트워크 지연, 클럭 드리프트)
- 이벤트 발생 순서를 정확히 파악해야 함
동작 원리
규칙
- 초기화: 각 프로세스의 카운터를 0으로 초기화
- 이벤트 발생: 카운터를 1 증가
- 메시지 전송: 현재 카운터 값을 메시지에 포함
- 메시지 수신:
max(내 카운터, 받은 카운터) + 1로 업데이트
예시
Process A: [1] → [2] ────────────→ [5]
↘ send(2)
Process B: [1] → [3] (max(1,2)+1) → [4]
Happens-Before 관계
a → b: 이벤트 a가 b보다 먼저 발생C(a) < C(b)이면 a가 b보다 먼저 발생했을 가능성이 있음- 단, 역은 성립하지 않음 (동시 발생 이벤트 구별 불가)
한계
| 한계 | 설명 |
|---|---|
| 동시성 구별 불가 | C(a) = C(b)여도 실제 동시 발생인지 알 수 없음 |
| 인과관계 역추적 불가 | C(a) < C(b)라고 해서 a → b라고 단정 불가 |
개선된 방법
- 벡터 시계 (Vector Clock): 각 프로세스별 카운터 배열 유지
- 동시 발생 이벤트 구별 가능
- 인과관계 완전 추적 가능
참고
벡터 시계 (Vector Clock)는 이벤트의 인과관계를 추적해서 램포트 시계의 동시성 구별 한계를 해결한다. 비잔틴 장군 문제는 악의적인 노드가 포함됐을 때를 가정한 분산 합의 문제 두 장군 문제 linearizable DB