Post

가상 면접 사례로 배우는 대규모 시스템 설계 기초 2장 - 개략적인 규모 추정

가상 면접 사례로 배우는 대규모 시스템 설계 기초 책 정리 글입니다.

개요

이 장은 시스템 용량이나 성능 요구사항을 개략적으로 측정하는 방법에 대해 다룬다.

개략적 규모 추정을 효과적으로 필요한 기본기에 능숙해야 한다. 특히, 2의 제곱수나 응답지연(latency) 값, 그리고 가용성에 관계된 수치들을 기본적으로 잘 이해하고 있어야 한다고 한다.


✏️ 2의 제곱수

보통 컴퓨터의 최소 단위는 1byte이고 이는 8bit로 구성된다. ASCII문자 하나가 차지하는 메모리 크기는 1byte이다.

|2의 x제곱|근사치|이름|축약형| |–|—|—|—| |10|1천|1킬로바이트|1KB| |20|1백만|1메가바이트|1MB| |30|10억|1기가바이트|1GB| |40|1조|1테라바이트|1TB| |50|1000조|1페타바이트|1PB|

데이터 볼륨 단위들


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

구글의 제프딘은 2010년에 통상적인 컴퓨터에서 구현된 연산들의 응답지연값을 공개한 적이 있다고 한다. 현대와는 꽤 차이가 나지만 어림짐작하는데에는 큰 도움이 된다니 책에 실었다고 한다.

image

위의 정보를 통해 다음과 같은 사실을 알 수 있다.

  • 메모리는 빠르지만 디스크는 아직 느리다.
  • 디스크 탐색(seek)은 피해야 한다.
  • 단순한 압축 알고리즘은 빠르다.
  • 그렇기에 데이터를 인터넷으로 전송하기 전에 압축을 하는편이 좋다.
  • 데이터센터끼리 데이터를 주고 받는데에도 시간이 유의미하게 걸린다.

✏️ 가용성에 관계된 수치들

시스템이 얼마나 오랫동안 지속적으로 중단없이 운영되었는지를 나타내는 지표인 고가용성에 대한 지표는 대부분 99% ~ 100%의 값을 갖는다.

SLA(Service Level Agreement)는 구글, 아마존, MS 등 서비스 사업자가 보편적으로 사용하는 용어이고, 여기에는 가용시간이 공식적으로 기록되어 있다.

관습적으로 9를 이용해 표시하고 9가 많을수록 좋다.

image


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

제시된 수치들은 예시를 위한 가정값이며 실제 값이 아닙니다. 그리고 실제 책과 다른 수치로 연습해보았으니, 틀린 계산결과가 나왔다면 피드백 부탁드립니다.

가정

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

추정

QPS(Query Per Seconds)추정지

  • 일간 능동 사용자(Daily Active User, DAU): 4억 * 50% = 2억
  • QPS = 2억 /4(트윗) /24(시간) / 3600(초) = 약 578
  • Peek QPS = 578 * 2 = 약 1156

미디어 저장을 위한 저장소 요구량

  • 평균 트윗 크기
    • tweet_id에 64바이트
    • 텍스트에 200바이트
    • 미디어에 1MB
  • 미디어 저장소 요구량: 2억 * 4(트윗) * 5% * 1MB = 40,000,000MB = 40TB/일
  • 3년간 미디어를 보관하기 위한 저장소 요구량: 40TB * 365(일) * 3(년) = 약 43.8PB

✏️ 팁

정확도는 떨어져도 올바른 값을 도출해기 위한 과정이 중요하다고 한다.

  • 근사치를 이용한 계산: “99987.1/9.1”의 계산결과는 무엇인가요? 라는 질문을 받았을때 실제 계산하는건 시간낭비다. 계산의 정확함을 평가하는것이 목적이 아니기 때문이다. 이는 적절한 근사치를 이용하여 시간을 절약하자. “100000/10” 로 간소화할 수 있다.
  • 가정들은 적어둬라. 나중에 살펴볼 수 있도록
  • 단위(unit)을 붙여라. 10이라고만 적지말고 10TB, 10s처럼 말이다. 붙이지 않으면 나중에 스스로 헷갈릴 수가 있다.
  • 많이 출제되는 문제는 QPS, 최대 QPS, 저장소 요구량, 캐시 요구량, 서버 수 등을 측정하는 것이다. 미리 연습하자.

🤔 정리

2장에서는 개략적으로 QPS나 저장소의 용량을 계산할 수 있는 방법에 대해 알 수 있었다.

요구사항에 따라 유연하게 대처할 수 있어야하며 이 책에서는 내 기준 정말 짧게 다루었기에 좀 더 찾아보고 연습이 필요할 것 같다고 생각이 들었다.

This post is licensed under CC BY 4.0 by the author.