> For the complete documentation index, see [llms.txt](https://real-dev.gitbook.io/real-library/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://real-dev.gitbook.io/real-library/learn_large_scale_system_design_fundamentals_with_virtual_interview_examples/readme/chapter2..md).

# Chapter2. 개략적인 규모 추정

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

<figure><img src="/files/taNboj2QOJl1Dl1CgK2n" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/7v38dkGdTsDRMxD7qKvH" alt=""><figcaption></figcaption></figure>

* **결론적으로 다음과 같이 생각할 수 있다.**
  * 메모리는 빠르지만 디스크는 아직 느리다. (SSD라도)
  * 디스크 탐색은 가급적 피해라
  * 단순한 압축 알고리즘은 빠르다.
  * 데이터를 인터넷으로 전송하기 이전에 되도록 압축하라
  * 데이터 센터는 여러 리전에 분산되어 있고, 센터들 간에 데이터를 전송하는데는 시간이 소요된다.

#### 가용성에 관계된 수치들

* 대부분의 서비스는 99\~100% 사이의 가용률을 갖는다. 관습적으로 99.9% \~ 99.999% 같이 나타내며 소숫점 아래의 9가 많을 수록 가용성이 높다고 본다.

### Query per Second 추정

* Query Per Second. 즉, 초당 요청량은 주어진 가성하에서 얼마만큼의 요청이 들어오는지를 추정해낸 수치다.
* 해당 사례는 트위터의 예시로, 실제 트위터 성능과는 전혀 무관하다.

#### 가정

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

#### 추정

* DAU = 300,000,000 \* 50% = 1.5억
* QPS = DAU \* 평균 트윗 갯수 / 24 / 3600
  * ⇒ 1.5억 \* 2 / 24/3600
  * ⇒ 3,472.2222222222 → 초당 약 3,500 건
* 최대 QPS = QPS \* 2 = 초당 약 7,000건

#### 미디어 저장을 위한 저장소 요구량

* **평균 트윗 크기**
  * tweet\_id에 64byte
  * 텍스트에 140byte (미디어가 포함되지 않은 트윗 크기)
  * 미디어에 1MB
* 미디어 저장소 요구량: 1.5억 \* 2 \* 10% \* 1MB = 일 30,000,000MB ⇒ 일 30TB의 미디어 저장공간이 필요함 ⇒ 5년간 미디어를 보관하기 위해선 30TB \* 365 \* 5. 즉 55PB의 저장공간이 필요함

***

#### 팁

* 개략적인 규모 추정을 하면서 중요한 점은 수치를 정확하게 맞추느냐가 아니라 **어떻게 문제를 인식하고 해결하는 과정을 밟는가**이다.
* 정확한 계산이 막 필요한 것은 아니니 근사치를 적극적으로 활용하자. (예를 들어 `3,472.2222222222 → 초당 약 3,500 건`)
* 가정들은 적어두고 나중에 다시 확인하면서 풀자
* 단위는 정확하게 적어둬야 한다. 수가 커지고 문제를 풀다보면 기준 단위가 MB인지 GB인지 헷갈리게된다.
* 많이 출제되는 개략적 규모 추정 문제는 QPS, 최대 QPS, 저장소 요구량, 캐시 요구량, 서버 수 등을 추정하는 것이다.
