BackEnd/네트워크와 인프라

[대규모 시스템 설계] 개략적 규모 추정

짱호 2022. 3. 12. 14:32
반응형

가상 면접 사례로 배우는 대규모 시스템 설계 기초 요약정리 글입니다.

 

시스템 용량이나 성능 요구사항을 개략적으로 추정하는 능력은 중요하다.
어떤 설계가 요구사항에 부합할 것인지 추정할 수 있기 때문이다.

개략적 규모 추정을 효과적으로 하기 위해서는 2의 제곱수나 응답 지연 값, 가용성에 관계된 수치들을 기본적으로 잘 이해하고 있어야 한다.

 

2의 제곱수

제대로 된 계산 결과를 얻으려면 데이터 볼륨의 단위를 2의 제곱수로 표현하면 어떻게 되는지를 이해하고 있어야 한다.

최소 단위는 1 Byte이고, 이는 8 Bit로 구성된다.
ASCII 문자 하나가 차지하는 메모리 크기가 1 Byte라고 보면 된다.
1 Byte가 1000개 모이면 1KB가 된다. (1000 Byte = 1 KB)

우리가 흔히 알고 있는 데이터 볼륨 단위는 KB, MB, GB, TB, PB 등이 있다.
이는 모두 2의 제곱수이며 우리가 이해하는 1KB, 1MB, 1GB 등의 데이터 볼륨 단위는 모두 2의 제곱수의 근사치를 표현한다.

 

응답 지연 값

컴퓨터 연산 처리 속도가 어느 정도인지, 어떤 연산이 응답 지연 값이 높은 지를 대략적으로 알고 있는 게 유리하다. 하드웨어의 발달로 몇몇의 수치들은 더 이상 유효하지 않게 되었지만, 아래의 수치들은 컴퓨터 연산들의 처리 속도가 어느 정도인지 짐작할 수 있게 도와준다.

이런 수치를 분석해보면 다음과 같은 결론을 도출할 수 있다.

  • 메모리는 빠르지만 디스크는 느리다.
  • 디스크 탐색은 가능한 피하라.
  • 단순한 압축 알고리즘은 빠르다.
  • 데이터를 인터넷으로 전송하기 전에 가능하면 압축하라.
  • 데이터 센터는 보통 여러 지역에 분산되어 있으므로, 센터 간 데이터 송수신에 시간이 걸린다.

 

가용성과 관계된 수치

고가용성 시스템은 오랜 시간 동안 지속적으로 중단 없이 운영될 수 있는 시스템을 뜻한다.
일반적으로 고가용성을 표현하는 값은 %로 나타내는데, 100%는 한 번도 중단된 적이 없음을 뜻한다.
대부분의 서비스가 99% ~ 100% 사이의 값을 가진다.

SLA(Service Level Agreement)는 서비스 사업자와 고객 사이에 맺어진 합의를 의미한다.
여기에는 서비스 사업자가 제공하는 가용시간이 공식적으로 기술되어있다.

가용시간은 숫자 9를 사용해 표현하는데, 9가 많을수록 좋다고 보면 된다.

 

QPS와 저장소 요구량 추정

서비스의 사용자 수, 사용 빈도, 데이터 보관 정책 등을 토대로 대략적인 QPS(Query Per Second)와 저장소 요구량을 추정해볼 수 있다.

다음 예제는 사용량에 대한 가정으로부터 추정치를 산출해내는 과정을 나타낸다.

 

가정

  • 월간 능동 사용자는 3억 명이다.
  • 50%의 사용자가 매일 서비스를 사용한다.
  • 평균적으로 각 사용자는 2건의 글을 올린다.
  • 미디어를 포함하는 컨텐츠는 10% 정도이다.
  • 데이터는 5년간 보관된다.

 

추정

QPS(Query Per Second) 추정치

  • 일간 능동 사용자 = 월간 능동 사용자 * 일간 사용 비율
    • 3억 명 * 50% = 1.5억 명
  • QPS = 일간 능동 사용자 * 평균 글 작성 수(Query 발생) / 24시간 / 3600초
    • 1.5억 명 * 2 / 24시간 / 3600초 = 약 3500 QPS
  • 최대 QPS = QPS * 2
    • 약 3500 QPS * 2 = 약 7000 QPS (Peek QPS)

 

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

  • 평균 글 크기
    • id에 64바이트
    • 텍스트에 140바이트
    • 미디어에 1MB
  • 미디어 저장소 요구량 = 일간 능동 사용자 * 평균 글 작성 수 * 미디어 포함 콘텐츠 비율 * 미디어 크기
    • 1.5억 명 * 2 * 10% * 1MB = 약 30TB/일
  • 5년간 미디어 보관을 위한 저장소 요구량 = 일 평균 미디어 저장소 요구량 * 5년
    • 30TB * 365 * 5 = 약 55PB

 

QPS와 TPS의 차이점

QPS(Query Per Second)

QPS는 초당 서버가 응답할 수 있는 쿼리의 수를 나타낸다.
일반적으로 웹 서비스에서 검색 엔진이나 DB와 같은 특정 서버가 처리할 수 있는 트래픽의 수를 가리킨다.
FaceBook 같은 경우에는 초당 천만 건 정도의 쿼리를 처리할 수 있다.

 

TPS(Transaction Per Second)

TPS는 초당 처리할 수 있는 트랜잭션의 수를 나타낸다.
이는 특정 엔티티가 수행한 원자적 동작의 수를 말하며, 일반적으로 DB의 트랜잭션 수(Rollback과 Commit)를 말한다.
클라이언트 요청 → 서버 내부 처리 → 응답 까지가 하나의 TPS라고 볼 수 있다.

 

QPS와 TPS는 아주 비슷하지만 조금 다르다.

예를 들어 우리가 어떤 페이지를 방문한다고 생각해보자.
이때 방문한 페이지에는 게시글, 댓글, 광고, 인기 글 등의 정보들이 보인다고 하자.

우리가 페이지를 방문하면 하나의 TPS가 발생한다.
하지만 실제로는 게시글 조회, 댓글 조회, 광고 조회, 인기글 조회 등 4번의 특정 서버 요청이 발생하게 되고
이것을 QPS라고 볼 수 있다. 즉, 1 TPS와 4 QPS가 형성된다.

하지만 회원가입과 같은 단일 요청의 경우 하나의 쿼리만 발생하므로 TPS와 QPS는 같다고 볼 수 있다.

각 서비스의 특성상 중요한 성능 지표가 따로 있을 것이므로 해당 지표를 선택해 시스템의 개략적 성능 규모 측정을 하는 것이 바람직하다.

반응형