소켓 부하테스트

gwanhun·2023년 5월 15일
0

공식 문서 : https://socket.io/docs/v4/load-testing/ , https://www.artillery.io/docs

Node.js Artillery 이용 Server Stress Test (Socket.io)

https://g-g-g-g.tistory.com/entry/서버-스트레스부하-테스트-artillery-사용법-추가-socketio-테스트

https://sinsucoding.tistory.com/10

https://blog.hax0r.info/2020-04-19/stress-test-in-node-with-artillery/

https://ozofweird.tistory.com/entry/GCP-원데이-Artillery를-사용한-부하-테스트

https://jiwondev.tistory.com/215

설치 및 실행 방법

  • artillery 설치
npm install -g artillery
  • 테스트 파일 실행
npx artillery run test.yml 
npx artillery run 테스트파일명
  • 테스트 파일 실행 + 레포트 생성
npx artillery run -o myReport test.yml 
npx artillery run -o myReport 테스트파일명
  • 레포트 파일을 html 파일로 변경
npx artillery report myReport
npx artillery report 레포트이름 
  • 변경된 html 파일 실행하여 테스트 결과 그래프로 보기

간단한 부하 테스트

artillery quick --duration 60 --rate 10 -n 20 서버 주소
//60초 동안 테스트를 하는데 초당 10 요청을 보내고 동시 접속은 20으로 한다
//사용할 수 있는 옵션의 자세한 내용은 artillery quick -h 로 확인할 수 있다.

시나리오 부하 테스트

loop 는 줄 맞춤이 중요함 : yml 파일은 줄맞춤이 중요함

출처:https://sinsucoding.tistory.com/10

config:
  target: 'http://localhost:3000'
  phases:
    - duration: 60
      arrivalRate: 10
  engines:
    socketio-v3: {}

scenarios:
  - name: My sample scenario
    engine: socketio-v3
    flow:
      - emit:
          channel: 'newChat'
          data:
            message: 'hello11'
            sender: 'admin'
            recipient: 'test'
            owners:
              [
                { message: 'hello01', sender: 'admin', recipient: 'test' },
                { message: 'hello02', sender: 'admin', recipient: 'test' },
              ]
      - think: 1

      - emit:
          channel: 'getChats'
      - think: 1
  • target : 인스턴스로 접속할 url을 적어주면 된다. http:// + 인스턴스 외부ip
  • duration : 성능을 측정하는 시간
  • arrivalRate : 매초 새로운 가상 유저를 만드는 수
  • 그래프 의미 : https://hyerin6.github.io/2021-11-05/stress-test/

    artillery에서 확인할 부분

    Latency

    Latency는 지연시간이라는 의미이다. 그래프의 세로는 지연시간(Latency), 가로는 시간을 의미한다. 0으로 갈수록 HTTP 트랜잭션 (요청 → 응답까지의 과정을 HTTP 트랜잭션이라고 한다.) 1회당 요청 → 응답까지 짧은 시간 안에 왔다는 것이다. 그러나 이 시간은 네트워크 시간 + 애플리케이션에서 처리하는 시간이 포함되어 있기 때문에 0에 가깝게 낮추는 것은 어렵다.

    그래프 보는 법

    • 세로는 지연시간(Latency), 가로는 시간을 나타낸다.

    • max: 가장 오래 걸린 요청 → 응답 시간

    • p95: 전체 HTTP 트랜잭션 중 가장 빠른 것부터 95%까지 (대부분의 트래픽)

    • p50: 전체 HTTP 트랜잭션 중 가장 빠른 것부터 50%까지 (절반의 트래픽)

    • min: 가장 빠르게 온 요청 → 응답 시간

    • 이 외에 p99도 많이 사용하는데 거의 모든 트래픽을 의미하기 때문에

      💡 p95와 p99는 퍼센타일(Percentile)값으로 Request latency 만 볼 때 95 % 에 있는 요청이 ms 초가 걸렸고, 99%에 해당하는 요청은 ms 가 걸려 느린 요청에 분포를 볼 수 있다.

      [출처][https://blog.hax0r.info/2020-04-19/stress-test-in-node-with-artillery/](https://blog.hax0r.info/2020-04-19/stress-test-in-node-with-artillery/)

      결과 보고서 읽는 법

    • Elapsed time: 10 seconds

    • Scenarios launched:  999 //인원 수

    • Scenarios completed: 998 //성공한 인원 수

    • Requests completed:  998 // 요청 건

    • Mean response/sec: 100 //100밀리 세컨드

    • Response time (msec):

    • min: 2 //제일 빠른 시간

    • max: 98 //제일 오래 걸린 시간

    • median: 5 // 중간 값

    • p95: 10 //하위 뒤에서 5번째로 느린 것.

    • p99: 25.5 // 하위 1% 애들

    • Codes:

    • 200: 998 // 코드 200: 성공한 998

      TPS 측정

      TPS는 arrivalRate로 측정할 수 있다.

      대부분의 경우 스트레스 테스트는 목표로 하는 TPS가 고정되어 있고 그 TPS를 맞춰야 하기 때문에

      TPS를 고정 시킨 상태에서 코드나 인프라를 수정하면서 목표로 하는 TPS가 안정적인지 보면 된다.

      성능 향상을 위해 유의미하게 봐야 하는 내용은 가급적 스트레스 테스트를 길게 해봐야 한다는 것이고

      실제 유저들의 패턴과 비슷하게 시나리오를 작성해 테스트해야 한다는 것이다.

profile
주니어 백앤드 개발자

0개의 댓글