본문 바로가기

Architecture

[Architecture]개략적인 규모를 추정하는 방법

목차

  1. 개략적인 규모 추정의 중요성
  2. 응답 지연 값의 이해
  3. 가용성에 관한 핵심 지표
  4. 실제 예제: 트위터 시스템 규모 추정
  5. 효과적인 규모 추정을 위한 팁

개략적인 규모 추정의 중요성

개략적인 규모 추정은 시스템 설계의 핵심 단계 중 하나입니다. 이는 제안된 설계가 요구사항을 충족시킬 수 있는지를 판단하는 데 필수적입니다. 효과적인 추정을 위해서는 다음 요소들에 대한 이해가 필요합니다:

  • 2의 제곱수
  • 응답 지연(latency) 값
  • 가용성 관련 수치

이러한 요소들을 이해하고 활용함으로써 더 정확하고 신뢰할 수 있는 시스템 설계를 할 수 있습니다.

응답 지연 값의 이해

2010년 구글의 제프 딘이 발표한 응답 지연 값은 현대 컴퓨터 시스템의 성능을 이해하는 데 중요한 지표가 되었습니다. 이 값들을 바탕으로 몇 가지 핵심 인사이트를 도출할 수 있습니다:

  1. 메모리 접근은 빠르지만, 디스크 접근은 상대적으로 느립니다.
  2. 디스크 탐색은 가능한 한 피해야 합니다.
  3. 단순한 압축 알고리즘은 빠른 처리가 가능합니다.
  4. 데이터 전송 전에 압축을 사용하면 전체적인 성능을 향상시킬 수 있습니다.
  5. 데이터 센터 간 통신에는 상당한 지연이 발생할 수 있으므로, 이를 고려한 설계가 필요합니다.

이러한 인사이트를 바탕으로 시스템을 설계하면, 더 효율적이고 반응성 높은 애플리케이션을 구축할 수 있습니다.

가용성에 관한 핵심 지표

고가용성은 시스템이 지속적으로 중단 없이 운영될 수 있는 능력을 의미합니다. 대부분의 현대적인 서비스는 99% ~ 100% 사이의 가용성을 목표로 합니다.

  • 아마존, 구글, 마이크로소프트와 같은 대기업은 일반적으로 99% 이상의 가용률을 보장합니다.
  • SLA(Service Level Agreement)는 서비스 제공자와 고객 간에 맺어지는 서비스 수준에 대한 계약으로, 가용성은 이 계약의 핵심 요소 중 하나입니다.

가용성 수치의 예:

  • 99% (두 개의 9): 연간 약 3.65일의 다운타임
  • 99.9% (세 개의 9): 연간 약 8.76시간의 다운타임
  • 99.99% (네 개의 9): 연간 약 52.56분의 다운타임
  • 99.999% (다섯 개의 9): 연간 약 5.26분의 다운타임

이러한 가용성 목표를 달성하기 위해 다중화, 자동 복구, 로드 밸런싱 등의 기술을 활용합니다.

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

트위터와 같은 대규모 소셜 미디어 플랫폼의 시스템 요구사항을 추정하는 것은 복잡한 작업입니다. 다음은 간단한 추정 예제입니다:

가정:

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

추정 과정:

  1. 일간 활성 사용자 수: 3억 × 50% = 1.5억 명
  2. 일일 총 트윗 수: 1.5억 × 2 = 3억 건
  3. 초당 쿼리 수(QPS): 3억 / (24시간 × 3600초) ≈ 3,500
  4. 최대 QPS (피크 시간 고려): 3,500 × 2 ≈ 7,000

저장소 요구량 추정:

  • 평균 트윗 크기:
    • tweet_id: 64바이트
    • 텍스트: 140바이트
    • 미디어: 1MB (10%의 트윗에만 적용)
  • 일일 미디어 저장소 요구량: 1.5억 × 2 × 10% × 1MB = 30TB
  • 5년간 미디어 저장 요구량: 30TB × 365 × 5 ≈ 55PB

이러한 추정을 통해 필요한 서버 용량, 네트워크 대역폭, 저장소 등을 계획할 수 있습니다.

효과적인 규모 추정을 위한 팁

  1. 문제 해결 능력에 집중하세요: 정확한 숫자보다는 문제에 접근하는 방식과 논리적 사고 과정이 더 중요합니다.
  2. 근사치를 활용하세요: 복잡한 계산을 피하고 빠른 추정을 위해 적절한 반올림을 사용하세요.
  3. 가정을 명확히 기록하세요: 모든 가정을 명시적으로 작성하여 추정의 기준점을 분명히 합니다.
  4. 단위를 항상 명시하세요: 바이트, 초, 쿼리 등의 단위를 명확히 표기하여 혼란을 방지합니다.
  5. 주요 지표 추정을 연습하세요: QPS, TPS, 저장소 요구량, 캐시 요구량, 필요 서버 수 등의 추정 방법을 미리 연습해 두세요.
  6. 확장성을 고려하세요: 현재 요구사항뿐만 아니라 미래의 성장 가능성도 고려하여 추정합니다.
  7. 다양한 시나리오를 고려하세요: 최선의 경우, 최악의 경우, 평균적인 경우 등 다양한 상황에 대한 추정을 해보세요.

이러한 팁들을 활용하면 더 정확하고 유용한 규모 추정을 할 수 있으며, 이는 궁극적으로 더 강력하고 확장 가능한 시스템 설계로 이어집니다.

가상 면접 사례로 배우는 대규모 시스템 설계 기초