문제 발견 상황

모임 참가요청의 인원 추가로직에서 동시성 처리 방식에 따른 성능 비교를 위한 부하 테스트 진행 중 성능이 갑자기 떨어지는 문제 발견

  1. k6를 활용한 부하 테스트
  2. 10,000 개의 유저 계정으로 1,000 개의 모임을 랜덤한 쌍으로 참가
  3. 3분동안 부하를 점점 늘려가서 총 5분동안 진행

(초당 처리량이 증가하던 중 35/s 정도에서 3~5/s 로 급격하게 떨어졌다)

문제 인식

모임 참가 요청의 흐름 참가 요청 -> 모임 조회 -> 모임 조건 확인 -> 유저 조회(웹클라이언트 호출) -> 유저 조건 확인 -> 참가자 추가(동시성 처리) -> 참가 이벤트 발행

예상 원인

  1. 웹클라이언트 호출로 인한 오버헤드, 오류로 성능저하가 발생했다 -> 유저 조회
  2. ( 충돌을 배제한 환경이지만 ) 동시성 처리에서 충돌, 오류로 인한 성능저하가 발생했다 -> 참가자 추가

해결 과정

명확한 원인 확인

  1. 로그 확인 사용자 조회 실패: userId=4229, error=java.util.concurrent.TimeoutException: Did not observe any item or terminal signal within 5000ms in 'flatMap' (and no fallback has been configured) -> 로직 내부의 웹클라이언트를 통한 사용자 조회 타임아웃 -> 웹클라이언트 호출이 어떻게 이루어지는지 확인 필요

  2. 트레이스 확인