websocket connection benchmark test (go vs webflux)

박우영·2024년 11월 18일
0

Other

목록 보기
2/3

이전 게시글 에서 spring mvc 에서 Thread 별 websocket benchmark 테스트를 진행해봤고 이번엔 webflux 와 go 에 대한 비교를 진행보고자 합니다.
(go 언어에 대한 이해도가 낮음)

Test Environment

기기: Mac m1 pro
메모리: 16GB
칩: Apple M1
오픈 파일의 최대수(soft): 65000

go

version: go1.23.2 darwin/arm64
library: github.com/gorilla/websocket

webflux

spring boot: 3.3.5
jvm: kotlin(1.9.25)
jdk: corretto-17.0.12

그 외 설정은 Default

Test Purpose

Thread 1개당 1request 10000개의 동시요청에 대한 WebSocket Connection(open connection) 성공유무 와 cpu utilization, memory 에 대한 성능 분석을 하고자 함

사전 사용량

ide 를 사용하지않고, go 와 spring 을 별도의 터미널 환경으로 실행하였습니다.

go

webflux

10000 request 1 thread

webflux

  • cpu utilization, memory usage

  • summary report

go

  • cpu utilization, memory usage
  • summary report

결론

  • tps 자체는 차이가 유의미 하진 않았음. (실행할때마다 약간의 오차 발생)
    • 하지만 평균 값은 go가 항상 좋았음
  • 리소스 사용량(cpu, memory) 단순히 connection 만 맺는 테스트라 정확하다고 할 순없지만 유의미한 차이를 보임
    • go: 11392KB -> 19296KB
    • webflux: 13568KB -> 212MB

한가지 언어를 잘 다루는 일도 중요하지만, 언어적 특징을 잘 살려 알맞은 프로젝트에 적용해 나가는 것 또한 중요하다고 생각이 들었습니다. 저는 이번 테스트를 통해 리소스를 더 효율적으로 사용할 수 있는 go 언어를 선택해서 한정된 자원속에서 더 효율적으로 사용할 수 있도록 websocket 서버를 go 를 선택해서 다뤄볼 예정입니다.

0개의 댓글