2장. 개략적인 규모 측정

parkrootseok·2025년 5월 8일
0

시스템디자인

목록 보기
6/6
post-thumbnail

들어가며

시스템 설계 면접을 진행하는 과정에서 때로는 시스템 용량이나 성능 요구사항을 개략적으로 추정해 보라는 요구를 받기도 합니다. 이를 효과적으로 수행하기 위해선 규모 확장성을 표현하기 위한 기본기에 능숙해야 합니다. 2장에서는 기본기인 2의 제곱수, 응답지연 값, 고가용성 관련 수치 등을 알아보는 챕터입니다.

2의 제곱수

분산 시스템에서 다루는 데이터 양은 엄청나게 커질 수 있지만, 계산법은 기본을 크게 벗어나지 않습니다. 제대로 된 계산 결과를 얻으려면 데이터 볼륨의 단위를 2의 제곱수로 표현하면 어떻게 되는지를 우선 알아야 합니다. 최소 단위는 1바이트(8비트)로 구성되며, ASCII 문자 하나가 차지하는 메모리 크기가 1바이트입니다.

흔히 사용하는 데이터 볼륨 단위들에 대한 정보는 다음과 같습니다.

  • 1KB
    • 2의 제곱수 : 2102^{10}
    • 근사치 : 1천
  • 1MB
    • 2의 제곱수 : 2202^{20}
    • 근사치 : 1백만
  • 1GB (2302^{30})
    • 2의 제곱수 : 2302^{30}
    • 근사치 : 10억
  • 1TB
    • 2의 제곱수 : 2402^{40}
    • 근사치 : 1조
  • 1PB
    • 2의 제곱수 : 2502^{50}
    • 근사치 : 1000조

모든 프로그래머가 알아야 하는 응답지연 값

구글의 제프 딘은 2010년에 통상적인 컴퓨터에서 구현된 연산들의 응답지연 값을 공개한 바 있습니다. 이들 가운데 몇몇은 HW의 발전으로 유효하지 않게 되었지만, 아직도 이 수치들은 컴퓨터 연산 처리 속도를 짐작할 수 있도록 도와줍니다.

연산명과 그에 대한 응답지연 값의 정보는 다음과 같습니다.

  • L1 캐시 참조 : 1ns1\mathrm{ns}
  • 분기 예측 오류 : 3ns3\mathrm{ns}
  • L2 캐시 참조 : 4ns4\mathrm{ns}
  • 뮤텍스 락/언락 : 17ns17\mathrm{ns}
  • 주 메모리 참조 : 100ns100\mathrm{ns}
  • Zippy로 1KB 압축 : 2,000ns=2μs2,000\mathrm{ns} = 2\mu\mathrm{s}
  • 메모리에서 1MB 순차적 Read : 3,000ns=3μs3,000\mathrm{ns} = 3\mu\mathrm{s}
  • 디스크 탐색 : 2,000,000ns=2ms2,000,000\mathrm{ns} = 2\mathrm{ms}
  • 디스크에서 1MB 순차적 Read : 825,000ns=825μs825,000\mathrm{ns} = 825\mu\mathrm{s}
  • 네트워크에서 1MB 순차적 Read : 10,000,000ns=10ms10,000,000\mathrm{ns} = 10\mathrm{ms}
  • 일반 상용 네트워크에서 2KB 전송 : 44,000ns=44μs44,000\mathrm{ns} = 44\mu\mathrm{s}
  • 동일 데이터 센터 내에서의 패킷 왕복 지연시간 : 500,000ns=500μs500,000\mathrm{ns} = 500\mu\mathrm{s}
  • 한 패킷이 캘리포니아로부터 네덜란드까지의 왕복 지연시간 : 150,000,000ns=150ms150,000,000\mathrm{ns} = 150\mathrm{ms}

위 수치들을 분석하면 다음과 같은 결론을 낼 수 있습니다.

  • 메모리는 빠르지만 디스크는 아직 느리다.
    • 메모리에서 1MB 데이터를 읽는데 3μs3\mu\mathrm{s}가 소요되는 반면
    • 디스크에서는 825μs825\mu\mathrm{s}가 소요
  • 디스크 탐색은 가능한 피해야한다.
    • 디스크 탐색에서의 응답 지연은 무려 2ms2\mathrm{ms}
  • 단순 압축 알고리즘은 빠르다.
    • Zippy로 1KB를 압축하기 위한 지연시간은 2μs2\mu\mathrm{s}
    • 즉, 데이터를 인터넷으로 전송하기 전에 가능하면 압축하는 것이 좋음
  • 데이터 센터는 보통 여러 지역에 분산되어 있고, 센터들 간 데이터를 주고받는 데는 시간이 소요된다.

가용성에 관계된 수치들

고가용성은 시스템이 오랜 시간 동안 지속적으로 중단 없이 운영될 수 있는 능력을 말합니다. 고가용성을 표현하는 값은 퍼센트로 표현하는데, 100%는 시스템이 단 한 번도 중단된 적이 없었음을 의미합니다. 대부분의 서비스는 99% 이상을 유지하고 있습니다.

SLA는 서비스 사업자가 보편적으로 사용하는 용어로, 서비스 사업자와 고객 사이에 맺어진 합의를 의미합니다. 이 합의에는 서비스의 가용시간이 공식적으로 기술되어 있습니다. 가용시간의 경우 관습적으로 숫자 9를 사용해 표시하는데, 9가 많을수록 좋다고 볼 수 있습니다.

9의 개수와 시스템 장애 시간 사이에 대한 관계는 다음과 같습니다.

가용률하루당 장애시간주당 장애시간개월당 장애시간연간 장애시간
99%14.40분1.68시간7.31시간3.65일
99.9%1.44분10.08분43.88분8.77시간
99.99%8.64초1.01분4.38분52.6분
99.999%864밀리초6.05초26.30초5.26분
99.9999%86.4밀리초604.8밀리초2.63초31.56초

예제: 트위터 QPS와 저장소 요구량 측정

가정

  • MAU(월간 능동 사용자)는 3억 명입니다.
  • 매일 50%의 사용자가 트위터를 사용합니다.
  • 평균적으로 각 사용자는 매일 2건의 트윗을 수행합니다.
  • 미디어를 포함하는 트윗의 비율은 10% 입니다.
  • 데이터는 5년간 보관됩니다.

추정

  • QPS 추정치
    • DAU(일간 능동 사용자) = MAU X 사용량 = 3억 X 50% = 1.5억
    • QPS = DAU(1.5억) X 트윗 수행 개수(2) / 24시간 / 60분 / 60초 = 약 3,500
    • 최대 QPS = 2 X QPS = 약 7,000
  • 미디어 저장을 위한 저장소 요구량
    • 일당 저장소 요구량
      • DAU(1.5억) X 평균 트윗 개수(2) X 미디어 포함 비율(10%) X 미디어 크기(1MB) = 30TB/일
    • 5년간 저장소 요구량
      • 일당 저장소 요구량(30TB) X 365 X 5 = 약 55PB
profile
동료들의 시간과 노력을 더욱 빛내줄 수 있는 개발자가 되고자 노력합니다.

0개의 댓글