개략적인 규모 추정의 지표

최건우·2023년 7월 29일
0

개략적인 규모 추정

개략적인 규모 추정(back-of-the-envelope estimation)은 보편적으로 통용되는 성능 수치상에서 사고 실험(thought experiments)을 행하여 추정치를 계산하는 행위로서, 어떤 설계가 요구사항에 부합할 것인지 보기 위한 것이다.

개략적 규모 추정을 효과적으로 하기 위해서는 규모 확장성을 표현하는 데 필요한 여러 가지 수치들을 잘 이해하고 있어야 한다.

2의 제곱수

방대한 데이터를 다루는 분산 시스템에서 제대로 데이터 양을 계산하려면, 데이터 볼륨의 단위를 2의 제곱수로 표현하면 어떻게 되는지를 알아야 한다. 최소 단위는 1byte, 8bit로 구성된다.

2의 거듭제곱근사치이름축약형
210=10242^{10} = 10241천(thousand, 1,000)1 Kilobyte1KB
220=1,048,5762^{20} = 1,048,5761백만(million, 1,000,000)1 Megabyte1MB
230=1,073,741,8242^{30} = 1,073,741,82410억(billion, 1,000,000,000)1 Gigabyte1GB
240=1,099,511,627,7762^{40} = 1,099,511,627,7761조(trillion, 1,000,000,000,000)1 Terabyte1TB
250=1,125,899,906,842,6242^{50} = 1,125,899,906,842,6241000조(quadrillion, 1,000,000,000,000,000)1 Petabyte1PB

참고로, ASCII 문자 하나가 차지하는 메모리 크기가 1byte이다.

latency 값

아래는 구글의 제프 딘(Jeff Dean)이 2010년에 공개한, 통상적인 컴퓨터에서 구현된 연산들의 latency(응답 지연) 값이다. 더 빠른 컴퓨터가 등장하면서 더 이상 유효하지 값들도 있지만, 여전히 이 값을 활용해 컴퓨터 연산들의 처리 속도를 짐작해 볼 수 있다.

연산명시간
L1 캐시 참조0.5ns
분기 예측 오류(branch mispredict)5ns
L2 캐시 참조7ns
뮤텍스(mutex) 락/언락100ns
주 메모리 참조100ns
Zippy로 1KB 압축10,000ns=10μs10,000ns=10\mu s
1Gbps 네트워크로 2 KB 전송20,000ns=20μs20,000ns=20\mu s
메모리에서 1MB 순차적으로 read250,000ns=250μs250,000ns=250\mu s
같은 데이터 센터 내에서의 메시지 왕복 지연시간500,000ns=500μs500,000ns=500\mu s
디스크 탐색10,000,000ns=10ms10,000,000ns=10ms
네트워크에서 1MB 순차적으로 read10,000,000ns=10ms10,000,000ns=10ms
디스크에서 1MB 순차적으로 read30,000,000ns=30ms30,000,000ns=30ms
한 패킷의 캘리포니아로부터 네덜란드까지의 왕복 지연시간150,000,000ns=150ms150,000,000ns=150ms

위 표에서 사용한 단위를 정리하면 다음과 같다.
nsns = nanosecond, μs\mu s = microsecond, msms = millisecond
1ns1ns = 10910^{-9}
1μs1\mu s = 10610^{-6}초 = 1,000ns
1ms1ms = 10310^{-3}초 = 1,000μs1,000\mu s = 1,000,000ns

위에 제시된 수치들을 분석하면, 다음과 같은 결론이 나온다.

  • 메모리는 빠르지만, 디스크는 느리다.
  • 디스크 탐색은 가능한 한 피해야 한다.
  • 단순한 압축 알고리즘은 빠르다.
  • 데이터를 인터넷으로 전송하기 전에 가능하면 압축하라.
  • 데이터 센터는 보통 여러 지역(region)에 분산되어 있고, 센터들 간에 데이터를 주고 받는 데는 시간이 걸린다.

가용성에 관한 수치

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

'서비스 사업자와 고객 사이에 맺어진 합의'를 의미하는 SLA(Service Level Agreement)라는 개념이 있는데, 서비스의 가용시간(uptime)도 여기에 기술되어 있다. 아마존, 구글, MS 등의 사업자는 99% 이상의 SLA를 제공한다. 가용률과 시스템 장애 시간(downtime)의 관계는 다음 표와 같다.

가용률downtime/daydowntime/weekdowntime/monthdowntime/year
99%14.40분1.68시간7.31시간3.65일
99.9%1.44분10.08분43.83분8.77시간
99.99%8.64초1.01분4.38분52.60분
99.999%864.00ms6.05초26.30초5.26분
99.9999%86.40ms604.80ms2.63초31.56초

예시

다음 주어진 가정 하에서 SNS 서비스의 QPS, 저장소 요구량을 추정하는 연습을 해 보자.

  1. 가정
    a. MAU는 3억(300 million) 명이다.
    b. 50%의 사용자가 서비스를 매일 사용한다.
    c. 평균적으로 사용자는 매일 2건의 글을 올린다.
    d. 미디어를 포함하는 글은 10% 정도다.
    e. 데이터는 5년간 보관된다.
  2. 추정
    • QPS(Query Per Second) 추정치.
      • DAU = 3억 * 50% = 1.5억(150 million)
      • QPS = 1.5억 * 2건 / 24시간 / 3600초 = 약 3,500
      • 최대 QPS(Peek QPS) = 2 * QPS = 약 7,000
  3. 미디어 저장을 위한 저장소 요구량
    • 평균 글 크기
      • id에 65bytes
      • 텍스트에 140bytes
      • 미디어에 1MB
    • 미디어 저장소 요구량 = 1.5억 2 10% * 1MB = 30TB/일
    • 5년간 미디어를 보관하기 위한 저장소 요구량 = 30TB 365 5 = 약 55PB

개략적 규모 추정은 어떻게 유용할까

개략적 규모 추정은 QPS(Query Per Second), 최대 QPS, 저장소 요구량, 캐시 요구량, 서버 수 등을 추정하는데 유용하게 활용된다. 따라서 평소에 많이 이런 값들을 계산하는 연습을 미리 해 두면, 현업이나 기술면접에서 문제를 잘 풀어낼 수 있을 것이다.





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

profile
부족한 경험을 채우기 위한 나만의 기록 공간

0개의 댓글