본문 바로가기
Computer Science/대규모 시스템 설계

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

by pan5158 2022. 7. 30.

📌 분산 시스템이란?

분산 시스템이란 여러 대 컴퓨터들이 네트워크를 통해서 하나의 프로그램의 공유를 하는 것을 말합니다. 

 

👉 분산 시스템에서 사용될 유일 ID 생성기를 설계?

auto_increment 속성이 설정된 관계형 데이터 베이스의 기본 키를 쓰면 되지 않을까?

분산 환경에서 접근을 할 수 없으므로 한대의 서버에 불안정함므로 요구를 감당을 할 수 없습니다. 

 

1. 문제 이해 및 설계 범위 확정

👉 요구 사항

  • ID는 유일해야 합니다.
  • ID는 숫자로만 구성되어야 합니다.
  • ID는 64비트로 표현될 수있는 값이어야 합니다.
  • ID 발급 날짜에 따라 정렬 가능해야 합니다.
  • 초당 10,000개의 ID를 만들 수 있어야 합니다.

 

2. 개략적 설계안 제시 및 동의 구하기

👉 분산 시스템에서 유일성이 보장되는 ID를 만드는 방법은 여러 가지가 있습니다. 밑에서 확인 해보겠습니다.

 

  • 다중 마스터 복제(multi-master replication)
  • UUID(Universally Unique Identifier)
  • 티켓 서버(ticket server)
  • 트위터 스노플레이크(twiter snowflake) 접근법

 

1). 다중 마스터 복제

  • 이 접근법은 데이터베이스의 auto_increment 기능을 활용하는 것 입니다.
  • ID의 값을 구할 때 1만큼 증가시켜 얻는 것이 아니라 k만큼 증가시켜서 이전에 ID값에 2를 더해 구합니다. 
  • 데이터베이스 수를 늘리면 초당 생산 가능 ID 수도 늘릴 수 있습니다.

단점

  • 여러 데이터 센터에 걸쳐 규모를 늘리기 어렵습니다.
  • ID 유일성은 보장되지만 그 값이 시간에 흐름에 맟추어 커지도록 보장할수는 없습니다.
  • 서버를 추가하거나 삭제할 때도 잘 동작하도록 만들기 어렵습니다.

2). 범용고유식별자(UUID)

네트워크 상에서 서로 모르는 개체들을 구별하기 위해서 고유성이 보장되는 ID를가 필요합니다. 

128비트로 이루어져 있고, 범용고유식별자 중복 될 가능성이 적습니다.

예를 들어 같은 사진을 파일 업로드시 할 경우 구별하기 위해서 사용합니다. 

 

 

장점

  • UUID를 만드는 것은 단순합니다. 서버 사이의 조율이 필요 없으므로 동기화 이슈도 없습니다.
  • 각 서버가 자기가 쓸 ID를 알아서 만드는 구조이므로 규모 확장도 쉽습니다.

단점

  • ID가 128비트 입니다. 
  • ID를 시간순으로 정렬할 수 없습니다.
  • ID에 숫자 아닌 값이 포함될 수 있습니다. 

3). 티켓 서버

티켓 서버는 유일성이 보장되는 ID를 만들어 냅니다. 분산 기본 키를 만들어 각 웹 서버에 auto_increment 기능을 갖추어 주어줍니다. 티켓 서버는 중앙 집중형으로 하나만 사용하는 것입니다.

 

장점

  • 유일성이 보장되는 오직 숫자로만 구성된 ID를 쉽게 만들 수 있습니다.
  • 구현하기 쉽고, 중소 규모 애플리케이션에 적합니다.

단점

  • 티켓 서버는 각 웹서버의 분산 기본키로 만듭니다. 하나의 서버에 장애가 발생 했을 경우 다른 서버도 마찬가지로 장애가 발생합니다.  장애가 발생하는 것을 단일 장애점(SPOF) 이라고 말합니다. 

 

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

위에서 웹 서버를 분산해서 ID 생성하는 방법을 알 수 있었습니다. 트위터 스노플레이크 접근법은 ID 생성하는 것이 아니라 생성하기 전에 ID의 구조에 분할하는 것을 말합니다. 생성 할 64비트 ID구조 입니다.

 

 

👉 ID 구조 종류들을 알아보겠습니다.

  • 사인(sign) 비트: 1비트를 할당합니다. 음수와 양수를 구별하는 데 사용할 수 있습니다.
  • 타임 스탬프(time stamp): 41비트를 할당합니다. 기원 시각 이후로 몇 밀리초(millisecond)가 경과했는지를 나타내는 값입니다. 
  • 데이터 센터 ID: 5비트를 할당합니다. 32개 데이터 센터를 지원할 수 있습니다. 
  • 서버 ID: 5비트를 할당합니다. 데이터 센터당 32개 서버를 사용할 수 있습니다.
  • 일련번호: 12비트를 할당합니다. 각 서버에서는 ID를  생성할 때마다 일련번호를 1만큼 증가합니다. 1밀리초 경과할 때마다 0으로 초기화됩니다. 

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

안정 해시 설계  (0) 2022.07.02
단일장애지점(SPOF)  (0) 2022.06.09
로드밸런서  (0) 2022.06.08