2023. 2. 10. 01:07ㆍSpring Micro Services/interfaces
MSA 서비스 개발시 보통 REST 방식을 가장 많이 쓸것이다. REST방식외에 WebFlux와 gRPC 방식으로 개발했을때 성능을 테스트 해보았다.
WebFlux의 경우 R2DBC와 JDBC 방식으로 개발하여서 테스트를 진행하였다.
테스트 전의 예상의 WebFlux는 비동기 방식을 지원하더라도 일부 NoSQL이 아닌 RDB의 경우 Blocking 방식으로 처리 되어서 JDBC 연동은 느릴것으로 생각했었고 R2DBC는 비동기 방식을 지원하기 때문에 R2DBC가 빠를 것으로 예상했으나 그렇지는 않았다.
물론 단순희 조회 하나만 테스트 해서 그럴 수 있을 것이다. 향후 좀더 다양한 케이이스를 추가해봐야겠다.
테스트시나리오
1초에 동시에 100명의 사용자가 현재 위치에서 가까운 스타벅스 매장을 검색한다고 가정 하고 JMeter를 통해서 테스트를 해보았다.
DB는 R2DBC 지원을 하는 PostgreSQL을 사용하였다.
테스트 방식은 총 4가지 방식으로 진행하였다.
- RESTful
- WebFlux + JDBC
- WebFlux + R2DBC
- gRPC
JMeter 설정
Thred Group 설정
HttpRequest 설정
테스트결과
Summary Report
Report의 Label 설명은 아래와 같다.
#Samples: 사용자별 서버 요청 횟수
Average: 평균응답시간
Min: 최소응답시간
Max: 최대응답시간
Std. Dev: 표준편차
요청에 대한 응답시간의 일정하고 안정적인가를 확인, 값이 작을수록 안정적이다.
Error %: Error율
Throughout: 처리량(초당 처리건수)
KB/sec : 처리량(초당 처리 KB)
RESTFul
WebFlux + JDBC
WebFlux + R2DBC
gRPC
위의 결과를 보면 WebFlux + JDBC의 성능이 가장 좋은 것으로 나타 났다. 위의 결과엣 우선 표준편차의 경우 작으면 작을수록 좋으면 그만큼 요청에 대한 응답시간이 일정하고 안정적인이므로 어플리케션 튜닝에 참고 하면 될것이다. 바면에 Throughout의 경우는 크면 클수록 좋다.
Response Times Over Time
RESTFul
WebFlux + JDBC
WebFlux + R2DBC
gRPC
위의 결과를 보면 WebFlux + JDBC 의 경우 Max 01.초 이고 평균 0.05초의 응답시간을 나타내었고 다음으로 WebFlux + R2DBC 의 경우 처음에 Max 2.1 초 이고 평균 0.03초 아래로 거의 바로 응답이 오는 거을 확인 할 수있다. 나머지 RESTful 과 gRPC의 경우는 많은 차이가 나는 것을 볼 수 있다.
TPS
RESTFul
WebFlux + JDBC
WebFlux + R2DBC
gRPC
위의 결과를 보면 WebFlux + JDBC 가 가장 좋은 결과를 나타내는 것을 알 수 있다.
결론
위의 결과를 보면 WebFlux를 사용하는 경우 가장 좋은 성능을 나타내고 있는 거을 알 수 있다.
MSA 뿐만 아니라 서버 API 개발시 위의 결과를 참고 해보면 사이트 특성에 맞는 조합으로 개발에 참고가 될 것이다.
소스다운로드
https://github.com/roopy1210/spring-msa-interfaces/blob/main/README.md