Non-Blocking(WebFlux)기반 Application과 Blocking(MVC)기반 Application간 성능비교 Benchmark 사례를 소개한다.
원문 내용에 작성자의 생각을 일부 포함하여 간략하게 정리 요약했다.
(원문)
thepracticaldeveloper.com/2020/06/16/full-reactive-stack-4-conclusions/
Full Reactive Stack: Conclusions
In this last part of the series, we focus on the performance of this full reactive stack when compared with the traditional blocking approach.
thepracticaldeveloper.com
1. Performance
기본적으로 Non-Blocking은 Reactive하게 동작하므로 동일시간에 많은 양의 request가 발생(사용자 peak 등)하거나
많은 양의 데이터를 한번에 요청할 경우 Blocking Application 대비 향상된 성능을 보여준다.
1.1 Benchmark 환경
. Intel Core i7 @ 2,5 GHz with 1 processor and 4 cores
. Netty(8 parallel server threads)
. Non-Blocking 구현 : Spring WebFlux
. Blocking 구현 : RestTemplate
1.2 Benchmark 시나리오
. 병렬(32)로 1, 8, 32, 96 and 768 requests 수행
. 병렬(96)로 1, 8, 32, 96 and 768 requests 수행
1.3 Server’s Side: 초당 처리된 Requests
아래 결과 graph에 의하면 WebFlux 성능이 월등히 우수하다.
첫번째 graph는 병렬로 32 requests를 동시에 수행했을 경우, WebFlux는 거의 초당 30 requests를 처리하나, Blocking은 초당 8 requests를 처리한다.
두번째 graph는 병렬로 96 requests를 동시에 수행했을 경우, WebFlux는 거의 초당 90 requests를 처리하나, Blocking은 초당 8 requests를 처리한다.
Blocking은 server threads 수 제한으로 병렬수행에 한계를 보인다.(이 경우 8 threads)
1.4 Client’s Side: Request 평균 응답시간
WebFlux는 requests 증가와 무관하게 응답시간이 거의 1초에 근접한다. 즉, 거의 모든 requests를 병렬적으로 처리한다. 반면, Blocking은 일정수의 requests가 넘어가면 응답시간이 점차 증가한다. 이것은 server threads가 busy하면 나머지 requests는 대기할 수 밖에 없으므로 응답시간이 증가하는 것은 당연하다.
1.5 시사점
전통적인 Web 아키텍처에서 성능을 향상 시키는 방법은
1) Server Scale Up : parallel threads 수 증가
2) Asynchronous processing이 가능하도록 아키텍처 변경(Reactive Programming)
2. 개발 편의성
그럼 무조건 WebFlux 기반으로 개발하는것이 정답인가? 다른 고려사항은 없는가? 예를들어 개발조직이 Reactive Patterns에 얼마나 익숙한지 고려해야 한다. Reactive는 패러다임의 변화가 필요하며, Reactive 개념이 충분히 학습되지 않으면 여러 측면에서 잘못될 수 있다. 어렵게 개발이 되었다 하더라도 유지보수 측면에서는 악몽이 지속될 수 있다.
또한, 코드 가독성이 매우 나빠질 수 있으며, 값을 즉시 반환하지 않는 코드 블록을 디버깅하는 것과 관련된 추가 복잡성도 있을 수 있다.
3. 안정성
Full Reactive 스택이 현재 시스템 환경에 적합한지 평가해야 한다. 예를 들어, 관계형 데이터베이스에 대한 지원은 아직 초기 단계이다.
4. Testing
WebFlux를 사용하여 Reactive 스트림에 대한 단위 및 통합 테스트를 작성하는 것은 까다로울 수 있다. Project Reactor 문서를 참조하면 도움이 될 수 있다. 추가적인 불편은 WebFlux를 사용한 테스트의 사례가 아직은 많지 않다.