////
Search
Duplicate
2️⃣

2장. 개략적인 규모 추정

시스템 설계 면접을 볼 때, 때로는 시스템 용량이나 성능 요구사항을 개략적으로 추정해 보라는 요구를 받게 된다.
이런 개략적인 규모 추정은 보편적으로 토용되는 성능 수치상에서 사고 실험을 행하여 추정치를 계산하는 행위로, 어떤 설계가 요구사항에 부합할 것인지 보기 위한 것이다.
이를 효과적으로 수행해 내려면 규모 확장성을 표현하는 데 필요한 기본기에 능숙해야 한다. 특히 2의 제곱수나 응답지연 값, 그리고 가용성에 관계된 수치들을 기본적으로 잘 이해하고 있어야 한다.

2의 제곱수

제대로 된 계산 결과를 얻으려면 데이터 볼륨의 단위를 2의 제곱수로 표현했을 때, 그 단위를 알아야 한다. 최소 단위는 1바이트고 이는 8비트다.
2의 x 제곱
근사치
이름
축약형
10
1,000
1 킬로바이트
1 KB
20
1,000,000
1 메가바이트
1 MB
30
1,000,000,000
1 기가바이트
1 GB
40
1,000,000,000,000
1 테라바이트
1 TB
50
1,000,000,000,000,000
1 페타바이트
1 PB

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

아래는 구글의 제프 딘이 2010년 공개한 통상적인 컴퓨터에서 구현된 연산들의 응답지연 값이다.
연산명
시간
L1 캐시 참조
0.5 ns
분기 예측 오류
5 ns
L2 캐시 참조
7 ns
뮤텍스 락/언락
100 ns
주 메모리 참조
100 ns
Zippy로 1KB 압축
0.01 ms
1 Gbps 네트워크로 2 KB 전송
0.02 ms
메모리에서 1MB 순차적으로 read
0.25 ms
같은 데이터 센터 내에서의 메시지 왕복 지연 시간
0.5 ms
디스크 탐색
10 ms
네트워크에서 1MB 순차적으로 read
10 ms
디스크에서 1MB 순차적으로 read
30 ms
이 수치들을 분석하면 다음과 같은 결과가 나온다.
메모리는 빠르지만 디스크는 느리다.
디스크 탐색은 가능한 피하는 것이 좋다.
단순한 압축 알고리즘은 빠르다.
네트워크를 이용해 전송하기 전 가능하면 데이터를 압축하는 것이 좋다.
데이터 센터는 보통 여러 지역에 분산되어 있고 센터들 간에 데이터를 주고받는 데는 시간이 걸린다.

가용성에 관계된 수치들

고가용성은 시스템이 오랜 시간 지속적으로 중단 없이 운영될 수 있는 능력을 지칭하는 용어다.
대부분의 서비스는 99%에서 100% 사이의 값을 갖는다.
가용률
하루당 장애시간
주당 장애시간
개월당 장애시간
연간 장애시간
99%
14.40 m
1.68 h
7.31 h
3.65 d
99.9%
1.44 m
10.08 h
43.83 m
8.77 h
99.99%
8.64 s
1.01 m
4.38 m
52.60 m
99.999%
864.00 ms
6.05 s
26.30 s
5.26 m
99.9999%
84.40 ms
604.80 ms
2.63 s
31.56 s

예제: 트위터 QPS 추정

가정

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

추정

QPS(Query Per Second) 추정치
DAU : 150,000,000 명
QPS = 150,000,000 * (2 twit / 24 hour) / 3,600 s = 약 3,500
최대 QPS = 2 * QPS = 약 7,000

개략적인 규모 추정에서 가장 중요한 것은 문제를 풀어나가는 절차다. 올바른 절차를 밟는 것이 올바른 결과를 내는 것보다 더 중요하다.
면접자가 보고 싶어 하는 것은 우리의 문제해결능력일 것이다. 다음은 이를 위해 사용할 수 있는 팁들이다.
근사치를 활용한 계산
면접장에서 복잡한 계산을 하는 것은 어려운 일이다. 계산 결과가 정확할 필요는 없다. 적절한 근사치를 이용해 시간을 절약하자.
99,994 / 9.991은 100,000 / 10으로 간소화할 수 있다.
잊지 않기 위해 가정들은 적어두는 것이 좋다.
단위를 붙여라. 5라고만 적으면 5 KB인지 5 MB인지 알 수 없다.
많이 출제되는 개략적 규모 추정 문제는 QPS, 최대 QPS, 저장소 요구량, 캐시 요구량, 서버 수 등을 측정하는 것이다.
이런 값들을 계산하는 방법을 미리 연습하도록 하자.