램포트 시계 vs 벡터 시계: 분산 시스템의 논리적 시간
목차
-
물리적 시계의 문제
- 메시지의 타임스탬프 불일치
- 논리적 시계의 필요성
-
램포트 시계
- 램포트 시계란?
- 램포트 시계의 특징
- 램포트 시계의 알고리즘
- 램포트 시계의 제한적인 측면
-
벡터 시계
- 벡터 시계란?
- 벡터 시계의 특징
- 벡터 시계의 알고리즘
- 벡터 시계의 장점
-
램포트 시계 vs 벡터 시계
- 램포트 시계와 벡터 시계의 차이점
- 두 시계의 장단점 비교
-
결론
물리적 시계의 문제
분산 시스템에서 메시지의 순서를 제어하기 위해서는 시계가 필요한데, 물리적 시계는 문제가 있을 수 있다. 예를 들어, 유저 A가 "달은 치즈로 이뤄져 있다"라는 메시지를 보내고, 유저 B가 이 메시지에 대한 응답으로 "아니오, 그렇지 않다"라는 메시지를 보낸다고 가정해보자. 이런 경우, 메시지의 타임스탬프는 예상한 순서와 일치하지 않을 수 있다. 심지어, 물리적 시계가 동기화되었다 하더라도 이러한 불일치가 발생할 수 있다. 이런 문제는 원인과 결과의 인과 관계를 일관되게 나타내지 못하기 때문에, 논리적 시계의 필요성이 대두된다.
램포트 시계
램포트 시계란?
램포트 시계는 분산 시스템에서 사용되는 시계의 한 종류로, 이벤트 간의 인과 관계를 정확하게 기록하기 위해 사용된다. 시간의 경과를 측정하는 것이 아니라, 이벤트 발생 횟수를 카운팅하여 타임스탬프로 사용한다. 램포트 시계는 인과 관계를 정확히 파악하기 위해 설계된 시계이며, 두 이벤트 간의 발생 순서를 제어하는데 사용된다.
램포트 시계의 특징
- 인과 관계를 정확하게 파악할 수 있다.
- 두 이벤트의 타임스탬프를 비교하여 순서를 판단할 수 있다.
- 동일한 타임스탬프를 가진 두 개의 이벤트는 동시에 발생한 것으로 간주된다.
램포트 시계의 알고리즘
램포트 시계 알고리즘은 각 노드마다 변수 t를 가지고 시작한다. 이 변수는 이벤트 발생 횟수를 카운트하는 역할을 한다. 이벤트가 발생할 때마다 t를 증가시킨다. 또한, 메시지를 전송할 때에도 t를 증가시키고, 메시지에 해당하는 타임스탬프를 첨부하여 전송한다. 이 메시지를 수신한 노드는 수신 시간을 기준으로 자신의 t값을 업데이트하고, 메시지를 응용 프로그램에 전달한다.
램포트 시계의 제한적인 측면
- 두 타임스탬프의 비교로 두 이벤트의 순서를 판단할 수 있지만, 두 이벤트가 동시에 발생한 것인지는 판단할 수 없다.
- 서로 다른 이벤트에 동일한 타임스탬프가 할당될 수 있다.
벡터 시계
벡터 시계란?
벡터 시계는 분산 시스템에서 사용되는 또 다른 시계의 종류로, 램포트 시계와 마찬가지로 인과 관계를 기록하기 위해 사용된다. 램포트 시계와는 달리 각 노드에 대한 타임스탬프가 단일 변수가 아니라 벡터로 표현된다. 벡터의 각 원소는 해당 노드에서 발생한 이벤트의 개수를 나타낸다.
벡터 시계의 특징
- 동시에 발생한 두 이벤트의 순서를 정확하게 확인할 수 있다.
- 벡터 시계의 타임스탬프는 이벤트 집합을 고유하게 식별할 수 있다.
벡터 시계의 알고리즘
벡터 시계 알고리즘은 먼저 각 노드의 이름을 알고 있다고 가정한다. 각 노드의 이름을 n차원 벡터로 나타내고, 각 이벤트에는 해당 벡터가 타임스탬프로 첨부된다. 각 이벤트 발생 시 해당 노드의 벡터 원소를 증가시킨다. 메시지를 전송할 때에도 자신의 벡터 원소를 증가시키고, 메시지에 해당하는 벡터 타임스탬프를 첨부하여 전송한다. 이 메시지를 수신한 노드는 자신의 벡터와 수신한 벡터를 원소별로 비교하여 각 원소의 최댓값을 선택한다. 그 후, 자신의 벡터를 업데이트하고 메시지를 응용 프로그램에 전달한다.
램포트 시계 vs 벡터 시계
- 램포트 시계는 두 이벤트의 순서를 정확하게 알 수 있지만, 두 이벤트가 동시에 발생한 것인지는 판단할 수 없다. 벡터 시계는 동시에 발생한 두 이벤트도 순서를 판단할 수 있다.
- 램포트 시계는 간단하고 이해하기 쉽지만, 인과 관계를 파악하는 데에는 한계가 있다. 반면에 벡터 시계는 더 복잡하지만, 인과 관계를 정확하게 추론할 수 있다는 장점이 있다.
결론
분산 시스템에서는 올바른 이벤트 순서를 유지하기 위해 논리적 시계가 필요하다. 램포트 시계와 벡터 시계는 이러한 목적을 위해 사용되는 두 가지 주요한 알고리즘이다. 램포트 시계는 순서를 기반으로 인과 관계를 찾아내는 데 사용되며, 벡터 시계는 동시에 발생한 이벤트를 처리하는 데 사용된다. 각 시계의 장단점에 따라 적절한 시계를 선택하여 분산 시스템의 동작을 조율하는 것이 중요하다.