본문 바로가기
Log/Experiment

exp012_PM2 클러스터모드 적용 여부에 따른 게시글 생성 성공률 변화 관찰

by RIEM 2023. 3. 3.

Title

exp012_PM2 클러스터모드 적용 여부에 따른 게시글 생성 성공률 변화 관찰

Research Question

성능 테스트 도구 nGrinder로 경매 데이터(bid entity) 생성 요청을 30,000번 하면 30,000개 모두 생성될까?

Summary

현재 조건 하에 PM2 Cluster mode로 프로세스를 1개에서 2개로 하여 게시글 생성 30,000회 시도했을 때, 게시글 성공률은 42.3%을 기록했다. 이는 클러스터 모듈 적용 전 성공률인 41.7% 대비 약 0.6% 상승한 것에 불과했다. 따라서 클러스터 모드 적용에 따라 게시글 생성 성공률 향상에 유의미한 성과는 얻지 못했다.

PM2 클러스터 모듈 적용 효과가 그다지 크지 않았던 이유에 대해 생각했는데, 단일 머신의 낮은 성능이 문제가 아닐까 생각했다. 현재 서버는 t2 medium CPU 2코어 램 4기가를 사용중이다. 안그래도 코어 수가 낮은데 억지로 프로세스를 추가하려니 오히려 성능을 잡아먹는 효과가 발생하지 않았을까 추측한다.

Background Information

Situation

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

Procedures

Screen Shot 2023-03-03 at 4 33 37 PM

Data Recording & Analysis

test-pyramid-20230303-001

  • Vuser : 3000
  • Run count : 10
  • Total request : 30000
  • Ramp-up : True
  • 테스트 시작 전 DB 데이터 개수 : 0
  • 테스트 완료 후 DB 데이터 개수 : 12513
  • 테스트 중 생성 데이터 개수 : 12513

Screen Shot 2023-03-03 at 4 34 28 PM
예상했지만 도중에 테스트가 중지되었다. 1229명 이후 움직임이 떨어진 기록이 없었다는 것은 이때 무언가 문제가 생겨 중지되었다는 의미로 해석했다. 이번에도 VUser 1230명 가까운 선에서 중지되었다.

이번 pyramid-20230303-001 테스트는 생성 시도한 30,000개 중 게시글 성공 횟수는 총 12,513개로 성공률은 약 41.7%이다. 이는 테스트 시간 변수 외 동일한 조건 하에 진행한 테스트(test-pyramid-20230302-008)의 게시글 성공률은 42%이었는데, 두 테스트의 성공률 차이는 0.3%에 불과하다.

이제 cluster mode를 적용해보자.

test-pyramid-20230303-002(PM2 Cluster mode ps2)

pm2 start dist/main.js -i max

현재 머신의 CPU가 2개여서 max로 지정하면 프로세스를 2개 생성한다.

Screen Shot 2023-03-03 at 4 57 57 PM

  • Vuser : 3000
  • Run count : 10
  • Total request : 30000
  • Ramp-up : True
  • 테스트 시작 전 DB 데이터 개수 : 0
  • 테스트 완료 후 DB 데이터 개수 : 12693
  • 테스트 중 생성 데이터 개수 : 12693

Screen Shot 2023-03-03 at 5 02 41 PM
열심히 일을 하고있다.

Screen Shot 2023-03-03 at 5 04 38 PM
이전 테스트에서는 1229명에서 중지되었는 것에 반해 이번 테스트에서는 VUser 1246명에서 멈추었다. 유저 포화점이 17명 증가했다.

게시글 생성 요청 수 30,000건 중 성공 횟수는 12,693건으로 게시글 성공률은 42.3%이다. 이는 PM2 클러스터 모드 적용하지 않은 이전 테스트(test-pyramid-20230303-001)의 게시글 성공률인 41.7%보다 약 0.6% 높은 수치다. 게시글 성공률은 0.6% 소폭 상승했으나 1% 미만에 불과하다는 점에서 유의미한 성능 개선이 발생했다고 보기 어렵다.

그 외 개선효과가 있었다면 서버 리소스 사용률이다. Cluster mode 사용 전에는 14.5%였던 서버 CPU 사용률은 모드 적용 이후 11.1%로 약 3.4% 감소했다.

Discussion

게시글 생성 POST 요청의 처리량을 향상시킬 수 있는 방법을 Chatgpt에게 물어보았다. 그의 답변은 이렇다.

  1. express와 같이 가벼운 프레임워크 써라 : 현재 나는 nest.js를 사용하므로 패스
  2. connection pooling 사용해라 : 매 요청 마
  3. 다 DB 커넥션을 새로 생성하지말고 재사용하도록 커넥션 풀링을 사용하라고 한다.async/await 써라
  4. 로드 밸런서 써라 : 복수 머신으로 수평적 확장을 하는 방식인데 일리가 있다고 생각했다
  5. compression 해라 : 응답 시 페이로드의 사이즈를 압축으로 줄이면 성능을 높일 수 있다
  6. HTTP/2를 사용해라 : 멀티플렉싱/ 서버 푸시 기능을 사용하면 성능을 개선시킬 수 있다
  7. batch insert해라 : 만약 동시에 수 많은 게시글을 생성한다면, 각 게시글을 하나하나씩 생성하기보다는 배치 인서트로 일괄 처리해보라.
  8. 트랜잭션 사용해라

Conclusion

정리하자면 현재 조건 하에 PM2 Cluster mode로 프로세스를 1개에서 2개로 향상했을 때, 게시글 성공률은 41.7%에서 42.3%로 약 0.6% 상승 효과에 불과했다.

PM2 클러스터 모듈 적용 효과가 그다지 크지 않았던 이유에 대해 생각했는데, 단일 머신의 낮은 성능이 문제가 아닐까 생각했다. 현재 서버는 t2 medium CPU 2코어 램 4기가를 사용중이다. 안그래도 코어 수가 낮은데 억지로 프로세스를 추가하려니 오히려 성능을 잡아먹는 효과가 발생하지 않았을까 추측한다.

Reference

Appendix

test-pyramid-20230303-001

Application Server

Screen Shot 2023-03-03 at 4 40 02 PM

RDS

Screen Shot 2023-03-03 at 4 41 08 PM

test-pyramid-20230303-002(PM2 Cluster mode ps2)

application server

Screen Shot 2023-03-03 at 5 12 25 PM

RDS

Screen Shot 2023-03-03 at 5 12 56 PM

댓글