가상 면접 사례로 배우는 대규모 시스템 설계 기초 1 ‐ 개략적인 규모 추정 - thought-corner/backend-roadmap GitHub Wiki

응답 지연 값의 이해

  • 2010년 구글의 제프 딘이 발표한 응답 지연 값은 현대 컴퓨터 시스템의 성능을 이해하는 데 중요한 지표가 되었습니다.
  • 이 값들을 바탕으로 몇 가지 핵심 인사이트를 도출할 수 있다.
    • 메모리 접근은 빠르지만, 디스크 접근은 상대적으로 느리다.
    • 디스크 탐색은 가능한 한 피해야 한다.
    • 단순한 압축 알고리즘은 빠른 처리가 가능하다.
    • 데이터 전송 전에 압축을 사용하면 전체적인 성능을 향상시킬 수 있다.
    • 데이터 센터 간 통신에는 상당한 지연이 발생할 수 있으므로, 이를 고려한 설계가 필요하다.
  • 이런 인사이트를 바탕으로 시스템을 설계하면 더 효율적이고 반응성 높은 애플리케이션을 구축할 수 있다.

가용성에 관한 핵심 지표

  • 고가용성(High Availability)은 시스템이 오랜 시간 동안 지속적으로 중단 없이 운영될 수 있는 능력을 지칭하는 용어다.
  • 고가용성을 표현하는 값은 퍼센트로 표현하는데, 100%는 시스템이 단 한 번도 중단된 적이 없었음을 의미한다.
  • 대부분의 서비스는 99%에서 100% 사이의 값을 가진다.

예제 : 트위터 시스템 규모 추정

가정

  • 월간 활성 사용자 : 3억명
  • 일일 활성 사용자 비율 : 50%
  • 사용자당 일일 평균 트윗 수 : 2건
  • 미디어 포함 트윗 비율 : 10%
  • 데이터 보관 기간 : 5년

추정 과정 정리

  • 일간 활성 사용자 수 : 3억 x 50% = 1.5억명
  • 일일 총 트윗 수 : 1.5억 x 2 = 3억건
  • 초당 쿼리 수(QPS) : 3억 / (24시간 x 3,600초) = 3,500
  • 최대 QPS(피크 타임 고려) : 3,500 x 2 = 7,000

저장소 요구량 측정

  • 평균 트윗 크기 : tweet_id 64바이트, text : 140바이트, media : 1MB
  • 일일 미디어 저장소 요구량 : 1.5억 x 2 x 10% x 1MB = 30TB
  • 5년간 미디어 저장소 요구량 : 30TB x 365 x 5 = 55PB
  • 효과적인 규모 추정을 위해서 다음과 같은 것들을 고려하면 좋다.
    • 문제 해결 능력에 집중 : 정확한 숫자보다는 문제에 접근하는 방식과 논리적 사고 과정이 더 중요하다.
    • 근사치를 활용 : 복잡한 계산을 피하고 빠른 추정을 위해 적절한 반올림을 사용한다.
    • 가정을 명확히 기록 : 모든 가정을 명시적으로 작성해 추정의 기준점을 분명히 한다.
    • 단위를 항상 명시 : 바이트, 초, 쿼리 등의 단위를 명확히 표기하여 혼란을 방지한다.
    • 주요 지표 추정을 연습 : QPS, TPS, 저장소 요구량, 캐시 요구량, 필요 서버 수 등의 추정 방법을 연습한다.
    • 확장성 고려 : 현재 요구사항뿐만 아니라 미래 성장 가능성도 고려하여 추정한다.
    • 다양한 시나리오 고려 : 최선의 경우, 최악의 경우, 평균적인 경우 등 다양한 상황에 대한 추정을 해본다.