https://okky.kr/articles/1412539
누가 spring mvc + mysql (blocking) vs spring webflux + mongodb (non blocking) 실험했음.
근데 결과중에 동시요청 10000명이고 insert할 때, webflux + mongodb의 fail이 12%나 됨. spring mvc + mysql은 선방했는데.
왜 이런거임?
mongodb에 insert가 mysql insert보다 더 빠르지 않나?
mongodb에서 병목걸린게 아니라, webflux랑 mongodb 잇는 connection pool 구간에서 병목 일어났나? 왜임?
재실험하니까, 10000명 기준 webflux + mongo db의 fail율이 25%나 됨. 못써먹는 수준이네. 이거 왜그런거임? nodejs도 이거랑 비슷하지 않나? non blocking이라 blocking인 spring mvc보다 성능 좋을 거 같은데, 막상 까보면 아니고, 전에 nginx가 apache보다 좋은 이유가 non blocking이라길래, 트래픽 5000개 였나 잡고 실험해봤는데, 규모 커지면 처참하던데 왜 그런거임?
테스트의 기본도 안된 글이네 mvc랑 웹플럭스가 단순 처리 성능에서는 큰 차이 없는거 맞음 웹플럭스가 근소하게 앞서긴 하고
논블로킹을 쓰는건 처리 속도 뿐만이 아니라 장애 전파도 생각해봐야함 예를 들어 특정 작업의 io가 지연되는 경우에 mvc는 점유된 스레드가 하나씩 늘어나다가 아예 맛이 가버리겠지 근데 webflux는 그런 경우에 훨씬 더 잘버텨냄
1. mvc랑 웹플럭스가 단순 처리 성능에서는 큰 차이 없는거 맞음
실험 글 보면, 동접자 5000명일 때, insert가 webflux + mongodb가 압도적으로 좋아보이는데, 이거 큰 차이지 않음?
2. 장애전파 부분에서 webflux가 io 지연될 때 왜 mvc보다 더 잘 버티는지 잘 이해가 안감
1번 3번은 새 댓글로 말했듯이 전혀 믿을 수 없는 테스트이므로 의문 자체를 가질 필요가 없음
2번은 스레드 점유로 설명해줬는데, webflux 동작 방식을 모르면 이해하기가 힘들지 내게 설명을 바라지 말고 webflux 동작 방식을 직접 공부해보길 추천함
오키 감사
이번 기회에 성능 테스트란 무엇인지도 한번 공부해보셈
오키. 근데 성능테스트라는게 범위가 엄청 넓지 않음?
예전에 심심해서 k6라는 라이브러리로 stress test로 spike test, load test, soak test 찍먹해본적은 있음. 근데 이건 그냥 성능측정의 결과 지표를 어떤 context에서 나타내는가일 뿐이고
성능 테스트라는게 그냥 다른 모든 변인을 고정하고, 변수 하나만 바꿔서 stress test돌리는걸 해보라는거임?
어떤 것들을 고려해야하는지 고민해보라고
변인 고정은 무슨 수로 할건지도 변수 하나도 무식하게 값 수정해보면서 무한으로 돌릴건지, APM 도구로 정밀분석 할건지 등등
그럼 너무 많은데?
답답해서 욕할거같음 여기까지만 하자
그래 미안
3. mongodb의 lsm tree가 insert가 빠르다는게 강점인데, 동시접속자 10000명일 때, insert가 spring mvc대비 더 빠르긴 한데, fail율이 왜저리 높은거임? mongodb의 문제가 아니라, webflux에서 mongodb 의 접합부분인 커넥션 풀에서 병목있어서 그런거임?
성능 테스트에는 여러가지 요인이 있을 수 있는데, DB를 다른거로 한거부터 성능 테스트에 대한 기본적인 개념이 있는지도 잘 모르겠고 테스트 환경도 제대로 명시하지도 않았고 설정값들도 죄다 기본값 쓰던데 그것도 아무 생각 없이 테스트한거 티나고 여러모로 관심가지고 볼만한 테스트는 아냐
okky는 똥글밖에 없어서 안가게 됨... 이 정도는 아니였는데 말이지