이 글은 《가상 면접으로 배우는 대규모 시스템 설계 기초》 를 읽고 요약, 제 생각을 더한 글입니다.
시스템 설계 면접 시, 때로는 시스템 용량이나 성능 요구사항을 개략적으로 추정해보라는 요구를 받게 된다.
개략적 규모 추정을 효과적으로 해 내려면 규모 확장성을 표현하는 데 필요한 기본기에 능숙해야 한다. 특히, 2의 제곱수나 응답지연값,
그리고 가용성에 관계된 수치들을 잘 이해하고 있어야 한다.
구글의 제프 딘이 공개한 통상적 컴퓨터에서 구현된 연산 별 응답지연 값.
꽤나 예전 자료라 더 이상 유효하지는 않게 되었지만, 이 수치들은 컴퓨터 연산 처리속도가 어느정도인지 짐작하는 데 도움을 준다.
Name | |||||||
---|---|---|---|---|---|---|---|
L1 cache reference | 0.5 | ns | |||||
Branch mispredict | 5 | ns | |||||
L2 cachereference | 7 | ns | 14x L1 cache | ||||
Mutex lock/unlock | 25 | ns | |||||
Main memory reference | 100 | ns | 20x L2 cache, 200x L1 cache | ||||
Compress 1K bytes with Zippy | 3,000 | ns | 3 | us | |||
Send 1K bytes over 1 Gb ps network | 10,000 | ns | 10 | us | |||
Read 4K randomly from SSD | 150,000 | ns | 150 | us | ~1GB/sec SSD | ||
Read 1 MB sequentially from memory | 250,000 | ns | 250 | us | |||
Round trip within same datacenter | 500,000 | ns | 500 | us | |||
Read 1 MB sequentially from SSD | 1,000,000 | ns | 1,000 | us | 1 | ms | ~1GB/sec SSD, 4X memory |
Disk seek | 10,000,000 | ns | 10,000 | us | 10 | ms | 20x datacenter roundtrip |
Read 1 MB sequentially | 20,000,000 | ns | 20,000 | us | 20 | ms | 80x memory, 20X SSD |
Send pack et CA->Netherlands->CA | 150,000,000 | ns | 150,000 | us | 150 | ms |
1 ns = 10^-9 seconds
1 us = 10^-6 seconds = 1,000 ns
1 ms = 10^-3 seconds = 1,000 us = 1,000,000 ns
여러 동작의 성능 단위 차이를 주목
데이터센터들은 멀리 떨어져 있으므로 뭔가 전송하려면 오래 걸린다.
메모리는 빠르고 디스크는 느리다.
효율적인 압축 알고리즘을 통해 많은 네트워크 대역폭을 절약할 수 있다.
쓰기 연산은 읽기보다 40배 이상 비싸다(느리다).
글로벌 공유 데이터는 비싸다. 이건 분산 시스템의 근본적인 한계다. 자주 쓰이는 공유 객체의 락 경합은 트랜잭션을 직렬화하고 느리게 만들어 성능을 크게 저하한다.
늘어날 쓰기 연산을 대비해 설계하자.
쓰기 경합을 줄이기 위해 최적화하자.
넓게 최적화하자. 쓰기 연산은 최대한 병렬 처리하자.
: 시스템이 오랜 시간동안 지속적으로 중단 없이 운영될 수 있는 능력.
가용성은 uptime/period 로 수치화할 수 있다. 보통 퍼센트를 사용한다!
서비스 사업자가 보편적으로 사용하는 용어, 서비스 사업자와 고객 사이에 맺어진 합의를 의미한다. 그리고 이 합의에는 서비스 사업자가 제공하는 서비스의 가용시간이 공식적으로 기술돼있다.
아마존, 구글, 그리고 마이크로 소프트 같은 사업자는 99% 이상의 SLA를 제공한다.
하지만 실제로는 조금 더 엄격하게 가용성을 지키려고 한다. 사진을 보면 알 수 있듯, 99%를 보장하더라도 꽤나 긴 시간 고객들이 불편을 겪을 수 있기 때문이다.
2019, 2020 모두 25퍼센트의 기업이 서비스 중단 시 비용이 평균 시간당 3-4억원 ...
QPS(Query Per Second) 추정치
개략적인 규모 추정하는 데에서 가장 중요한 것은
문제를 풀어나가는 절차!
올바른 절차를 밟느냐가 결과보다 중요하다. 면접자가 보고자하는 것은 우리의 문제해결능력. 올바른 절차를 밟기위한 팁 몇가지를 공유
면접에 임하기 전에 이런 계산은 미리 연습하세여.
What Is SLA and Why Is It Important for Your Business?, Alibaba Cloud