개략적인 규모 추정(back of the envelope estimation)
- 보편적으로 통용되는 성능 수치상에서 사고 실험을 통해 추청치를 계산하는 것
- 설계가 요구사항에 부합할 것인지를 미리 가늠
2의 제곱수
| 2의 x승 | 근사치 | 축약형 |
|---|---|---|
| 10 | 1천 | 1KB |
| 20 | 1백만 | 1MB |
| 30 | 10억 | 1GB |
| 40 | 1조 | 1TB |
| 50 | 1000조 | 1PB |
기본적인 응답지연 값
- 구글의 제프 딘이 2010년에 통상적인 컴퓨테어서 구현된 연산들의 응답지연 값을 공개한 것으로, 더 빠른 컴퓨터들이 등장하면서 현재 유효하진 않음.
| 연산명 | 시간 |
|---|---|
| L1 캐시 참조 | 0.5ns |
| 분기 예측 오류 (branch mispredict) | 5ns |
| L2 캐시 참조 | 7ns |
| 뮤텍스 (mutex) 락/언락 | 100ns |
| 주 메모리 참조 | 100ns |
| Zippy로 1KB 압축 | 10μs |
| 1Gbps 네트워크로 2KB 전송 | 20μs |
| 메모리에서 1MB 순차적으로 read | 250μs |
| 같은 데이터 센터 내에서의 메시지 왕복 지연시간 | 500μs |
| 디스크 탐색 (seek) | 10ms |
| 네트워크에서 1MB 순차적으로 read | 10ms |
| 디스크에서 1MB 순차적으로 read | 30ms |
| 한 패킷의 CA (캘리포니아)로부터 네덜란드까지의 왕복 지연시간 | 150ms |
- 결론
- 메모리는 빠르지만 디스크는 아직도 느리다
- 디스크 탐색(seek)은 가능한 한 피하라
- 단순한 압축 알고리즘은 빠르다
- 데이터를 인터넷으로 전송하기 전에 가능하면 압축하라
- 데이터 센터는 보통 여러 지역(region)으로 분산돼 있고, 센터들 간에 데이터를 주고받는 데는 시간이 걸린다
가용성에 관계된 수치들
- 고가용성(high availability)은 시스템이 오랜 시간 동안 지속적으로 중단 없이 운영될 수 있는 능력
- %로 표시하는데, 100%는 시스템이 단 한 번도 중단된 적이 없었음을 의미
- 서비스 사업자는 SLA(Service Level Agreement)라는 용어를 사용하는데, 서비스 사업자와 고객 사이에 맺어진 합의를 의미
- 이 합의에 서비스 사업자가 제공하는 서비스의 가용시간이 공식적으로 기술돼 있음
| 가용률 | 하루당 장애시간 | 주당 장애시간 | 개월당 장애시간 | 연간 장애시간 |
|---|---|---|---|---|
| 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.30초 | 5.26분 |
| 99.9999% | 86.40밀리초 | 604.80밀리초 | 2.63초 | 31.56초 |
예제: 트위터 QPS와 저장소 요구량 추정
- 가정
- MAU는 3억명
- 50%의 사용자가 트위터를 매일 사용
- 평균적으로 각 사용자는 매일 2건의 트윗을 올림
- 미디어를 포함한 트윗은 10% 정도
- 데이터는 5년간 보관
- 추정
- QPS(Query Per Second) 추정치
- DAU = 3억 x 50% = 1.5억
- QPS = 1.5억 x 2트윗 / 24시간 / 3600초 = 약 3500
- 최대 QPS = 2 x QPS = 약 7000
- 미디어 저장을 위한 저장소 요구량
- 평균 트윗 크기
- tweet_id에 64바이트
- 텍스트에 140바이트
- 미디어에 1MB
- 미디어 저장소 요구량 = 1MB x 1.5억 x 2 x 10% = 30TB/일
- 5년간 미디어를 보관하기 위한 저장소 요구량 = 30TB x 365 x 5 = 약 55PB
- 평균 트윗 크기
- QPS(Query Per Second) 추정치