2. 개략적 규모 추정
Last updated
Last updated
시스템 용량, 성능 요구사항을 추정해보며 시스템을 설계하는 것이 중요하다.
개략적 규모 추정은 보편적으로 통용되는 성능 수치 상에서 머릿속으로 실험해보며 추정치를 계산하는 것을 의미한다.
이를 효과적으로 해내려면, 2의 제곱수, latency 값, 가용성에 관련된 수치들을 잘 이해하고 있어야 한다.
1 byte == 8 bits == ASCII 문자 한 개
Binary Prefix
10진수 단위가 아닌 2진수 단위에는 binary prefix인 i
를 붙여 표현한다.
2^10 (1,024) bytes를 KiB (Kibibyte), 2^20 (1,048,576) bytes를 MiB (Mebibyte) 라고 칭한다.
10^3 - 1KB
10^6 - 1MB
10^9 - 1GB
10^12 - 1TB
10^15 - 1PB
10^18 - 1EB
보편적으로 특정 연산에서 수행되는 작업 시간인 latency는 아래와 같다.
이를 통해 얻을 수 있는 인사이트는 다음과 같다.
메모리는 빠르지만 디스크는 느리다.
디스크 탐색은 가능한 피하도록 한다.
단순 압축 알고리즘은 빠르다.
데이터 전송하기 전 가능하면 압축하도록 한다.
데이터 센터들은 보통 여러 지역에 분산되어 있고, 데이터 센터 간 데이터를 주고받는 데에는 시간이 오래 걸린다.
고가용성: 시스템이 오랜 시간동안 지속적으로 중단 없이 운영될 수 있는 능력
SLA (Service Level Agreement)
서비스 사업자(Service Provider)와 고객 사이 맺어진 합의를 의미한다.
서비스 사업자가 제공하는 서비스의 가용 시간(uptime)을 공식적으로 기술한다.
대부분의 대기업은 99% 이상의 SLA를 제공한다.
SLA가 100%이라면, 한번도 중단된 적 없는 시스템인 것이다.
QPS
Query Per Second
특정 쿼리 서버가 초당 처리하는 트래픽 양을 의미한다.
DNS 서버의 성능은 보통 QPS로 평가된다.
(일간 능동 사용자 * 사용자별 일간 평균 요청량)/24시간/3600초
로 계산한다.
Peak QPS의 경우 보통 QPS * 2
로 계산한다.
TPS
서버가 초당 처리할 수 있는 트랜잭션 개수를 나타낸다.
한 번의 요청에 여러 단계가 포함되는 경우 단순한 요청-응답 처리가 아니며, 이를 트랜잭션이라고 지칭한다.
보통 시스템 성능 평가 시에 TPS를 사용한다.
시스템의 처리 능력은 최소 처리 용량을 가진 모듈의 TPS 값에 의해 결정되며, 시스템 최적화를 통해 개선할 수 있다.
연습문제
10M명의 daily active users가 존재하고, 각 사용자마다 매일 평균 100개의 읽기 요청을 보내고, 매일 5개의 새로운 데이터를 생성하는 경우 QPS는?
QPS
: 10M * 100 / 24h / 3600s ~= 11570.xx
Peak QPS
: 11570*2 ~= 23,140
WPS(WritePerSecond)
: 10M * 5 / 24h / 3600s ~= 578.xx
평균 메시지 읽기 크기는 50 bytes이고 메시지 쓰기 1kb인 경우 Throughput은?
Avg Read Throughput
: 50 * QPS ~= 50byte * 12 * 10^3 = 600kb
Avg Write Throughput
: 1kb * WPS ~= 1kb * 580 = 580kb
정확한 계산보단 간소화한 근사치를 활용하도록 한다. 99987 / 9.1
이라는 수식을 직접 계산하지 말고, 100000 / 10
이라고 표현해도 충분하다.
결론을 도출하는 것만이 중요한 것이 아니다. 결론 도출에 영향을 미친 가정들을 적어두어야 한다.
단위를 중요시해야 한다. 계산 시에 단위를 꼭 붙여 모호함을 없애야 한다.
QPS, 최대 QPS, 저장소 요구량, 캐시 요구량, 서버 수 등을 계산하는 연습을 해두면 좋다.
https://dev.to/vladisov/back-of-the-envelope-calculation-4eal