이 주제로 블로그를 작성한 이유
MongoDB 에서 컬렉션을 생성할 때, 효율적인 데이터 설계와 시스템 안정성 확보하기 위해 예상 트래픽을 산정하는 과정을 거친다.
예상 트래픽을 통해 조회, 쓰기 요청의 비율을 파악할 수 있고
조회 트래픽이 많다면 적절한 인덱스를 설계해 조회 속도를 최적화할 수 있다.
(그렇다고 인덱스를 많이 만들면 쓰기 성능이 저하되므로 트래픽 패턴에 따라 필요한 인덱스만 설정하는게 좋다. )
트래픽
트래픽이란 서버를 통해 최종 사용자에게 전달된 데이터의 양을 말한다.
시스템을 설계할 때 트래픽을 예측하고 이에 적합한 설계를 하는것은 안정성과 성능을 보장하는데 중요하다.
QPS와 RPS 개념
RPS 는 QPS 보다 더 상위 개념이다. (RPS > QPS)
QPS(Queries Per Second)
- 정의 : 초당 처리되는 쿼리(Query) 의 수
- 활용 : 주로 데이터베이스와 관련된 성능 지표로 사용됨
- 목적 : 특정 초당 데이터베이스에서 얼마나 많은 조회/쓰기 쿼리 처리가 가능한지
RPS(Requests Per Second)
- 정의 : 초당 처리되는 요청(Request) 의 수
- 활용 : 데이터베이스 뿐만 아니라 API 호출, 웹 서버 요청 등 모든 형태의 요청을 포함
- 목적 : 특정 초당 얼마나 많은 요청을 처리할 수 있는지, 예상 트래픽 증가에 따른 서버 용량 평가
트래픽을 산정하는 과정
QPS와 RPS를 기준으로 예상 트래픽을 산정하는 과정은 다음과 같다.
이 과정은 사용자의 활동 패턴, 시스템 구조, 서비스 유형에 따라 달라질 수 있다.
트래픽 산정의 기본 요소
트래픽을 예측하려면 다음 요소를 고려해야 한다.
- 사용자 수: 동시 접속 사용자(Concurrent Users)의 수
- 평균 요청 빈도: 사용자 한 명이 초당 또는 분당 발생시키는 요청 수
- 피크 시간(Peak Time): 사용자 활동이 가장 많은 시간대의 트래픽
- 트래픽 분포: 하루 동안 트래픽이 어떻게 분산되는지(예: 아침과 저녁 피크, 낮은 야간 활동 등)
트래픽 산정 공식
(1) QPS = 사용자 수 × 평균 요청 수
- 예제:
- 동시 접속 사용자 수: 1,000명
- 1명의 사용자당 초당 0.2개의 요청
- QPS = 1,000 × 0.2 = 200 QPS
(2) RPS = 사용자 수 × 평균 요청 빈도 × API 요청 수
- 예제:
- 동시 접속 사용자 수: 1,000명
- 초당 0.1개의 요청
- API 요청: 3개의 서비스 호출
- RPS = 1,000 × 0.1 × 3 = 300 RPS
예상 트래픽 계산 단계
- 동시 사용자 수 추정
- 최대 동시 접속 사용자를 추정한다.
예: 앱의 활성 사용자가 10만 명이고, 피크 타임의 10%가 동시 접속한다면, 10,000명.
- 최대 동시 접속 사용자를 추정한다.
- 평균 요청 빈도 측정
- 사용자 활동에 따라 초당 요청 빈도를 추정한다.
예: 한 사용자가 초당 0.1회 요청(10초에 1회 클릭).
- 사용자 활동에 따라 초당 요청 빈도를 추정한다.
- 서비스 호출 수 고려
- 한 번의 요청이 내부적으로 몇 개의 API를 호출하는지 분석한다.
예: 검색 요청이 데이터 조회, 사용자 권한 확인, 로깅 API 호출을 포함 → 3회 호출.
- 한 번의 요청이 내부적으로 몇 개의 API를 호출하는지 분석한다.
- 트래픽 분포 예측
- 피크 시간과 비피크 시간의 트래픽 비율을 나눈다.
예: 하루 총 요청 1,000만 건, 피크 시간에 50% 발생 → 500만 건/피크 시간.
- 피크 시간과 비피크 시간의 트래픽 비율을 나눈다.
도구 활용
트래픽을 산정할 때 실시간 데이터를 활용하면 더 정확히 예측할 수 있다.
- 로그 분석: Google Analytics, ELK Stack(Kibana)로 사용자 요청 패턴 확인
- 부하 테스트: JMeter, Locust 같은 도구로 예상 QPS/RPS를 시뮬레이션
- 모니터링: Prometheus, Grafana로 실제 트래픽 추적 및 예측
트래픽 산정은 동시 사용자 수, 요청 빈도, 서비스 구조에 따라 유동적이다.
예상 트래픽을 기반으로 데이터베이스와 서버를 최적화하고 트래픽 증가에도 유연하게 대응할 준비를 해두는 것이 좋다.
반응형
'클라우드 및 인프라 > 네트워크' 카테고리의 다른 글
[linux] 리눅스 tail 명령어 (0) | 2022.05.18 |
---|---|
넷기어 BR 200 VPN 연결 (0) | 2022.01.13 |
virtualbox NAT네트워크 고정 ip 할당시키기(포트포워딩) (0) | 2022.01.05 |
ERROR DEBCONF: UNABLE TO INITIALIZE FRONTEND: DIALOG (0) | 2021.08.13 |
CIDR block (0) | 2021.07.23 |