요구사항
우리 회사에서 새로운 소셜미디어 플랫폼을 개발하고 있습니다. 사용자가 게시물을 작성할 때마다 고유한 게시물 ID가 필요한 상황입니다.
비즈니스 요구사항
- 글로벌 서비스로 아시아, 유럽, 북미 3개 리전에 서비스 예정
- 일일 활성 사용자(DAU) 1억 명 목표
- 피크 시간대 초당 50,000개의 게시물 생성 예상
- 게시물은 시간순으로 정렬되어 타임라인에 표시되어야 함
1단계 문제 이해 및 설계 범위 확정
- ID는 어떤 특성을 갖나요?
- 유일성: 전체 시스템에서 절대 중복되어서는 안 됩니다
- 정렬 가능성: 게시물이 시간순으로 타임라인에 표시되어야 하므로, ID만으로도 생성 시점을 유추할 수 있어야 합니다
- 확장성: 글로벌 3개 리전에서 동시에 ID를 생성해도 충돌이 없어야 합니다
- ID가 숫자로만 구성되어야 할까요, 아니면 문자열도 포함될 수 있나요?
- 숫자로만 구성되어야 합니다. 데이터베이스 인덱싱 효율성과 저장 공간 최적화를 위해서요.
- 특별한 길이 제약이 있나요? (예: 64비트 정수 범위 내)
- 네, 64비트 정수 범위 내에서 표현 가능해야 합니다. 기존 시스템들과의 호환성 때문입니다.
- "시간순 정렬"이라고 하셨는데, 정확히 어느 정도 수준의 순서 보장이 필요한가요? 밀리초 단위까지 정확해야 하나요? 아니면 대략적인 시간 순서만 맞으면 될까요?
- 밀리초 단위까지는 아니더라도, 적어도 '아침에 작성된 게시물이 저녁에 작성된 게시물보다 작은 ID 값'을 가져야 합니다. 완벽한 시간 순서보다는 대략적인 시간 기반 정렬이 가능하면 됩니다.
- 앞서 말씀드린 초당 50,000개 생성 외에, 지연시간(latency) 요구사항도 있나요?
- 성능: ID 생성 응답시간은 100ms 이내여야 합니다. 사용자가 게시물 작성 시 지연을 느끼면 안 되거든요."
⇒ 정리하자면, 초당 50,000개, 3개 리전, 시간순 정렬, 64비트