본문 바로가기
Log/Experiment

exp008_PM2 클러스터 모듈 적용에 따른 로직 성능 변화 관찰

by RIEM 2023. 3. 2.

Title

exp008_PM2 클러스터 모듈 적용에 따른 로직 성능 변화 관찰

Research Question

  • PM2의 클러스터 모듈을 적용하면 성능이 얼마나 개선될까?

Summary

  • PM2 클러스터 모드 적용 후, 로직의 성능(TPS, Latency)는 오히려 감소했다. 하지만 클러스터 모드 적용 후 데이터의 편차가 줄어들어 안정성이 높아짐. 성능이 오히려 낮아진 원인은 CPU의 제한적인 수(2개) 때문인 것으로 추정됨
  • 클러스터 모드를 적용하지 않을 때 TSP는 1634이었는데, 클러스터 모드를 적용하니 1121로 오히려 감소했다. Latency의 경우, 약 593이였던 MTT도 852로 오히려 늘어났다.
  • 하지만 데이터들의 편차를 보면, 오히려 cluster mode의 TSP와 Latency의 변동폭이 낮아 상대적으로 안정적인 결과를 나타났다

Background Information

Situation

  • 부하 테스트 툴 nGrinder을 활용하여 경매 래플 어플리케이션 시스템의 서버 부하 테스트 진행중인 상황.

Current Experiment

  • test-pyramid-20230301-003 : pm2 클러스터 모드 코어 2
  • test-pyramid-20230301-004 : pm2 클러스터 모드 코어 2 + 레디스 적용

Procedures

Screen Shot 2023-03-01 at 5 59 45 PM

pm2 클러스터 모드 적용

sudo pm2 start dist/main.js -i max

nestjs 어플리케이션 pm2로 실행 시 최대 코어(t2.medium의 경우 2 코어)로 설정했다.

Screen Shot 2023-03-01 at 6 02 04 PM

테스트 계획

Screen Shot 2023-03-01 at 6 04 55 PM
Screen Shot 2023-03-01 at 6 27 38 PM

  • VUser: 1,000명
  • Agent : 2
  • Duration: 10mins
  • Ramp-up : true

이전 실험들까지는 duration을 15분으로 주었는데, 그만큼 줄 필요는 없을 것 같아서 10분으로 줄였다. 어차피 우리는 포화점이 어디인지 찾는 것이 성능 테스트의 주 목표인데, 포화점은 대부분 이미 테스트 초반 부에 관찰될 것이라고 추측하기 때문이다

Data Recording & Analysis

test-pyramid-20230301-003(Redis 없는 t2.medium)

  • TPS : 153.6
  • Latency : 6193
  • Errors : 0
  • Server CPU % : 46.8%
  • DB CPU % : 99.8%

test-pyramid-20230301-004(Redis 적용한 t2.medium)

  • TPS : 1121
  • Latency : 852
  • Errors : 0
  • Server CPU % : 98.5%
  • DB CPU % : 6.2%

Discussion

위 두 테스트로 우리가 분석할 수 있는 주제는 2가지다

  • Redis 없는 로직의 경우) 단일 프로세스 vs 멀티 프로세스 : 아쉽게도 단일 프로세스 중 VUser 1,000명으로 실험한 표본이 없어서 다음 기회로..
  • Redis 적용한 로직의 경우) 단일 프로세스 vs 멀티 프로세스 : 이번 포스트에서 다룰 주제

레디스 적용) 단일 프로세스 vs 멀티 프로세스

Screen Shot 2023-03-02 at 12 34 33 AM

20230301-004와 대조할 수 있는 테스트는 20230301-002이다. 두개의 차이는 위의 DESC컬럼을 보면 알겠지만 cluster 모드를 적용했냐 안했냐의 차이다. 004는 cluster mode로 2개 프로세스로 테스트를 수행했고, 002는 fork mode다. cluster은 pm2의 클러스터 기능을 사용했다.

이 실험을 시작할 때 가장 궁금햇던 점은 pm2 클러스터 모드를 적용하면 Throughput이 향상될 것인가였다. 결과는 놀랍게도 그렇지 않았다. 단일 프로세스일 때의 TSP는 1634이지만 클러스터 모드를 적용하니 1121로 오히려 감소했다. 설상가상으로 약 593이였던 MTT도 852로 상승했다. PM2 클러스터 모드를 적용했는데 오히려 성능이 떨어진 점은 예상하지 못했다.

혹시 지표에서 놓친 것이 있을까 싶어서 세부 데이터를 뜯어보기로 했다.

Screen Shot 2023-03-02 at 12 47 27 AM
그래프를 보면 가려졌던 cluster mode의 특징이 드러난다. 클러스터 모드의 평균 TPS가 상대적으로 낮긴 하지만 비교적 편차가 낮다는 특징이 있다. 데이터들이 평균에 가깝다는 말은 안정적인 처리 능력을 가졌다고 나는 해석했다.

Screen Shot 2023-03-02 at 12 50 57 AM
MTT 관점에서 보더라도 cluster mode가 안정적인 Latency를 보여주고 있다. fork mode의 Latency가 낮지만 도중에 갑자기 상승하는 구간이 2곳이 있다.

Conclusion

  • PM2 클러스터 모드 후, 로직의 성능(TPS, Latency)는 감소했다. 하지만 데이터들의 편차들은 상대적으로 낮아 안정적이었다
  • T2 medium(cpu 2)Redis를 적용한 로직에 대해 pm2 클러스터 모드 적용 여부를 테스트해보았다
  • 클러스터 모드를 적용하지 않을 때 TSP는 1634이었는데, 클러스터 모드를 적용하니 1121로 오히려 감소했다. Latency의 경우, 약 593이였던 MTT도 852로 오히려 늘어났다.
  • 하지만 데이터들의 편차를 보면, 오히려 cluster mode의 TSP와 Latency의 변동폭이 낮아 상대적으로 안정적인 결과를 나타났다

Reference

Appendix

test-pyramid-20230301-003 : pm2 클러스터 모드 코어 2

nGrinder Report

Screen Shot 2023-03-01 at 6 20 00 PM

Screen Shot 2023-03-01 at 6 20 21 PM

Application Server

Screen Shot 2023-03-01 at 6 21 34 PM

Screen Shot 2023-03-01 at 6 21 54 PM

RDS

Screen Shot 2023-03-01 at 6 23 13 PM

nGrinder Agent 1

Screen Shot 2023-03-01 at 6 23 49 PM

nGrinder Agent 2

Screen Shot 2023-03-01 at 6 24 14 PM

test-pyramid-20230301-004 : pm2 클러스터 모드 코어 2 + 레디스 적용

Screen Shot 2023-03-01 at 6 34 28 PM
redis 적용 로직 테스트 도중 화면이다.

nGrinder report

Screen Shot 2023-03-01 at 6 38 49 PM

Screen Shot 2023-03-01 at 6 39 21 PM

Application Server

Screen Shot 2023-03-01 at 6 43 41 PM

Screen Shot 2023-03-01 at 6 44 12 PM

RDS

Screen Shot 2023-03-01 at 6 45 41 PM

nGrinder Agent 1

Screen Shot 2023-03-01 at 6 46 16 PM

nGrinder Agent 2

Screen Shot 2023-03-01 at 6 46 40 PM

댓글