Skip to content

Latest commit

 

History

History
89 lines (57 loc) · 4.55 KB

timesync.md

File metadata and controls

89 lines (57 loc) · 4.55 KB

분산 시스템에서 시간 동기화 문제

학습 목표

  • 분산된 장치들(프로그램) 간의 시간을 어떻게 동기화 하는가?
  • 어떻게 분산된 장치들이 서로 일관된 정보를 가지게 할 것인가?

분산된 데이터베이스 병행 갱신

예를들어 유저1이 은행서비스에 계좌를 가지고 있다. 은행은 각각 서울과 부산에 다중 db를 운영하고 있는데 입금은 서울은행, 이자 지급은 부산 은행에서 이루어진다고 가정하자.

이 경우에 유저1이 이자 지급 시점에 서울에 1000원을 입금하게 된다면 어떻게 될까?

  • 2024-10-15 15:00:00 서울 유저1 10,000원 보유중
  • 2024-10-15 15:00:00 부산 유저1 10,000원 보유중
  • 2024-10-15 15:01:00 부산 유저1 1% 이자 지급 결정
  • 2024-10-15 15:01:01 서울 유저1 1,000원 입금

위 시나리오 대로라면 11,100원을 가질 것 같지만 서울과 부산의 시계 오차로 인해 정확한 결과값은 알 수 없게 된다.

기댓값은 10,000 + 10,000 * 0.01 + 1,000 이지만 만약 서울 시계가 2초 느리게 흘러간다면 아래처럼 될 것이다.

(10,000 + 1,000) + 10,000 * 1.01

이러한 각 분산 시스템간 시간 문제때문에 발생하는 문제를 해결하기위해 각 시스템들은 시간과 같은 정보들을 동기화해야한다.


시간 동기화 기법

기준 시간을 알려주는 서버의 유무에 따라서 2가지 알고리즘이 존재할 수 있다.

  • 존재할 경우: 크리스티안 알고리즘
  • 존재하지 않을경우: 버클리 알고리즘

또한 네트워크 시간 프로토콜 NTP Network Time Protocol 이라는 별도의 프로토콜도 사용할 수 있다.


크리스티안 알고리즘

크리스티안 알고리즘은 시간을 제어하는 1개의 중앙 서버가 분산된 장치들의 시간을 동기화하는 알고리즘이다.

따라서 아래와 같은 가정을 가지고 있다.

  1. 시간 동기화가 필요한 장치를 클라이언트라고 한다.
  2. 시간 동기화를 해줄 중앙 장치를 서버라고 한다.
  3. 클라이언트가 서버로 요청을 보냈을 때, 두 시간의 차이를 델타 req 라고 부른다.
  4. 서버가 클라이언트로 부터 응답을 보냈을 때, 두 시간의 차이를 델다 resq라고 부른다.
  5. (핵심) 델타 req == 델다 resp로 가정한다.
  6. t4는 서버입장에서 알 수 없으며, 가정 5번에 의해서 아래의 값으로 가정한다. T4 = T3 + dreq|resp / 2

그러나 크리스티안 알고리즘은 다음와 같은 한계를 가지고 있다.

  1. 가정 5번인 델타 req resp이 동일하다는 것은 물리적으로 성립하기 어렵다.
  2. 가정2번에서, 중앙 서버가 마비되면 전체 시스템이 마비되기 때문에 SPoF로 작동한다.

버클리 알고리즘

버클리 알고리즘은 별도 서버 없이 분산된 장치들이 가진 내부 시계만으로 동기화 문제를 해결한다.

이 과정에서 중심이 되어줄 마스터 장치를 선택하고 이를 통해 오차를 보장한다.

아래와 같은 과정을 가지게 된다.

  1. 분산된 장치들은 서로 정확도가 비슷한 시계를 가지게 된다.
  2. 분산된 장치 중에 1대는 마스터 장치로서 작동한다.
  3. 마스터 장치가 다른 장치로 요청을 보내서 각자의 장치에 도착한 시간들의 평균 시간을 연산한다.
  4. 평균 시간에 맞추기 위해 모든 분산 장치에 적용할 조정값을 정한다.

따라서 아래와 같은 한계점이 있다.

  1. 어떤 장치를 마스터로 선출할 것인지.
  2. 메시지를 주고 받는 과정에서 네트워크 시간을 알 수 없음

추가적으로 마스터에 장애가 발생했을 때 자동 복구 및 일관성 유지에 대한 복잡한 문제도 추가로 남는 것 같다.


NTP Network Time Protocol

네트워크 시간 프로토콜은 여러 계층 stratum 으로 구성되어 있어 시간 동기화 문제를 크리스티안 알고리즘을 통해서 해결하고 있다.

계층 정의 예시
Stratum 0 가장 정확한 시간, 중앙 서버 역할 라디오 방송국, 인공위성
Stratum 1 기준 시간을 물어보는 클라이언트 역할
Stratum 2 기준 시간을 물어보는 클라이언트 역할
당연히 크리스티안 알고리즘이 가진 델타 req == resp 문제와 SPoF 문제를 모두 겪을 수 있다. 그래서 결과적으로는 시간 동기화는 너무 어렵고 이 부분에 집착하지 않는 것이 분산 컴퓨팅의 해답이 될 수 있다.