Post

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

시스템 설계 면접 시 시스템 용량, 성능 요구 사항을 개략적으로 추정해봐야 한다.

규모확장성을 표현하려면 기본적으로 3가지를 잘 이해해야 한다.

  1. 2의 제곱수
  2. 응답지연 값 (Latency)
  3. 가용성에 관계된 수치

2의 제곱수

데이터의 볼륨 단위를 2의 제곱수로 표현하는 법

아스키 문자 하나 : 1byte

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

응답지연 값 (Latency)

2010년도에 구글 프로그래머가 공개한 평범한 컴퓨터에서의 레이턴시 값으로 컴퓨터의 연산 속도를 짐작하게 해준다. (2010년도 값이라 참고만 하기)

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

https://colin-scott.github.io/personal_website/research/interactive_latency.html

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

가용성에 관계된 수치들

고가용성(High availability)은 시스템이 중단없이 오랜 시간 동안 운영될 수 있는 능력을 뜻한다.

가용성을 표현하는 방식은 % 단위로, 100% 는 단 한번도 중단된 적 없다는 뜻이다.

SLA(Service Level Agreement)

SLA(서비스 단계 합의)는 서비스 제공자와 고객이 맺은 합의를 뜻한다. 서비스의 가용시간이 공식적으로 기술되어 있다.

aws, 구글, microsoft 같은 사업자는 99% 이상의 가용 시간을 제공한다.

가용시간(uptime) - 장애시간(downtime)

QPS(Query Per Second)

초 당 질의에 걸리는 시간을 추정치

데이터 저장소 요구량

트윗 하나당 평균 용량

트윗 아이디 : 64byte

텍스트 : 140 byte (트위터는 140자 제한이다)

미디어 : 1 MB

가상의 트위터 QPS 와 저장소 요구량 추정 해보기

하루에 애플리케이션을 1.5억명이 이용한다.

50프로의 사용자가 트위터를 매일 사용한다.

평균적으로 각 사용자는 매일 2건의 트윗을 올린다.

미디어를 포함하는 트윗은 10% 정도이다.

데이터는 5년간 보관 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 입력된 데이터
daily_users = 150000000  # 1.5억 사용자
daily_usage_rate = 0.50  # 50% 사용자가 매일 사용
tweets_per_user_per_day = 2  # 사용자당 하루에 2개의 트윗
media_tweet_percentage = 0.10  # 10%의 트윗이 미디어를 포함
data_storage_duration_years = 5  # 데이터 보관 기간 5년

# 트윗 데이터 크기
tweet_id_size = 64  # 트윗 ID 크기 (bytes)
text_size = 140  # 텍스트 크기 (bytes)
media_size = 1 * 1024 * 1024  # 1MB

# 일일 트윗 수 계산
daily_tweets = daily_users * daily_usage_rate * tweets_per_user_per_day

# QPS 계산
qps = daily_tweets / (24 * 3600)  # 하루는 24시간 * 3600초

# 저장 요구량 계산
daily_text_tweet_size = (tweet_id_size + text_size) * (1 - media_tweet_percentage) * daily_tweets
daily_media_tweet_size = (tweet_id_size + text_size + media_size) * media_tweet_percentage * daily_tweets
total_daily_storage = daily_text_tweet_size + daily_media_tweet_size
total_storage_5_years = total_daily_storage * 365 * data_storage_duration_years

# 총 저장소 요구량을 테라바이트(TB)로 변환하여 출력
total_storage_in_pb = total_storage_5_years / (1024 ** 4)  # TB 단위로 변환
total_storage_in_pb /= 1024  # TB를 PB로 변환

qps, total_storage_in_pb  # QPS와 총 저장소 요구량(PB) 출력

QPS (초당 질의 수): 대략 1736.11, 저장소 요구량: 약 25.54 페타바이트 (PB)

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