Skip to content

성능 개선 사항 ‐ 대기열

Mingi Kim edited this page May 7, 2024 · 1 revision

대기열이란?

프로세스가 자원에 접근하거나 처리될 때 정렬되는 기법을 지칭한다.

대기열을 구현함으로써 시스템의 효율적인 자원 분배를 돕고, 과부하 상황에서도 안정적으로 운영될 수 있도록 도와줄 수 있으며, 이를 통해 사용자는 서비스가 과부하로 인해 중단되거나 오류를 경험하는 일 없이, 일관된 응답 시간을 기대할 수 있다.

채택한 기술 스택

  • java 내장 큐
  • webflux + redis
  • Java Message Service

유의해야할 점

  • 대기열의 경우 실제 서비스의 성능 향상보다는 서비스가 받아들일 수 있는 쓰레드를 조절하여 서버가 안정적으로 가동하는데 그 역할이 있다. 성능 자체에는 향상이 없을 수도 있고, 오히려 성능이 감소할 수도 있다.

수립한 대기열 적용 전략

  • Webflux를 이용하여 비동기처리를 해주었다. webflux를 적용하려는 과정에서 기존 서비스 서버에서 mvc와의 충돌이 발생하여 대기열만을 처리해주기 위한 서버를 새로 생성했다.
  • 대기열은 Redis의 Sorted Set을 이용하여 시간별로 큐를 이용하여 먼저 들어오는 사람을 보장해주었다.

대기열을 적용함으로서 기대할 수 있는 점

Untitled (4)
  • 위 사진 처럼 우리 서비스의 트래픽은 특정시간 짧은 시간동안 많은 트래픽이 몰릴 것으로 예상된다. 짧은 시간 트래픽 때문에 서버를 늘리기에는 비용 문제가 크게 발생한다. 그렇기에 우리는 대기열을 도입하여 일시적으로 많은 트래픽이 발생하는 서비스에 과도환 트래픽의 유입을 방지해 주고 시스템을 보호될 수 있게 해주었다.

추후 적용할 수 있는 기술

사용 쓰레드 수에 비례한 대기열 자동 적용 기술