Featured image of post 2. 개략적인 규모 추정

2. 개략적인 규모 추정

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

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

2의 제곱수

분산 시스템에서 다루는 데이터 양은 매우 커질 수 있으나 계산법은 기본을 크게 벗어나지 않는다.

제데로 된 계산 결과를 얻으려면 데이터 볼륨의 단위를 2의 제곱수로 표현하면 어떻게 되는지를 알아야한다.

2의 x 제곱근사치이름축약형
101천1킬로바이트1KB
201백만1메가바이트1MB
3010억1기가바이트1GB
401조1테라바이트1TB
501000조1페타바이트1PB

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

구글의 제프 딘은 2010년에 통상적인 컴퓨터에서 구현된 연산들의 응답지연 값을 공개한 바 있다.

컴퓨터의 성능이 더 좋아지며 유효하진 않지만, 연산의 처리 속도가 어느정도인지 가늠해볼 수는 있다.

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

한 구글 엔지니어가 딘 박사가 나열한 수들을 시각화하였고, 최근 기술 동향(2020)이 반영되어있다.

이 수치들을 분석하면 다음과 같은 결론이 나온다.

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

가용성에 관계된 수치들

고가용성(high availability)은 시스템이 오랜 시간 동안 지속적으로 중단 없이 운영될 수 있는 능력을 지칭하는 용어다.

고가용성을 표현하는 값은 퍼센트로 표현하는데, 100%는 시스템이 단 한 번도 중단된 적이 없었음을 의미하며, 대부분의 서비스는 99%에서 100% 사이의 값을 갖는다.

SLA(Service Level Agreement)는 서비스 사업자(service provider)가 보편적으로 사용하는 용어로, 서비스 사업자와 고객 사이에 맺어진 합의를 의미한다.

이 합의에는 서비스 사업자가 제공하는 서비스의 가용시간(uptime)이 공식적으로 기술되어 있다.

가용시간은 관습적으로 숫자 9를 사용해 표시하며, 9가 많을수록 좋다.

가용률하루당 장애시간주당 장애시간개월당 장애시간연간 장애시간
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.00밀리초6.05초26.305.26분
99.999986.40밀리초604.80밀리초2.63초31.56초

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

가정

  • 월간 능동 사용자(monthly active user)는 3억(300million) 명이다.
  • 50%의 사용자가 트위터를 매일 사용한다.
  • 평균적으로 각 사용자는 매일 2건의 트윗을 올린다.
  • 미디어를 포함하는 트윗은 10% 정도다.
  • 데이터는 5년간 보관된다.

추정

  • QPS(Query Per Second) 추정치
    • 일간 능동 사용자(Daily Active User, DAU) = 3억 * 0.5 = 1.5억
    • QPS = 1.5억 * 2트윗 / 24시간 / 3600초 = 약 3500
    • 최대 QPS(Peek QPS) = 2 * QPS = 약 7000
  • 미디어 저장을 위한 저장소 요구량
    • 평균 트윗 크기
      • tweet_id에 64바이트
      • 텍스트에 140바이트
      • 미디어에 1MB
    • 미디어 저정소 요구량 = 1.5억 * 2 * 0.1 * 1MB = 30TB/일
    • 5년간 미디어를 보관하기 위한 저장소 요구량: 30TB * 365 * 5 = 약 55PB

개략적인 규모 추정과 관계된 면접에서 가장 중요한 것은 문제를 풀어 나가는 절차다.

올바른 절차를 밟느냐가 결과를 내는 것보다 중요하다.

  • 근사치를 활용한 계산(rounding and approximation):
    • 적절한 근사치를 활용하여 시간을 절약하자.
  • 가정(assumption)들은 적어 둔다.
  • 단위(unit)을 붙여라.
    • 헷갈리게 되므로, 단위를 붙이는 습고나을 들여 모호함을 방지할 수 있다.
  • QPS, 최대 QPS, 저장소 요구량, 캐시 요구량, 서버 수 등을 추정하는 것이 자주 출제된다.