Rabbit MQ

지종권(JiJongKwon)·2024년 12월 17일
1

프로젝트를 진행하면서, 여러명의 사용자를 가정하고 코드 실행 서비스에 대한 스트레스 테스트를 진행했을 때 19,077ms가 걸린 경험이 있었다.

원인을 분석해보니, 동기적으로 서비스를 진행해서 발생한 문제!

흐름

  1. 코드 실행 서비스 api 호출
  2. main 서버에서 서비스 실행
  3. 코드 DB와 Redis에 저장
  4. executor 서버로 전송
  5. 전송된 데이터를 가지고 코드 컴파일
  6. 컴파일 된 파일을 실행
  7. 실행결과값 main 서버로
  8. main 서버에서는 return

이때 코드를 시행할 때 2초 미만으로 timeout을 지정했는데, 그 이유는 무한 while문 같은 코드가 있을 수 있으니 제한을 뒀다.

만약 1 ~ 2초 사이의 작업이 누적된다면 어떻게 될까 ?

느려짐

그래서 해결 방법을 찾다가 비동기 아키텍처를 찾았다. 물론 kafka나 multi threading이나 redis pub/sub 이란 다양한 방법이 있지만 난 그 중 RabbitMQ를 선택했다.

Rabbit MQ란 ?

AMQP를 구현한 오픈소스 메시지 브로커
그냥 쉽게 말해서 생성자에서 소비자로 메세지를 전달할 때 중간 역할을 하는 담당

이게 왜 비동기가 되지 ?

약간 요런 느낌

그냥 main 서버에서는 코드를 보내고 다른 거 하고 있다가, 실행 끝나면 다시 받으면 그만!

아까전의 테스트와 속도를 비교해 보면 ?

19,077 ms -> 42ms

속도를 엄청 개선할 수 있음

그럼 왜 Rabbit MQ를 선택했냐 ?

  1. 데이터 유실 방지
  2. 모니터링
  3. 오픈소스이며 구현이 쉬움

그럼 Kafka랑 비교하면 ?

우선 kafka는 대용량 데이터에 적합함 즉 좀 더 무거움
현재의 내 프로젝트에서는 대용량 데이터가 아니라서 굳이 불필요

https://aws.amazon.com/ko/compare/the-difference-between-rabbitmq-and-kafka/
이거 읽어보면 좋을 거 같음

Redis는 ?
얘는 데이터 유실 될 수 있어서 애초에 배제

0개의 댓글

관련 채용 정보