시스템 용량이나 성능 요구사항을 개략적으로 추정해보기
구글의 시니어 펠로 제프 딘에 따르면
"개략적인 규모 추정(back-of-the-envelope estimation)은 보편적으로 통용되는 성능 수치상에서 사고 실험(thought experiements)을 행하여 추정치를 계산하는 행위로서, 어떤 설계가 요구 사항에 부합할 것인지 보기 위한 것"
개략적 규모 추정을 효과적으로 해 내려면, 규모 확장성을 표현하는 데 필요한 기본기에 능숙해야함
특히, 2의 제곱수, 응답지연(latency) 값, 가용성에 관계된 수치들 잘 이해해야함
2의 제곱수
분산 시스템에서 다루는 데이터 양은 엄청나게 커질 수 있으나 그 계산법은 기본을 크게 벗어나지 않음
제대로된 계산 결과를 얻으려면 데이터 볼륨의 단위를 2의 제곱수로 표현하면 어떻게 되는지 우선 알아야함
최소 단위: 1바이트 = 8비트
ASCII 문자 하나가 차지하는 메모리 크기 = 1바이트
모든 프로그래머가 알아야 하는 응답 지연 값
구글의 제프 딘은 2010년에 통상적인 컴퓨터에서 구현된 연산들의 응답지연 값을 공개한 바 있음
이들 가운데 몇몇은 더 빠른 컴퓨터가 등장하면서 더 이상 유효하지 않게 되었지만, 아직도 이 수치들은 컴퓨터 연산들의 처리 속도가 어느정도인지 짐작할 수 있도록 해줌
구글 엔지니어가 개발한, 수치들을 시각화해서 보여주는 도구가 있음(최근 기술 동향을 반영하여 보여줌)
이 도구를 사용하여 2020년 기준으로 시각화한 수치
결론
- 메모리는 빠르지만 디스크는 아직도 느리다
- 디스크 탐색(seek)은 가능한 한 피하라
- 단순한 압축 알고리즘은 빠르다
- 데이터를 인터넷으로 전송하기 전에 가능하면 압축하라
- 데이터 센터는 보통 여러 지역(region)에 분산되어 있고, 센터들 간에 데이터를 주고받는 데는 시간이 걸린다
가용성에 관계된 수치들
고 가용성(high availability): 시스템이 오랜 시간 동안 지속적으로 중단 없이 운영될 수 있는 능력
퍼센트(percent)로 표현
-> 100%: 시스템이 단 한번도 중단된 적이 없었음을 의미(대부분의 서비스는 99%~100% 사이의 값을 가짐)
SLA(Service Level Agreement): 서비스 사업자와 고객 사이에 맺어진 합의; 서비스 사업자(service provider)가 보편적으로 사용하는 용어
이 합의에는 서비스 사업자가 제공하는 서비스의 가용시간(uptime)이 공식적으로 기술되어 있음
ex) 아마존, 구글, 마이크로소프트 같은 사업자는 99% 이상의 SLA 제공
가용 시간은 관습적으로 숫자 9를 이용해 표시. 9가 많을 수록 좋다고 보면 됨
예제: 트위터 QPS와 저장소 요구량 추정
다음 제시된 수치들은 연습용. 트위터의 실제 성능이나 요구 사항과는 아무 관계 없음
QPS(Query Per Second) = 일간 능동 사용자 * 하루 평균 글 작성 수(Query 발생 수) / 24시간/ 3600초
최대 QPS = 2 * QPS
팁
계략적인 규모 추정과 관계된 면접에서 가장 중요한 것은 문제를 풀어 나가는 절차!
올바른 절차를 밟는 것 >>>> 결과를 내는 것
면접자가 보고 싶어하는 것은 여러분의 문제 해결 능력!
이에 도움이 될 몇가지 팁
- 근사치를 활용한 계산(rounding and approximation): 면접장에서 복잡한 계산을 하는 것은 어려운 일! ex) 99987/9.1
계산의 결과의 정확함을 평가하는 목적 X -> 적절한 근사치를 활용하여 시간을 절약하자! ex) 100,000/10 - 가정(assumption)들은 적어두자. 나중에 살펴볼 수 있도록!
- 단위(unit)을 붙이자: 5라고만 적으면 5KB인지, MB인지 알 수 없고, 스스로도 헷갈림
단위를 붙이는 습관을 들여 두면 모호함 방지 가능 - 많이 출제되는 개략적 규모 추정 문제: QPS, 최대 QPS, 저장소 요구량, 캐시 요구량, 서버 수 등 추정
면접에 임하기 전에 이런 값들은 계산하는 연습을 미리 하도록 하자!
완벽함을 달성하는 방법은 연습 뿐이다!!!
+) QPS와 TPS의 차이점
QPS(Query Per Second)
= 초당 서버가 응답할 수 있는 쿼리의 수
일반적으로 웹 서비스에서 검색 엔진이나 DB와 같은 특정 서버가 처리할 수 있는 트래픽의 수
TPS(Transaction Per Second)
= 초당 처리할 수 있는 트랜잭션의 수
특정 엔티티가 수행한 원자적 동작의 수를 말하며, 일반적으로 DB의 트랜잭션 수(Rollback과 Commit)를 말함
클라이언트 요청 -> 서버 내부 처리 -> 응답까지가 하나의 TPS라고 볼 수 있음
ex) 웹사이트 방문
이때 방문한 페이지에는 게시글, 댓글, 광고, 인기 글 등의 정보들이 보인다고 하자.
우리가 페이지를 방문하면 하나의 TPS가 발생한다.
하지만 실제로는 게시글 조회, 댓글 조회, 광고 조회, 인기글 조회 등 4번의 특정 서버 요청이 발생하게 되고
이것을 QPS라고 볼 수 있다. 즉, 1 TPS와 4 QPS가 형성된다.
하지만 회원가입과 같은 단일 요청의 경우 하나의 쿼리만 발생하므로 TPS와 QPS는 같다고 볼 수 있다.
각 서비스의 특성상 중요한 성능 지표가 따로 있을 것이므로 해당 지표를 선택해 시스템의 개략적 성능 규모 측정을 하는 것이 바람직하다.
참고
'SW Books > System Design Interview' 카테고리의 다른 글
[시스템 설계] 1장 - 사용자 수에 따른 규모 확장 (0) | 2023.08.31 |
---|