본문으로 바로가기

7장. 분산 시스템을 위한 유일 ID 생성기 설계

category 대규모 시스템 설계 2023. 11. 26. 22:55
728x90
반응형
SMALL

분산 시스템을 위한 유일 ID 생성기 설계

  • 관계형 DB의 Auto Increment 키는 분산환경에서는 한개의 DB서버로는 힘들디.
  • 여러 DB 서버의 경우 지연 시간을 낮추기가 힘들다.

 

 

분산 시스템에서 유일성이 보장되는 방법

  • 다중 마스터 복제
  • UUID
  • 티켓 서버
  • 트위터 스노플레이크 접근법

 

 

다중 마스터 복제

대규모 시스템 설계 7장
  • DB의 Auto_increment 기능을 활용하는방법이다
  • 다음 id의 값이 1만큼 증가시켜 얻는것이 아닌, k만큼 증가시킨다.(k는 서버의 개수이다.)
  • 해당 서버가 이전 ID 값에 전체 서버의 수 K를 더한 값이 생성된다.
  • DB개수를 늘리면 초당 생산 가능 ID 개수를 늘릴수 있지만 단점이 존재한다.
단점
  • 여러 데이터 센터에 걸쳐 규모를 늘리기 어려움
  • ID의 유일성은 보장되지만 그 값이 시간 흐름에 맟춰 커지도록 보장할 수는 없다.
  • 서버를 추가하거나 삭제할 때도 잘 동작하도록 만들기 어렵다.

 

UUID

  • UUID는 컴퓨터 시스템에 저장되는 정보를 유일하게 식별하기 위한 128비트짜리 수
  • 충돌 가능성이 지극히 낮다.(중복 UUID가 1개가 생길 확률을 50% 끌어 올리려면 초당 10억개의 UUID를 100년동안 계속 만들어야한다.)
  • 서버간 조율 없이 독립적으로 생산 가능하다.
장점
  • UUID를 만드는 것이 단순하다, 서버끼리의 조율이 필요 없으므로 동기화 이슈도 없다.
  • 각 서버가 자기가 쓸 ID를 알아서 만드므로 규모 확장도 쉽다.
단점
  • ID가 128비트로 길다.(09c93e62-50b4-468d-bf8a-c07e1040bfb2)
  • ID를 시간순으로 정렬할 수 없다.
  • ID에 숫자가 아닌 값이 포함될 수 있다.

 

 

티켓 서버

분산 시스템에서 유일 ID 생성기 설계 – 민동현 – Dream Cometrue
  • 플리커 라는 곳은 분산 기본 키를 만들어 내기위해 이 기술을 사용하였다고 한다.
  • 이 아이디어의 핵심은 auto_increment 기능을 갖춘 DB 서버중앙 집중형으로 티켓 서버로서 하나만 사용하는 것이다.
장점
  • 유일성이 보장되는 오직 숫자로만 구성된 ID를 쉽게 만들 수 있다.
  • 구현하기 쉽고, 중소 규모 애플리케이션에 적합하다.
단점
  • 티켓 서버가 SPOF(Single-Point-of-Failure)가 된다.
  • SPOF를 피하려면 티켓 서버 여러대가 필요하지만 그럴경우 데이터 동기화 이슈 같은 새로운 문제가 발생한다.

 

 

트위터 스노플레이크 접근법

  • 각개 격파 전략
    • 생성해야 하는 ID 구조를 여러 절로 분할하는 것이다.
    • Sign 비트:
      • 1비트를 할당한다 , 음수와 양수를 구별하는 데 사용할 수 있을 것이다.
    • 타임스탬프:
      • 41비트를 할당한다, 기원 시각 이후 몇 밀리초가 경과했는지를 나타내는 값
      • 2의 41승 -1 밀리초 는 약 69년에 해당하는데 69년동안만 정상작동 하므로 69년 후에는 기원 시각을 바꾸거나 ID 체계를 다른 것으로 이전해야한다.
    • 데이터 센터 ID:
      • 5비트를 할당한다. 32개 데이터 센터를 지원 할 수 있다.
    • 서버 ID:
      • 5비트를 할당한다. 데이터 센서당 32개 서버를 사용할 수 있다.
    • 일련번호:
      • 12비트를 할당한다. 각 서버에서는 ID를 생성할 때 마다 이 일련번호를 1만큼 증가시킨다. 이 값은 1밀리초가 경과할 때마다 0으로 초기화된다.
      • 2의 12승은 4096개 로서, 어떤 서버가 같은 밀리초 동안 하나 이상의 ID 를 만들어 낸 경우에만 0보다 큰 값을 갖게된다.
  • snowflake
#### 그외 

- 시계 동기화:
  - ID 생성 서버들이 전부 같은 시계를 사용한다고 가정한 상황에서 `하나의 서버가 여러 코어에서 실행될 경우` 유효하지 않을 수 있다.
  - 이 경우 `NTP(Network Time Protocol)`은 이 문제를 해결하는 가장 보편적 수단이다.
- 각 절(Section)의 길이 최적화
  - 동시성이 낮고 수명이 긴 애플리케이션이라면 `일련번호 절의 길이를 줄이고` `타임스탬프 절의 길이를 늘리는 것이 효과적일 수도 있을 것이다.`
- 고가용성
  - ID 생성기는 필수 불가결 컴포넌트 이므로 아주 높은 가용성을 제공해야 한다.

 

728x90
반응형
LIST

'대규모 시스템 설계' 카테고리의 다른 글

5장. 안정해시  (1) 2023.11.19
4장. 처리율 제한장치 설계  (0) 2023.11.19
임시  (0) 2023.10.26