초식 서버 성능 올리기(처리량, 응답 시간)

minhyuk yoon (joseph)·2022년 5월 7일
0

웹서버 성능

목록 보기
1/1

해당 글은 최범균님의 초식-서버 성능 올리기를 글로 정리한 내용입니다.

서버 성능 기본 지표 2개

1. 응답 시간 (Response Time)

  • 클라이언트가 무엇인가 서버에 요청을 하고 그 요청에 대한 응답을 받을 때까지 걸린 시간을 의미
  • 응답 시간은 아래의 두가지로 분류 가능
    • 처리 시간(Processing Time) : 실제 서버가 요청을 처리하는데 걸린 시간
    • 대기 시간(Latency Time) : 클라이언트와 서버간에 데이터를 주고 받는데 걸리는 시간

2. 처리량 (Throughput)

  • 흔히 TPS(Transaction Per Second) 라는 수치로 많이 표현함

TPS (Transaction Per Second)

  • 서버가 초당 처리할 수 있는 요청의 개수를 나타냄
  • TPS 가 높을 수록 초당 처리할 수 있는 요청의 수가 많은 것이다.

그렇다면 TPS 를 높이려면 ??

1. 서버 수 늘리기

  • 서버 1대가 10 TPS 의 성능을 가진다고 할 때 해당 서버가 2대라면 20 TPS, 3대면 30 TPS 의 성능을 가짐 (10 TPS * 서버 N 대)

2. Thread Pool 또는 DB Connection Pool 의 크기 늘리기

  • Thread Pool 의 Thread 개수가 5개이고 요청 처리 시간이 1초 걸린다고 할 때, 해당 서버는 5 TPS 의 성능을 가짐

  • Thread Pool 의 Thread 개수가 10개이고 요청 처리 시간이 1초라면, 이때 해당 서버는 10 TPS 의 성능을 가짐

3. 서버의 요청 처리 시간(Processing Time) 줄이기

  • 위의 1, 2번처럼 서버의 수를 늘리거나 Thread Pool 또는 DB Connection Pool 의 크기를 늘린다고 해서 성능이 항상 그 수(크기)와 비례하여 증가하는 것은 아니다!

  • 어느 시점이 되면 DB 가 견뎌낼 수 있는 부하의 임계치를 넘어가게 되는데, 이로 인해 DB 가 Query 를 처리하는데 걸리는 시간이 증가하게 되며, 이에 따라 서버가 요청을 처리하는데 걸리는 시간이 함께 증가하게 된다. 그리고 이는 곧 TPS 의 감소를 의미하게 된다.

  • 즉, 결국 서버의 처리량을 늘리기 위해 서버의 수/Thread Pool/DB Connection Pool 의 크기를 늘렸지만 TPS 가 떨어지는 일이 발생하게 된다.

  • 따라서 우리는 TPS 를 높이기 위해 기본적으로 서버의 처리 시간을 먼저 줄여야 한다.

    • 하나의 요청 처리 시간이 1초이며, 쓰레드 풀의 쓰레드 개수가 10개일 때 해당 서버가 10TPS 의 성능을 가진다고 가정해보자
    • 이때 만약 우리가 처리 시간을 0.5 초로 줄일 수 있다면 해당 서버의 TPS 는 20 TPS 로 증가하게 된다!

4. 대기 시간(Latency Time) 줄이기

  • 응답 시간은 요청 처리 시간과 대기 시간으로 구성된다고 하였다.
  • 따라서 대기 시간도 줄일 수 있다면 줄여야할 필요가 있다.

요청 처리 시간(Processing Time)을 줄이려면 ??

  • 요청을 처리하는데 드는 비용이 가장 비싼, 즉, 처리 시간의 비중이 가장 높은 대상을 찾아 줄일 수 있다면 줄여야한다.

  • 일반적으로 처리 시간의 비중이 높은 대상

    • DB 연동
    • 외부 서비스 API 호출
    • 데이터 집계 및 계산

1. 처리 시간 줄이기 : DB

  • Query 튜닝
  • Cache 이용
  • 장비빨(금융 치료, Money Swag)
    • Hardware upgrade (Scale Up)
    • DB Replication -> 부하 분산
      • Primary (DB 쓰기)
      • Replica (DB 읽기)

2. 처리 시간 줄이기 : 외부 API 호출

  • 외부 서비스 API 호출 응답 시간 증가는 곧 우리 서버의 처리 시간 증가를 의미
  • 개선 방법
    • Cache 사용
    • 외부 서비스 API 호출 제거
      • Messaging 을 이용한 방법(Kafka, RabbitMQ 등)

3. 처리 시간 줄이기 : 데이터 집계 및 계산

  • 미리 계산하여 Caching or DB 에 저장
  • Example
    • 좋아요 수
    • 리뷰 수


요청 대기 시간(Latency Time) 을 줄이려면??

1. 대기 시간 줄이기 : 대역폭

  • 대역폭이 작다면 클라이언트 개수가 증가할 때 주고 받는 속도가 급격히 느려진다.
    • 고속도로에 차가 증가하면 속도가 느려지는 것과 유사
  • 세가지 방식 고려
    • 응답 크기 줄이기
      • 응답 압축
      • 이미지 파일 크기 줄이기, 이미지 해상도 낮추기
    • 트래픽 분리하기
      • 이미지와 같은 정적 파일을 CDN(Content Delivery Network) 을 통해 제공
      • CDN 은 이미지 등과 같은 정적 파일 전송에 특화된 서비스이기에 CDN 들은 대역폭 자체가 크다
    • 대역폭 늘리기
      • 비용 측면에서 CDN(Content Delivery Network) 가 유리하다


정리

  • 처리량(Throughput)을 높이려면??
    • 서버의 요청 처리 시간(Processing Time) 줄이기
    • 장비 추가(Scale Out)
    • Thread Pool / DB Connection Pool 크기 조절
  • 처리 시간을 줄이려면??
    • DB Query 튜닝, 장비빨(Scale Out/Scale Up)
    • Cache
    • 데이터 미리 집계
  • 대기 시간을 줄이려면??
    • 응답 크기 줄이기
    • 정적 파일 트래픽 분리(CDN)
    • 대역폭 늘리기

profile
보다나은 내일을 위한

0개의 댓글