프로젝트를 진행하면서, 여러명의 사용자를 가정하고 코드 실행 서비스에 대한 스트레스 테스트를 진행했을 때 19,077ms가 걸린 경험이 있었다.
원인을 분석해보니, 동기적으로 서비스를 진행해서 발생한 문제!
이때 코드를 시행할 때 2초 미만으로 timeout을 지정했는데, 그 이유는 무한 while문 같은 코드가 있을 수 있으니 제한을 뒀다.
만약 1 ~ 2초 사이의 작업이 누적된다면 어떻게 될까 ?
그래서 해결 방법을 찾다가 비동기 아키텍처를 찾았다. 물론 kafka나 multi threading이나 redis pub/sub 이란 다양한 방법이 있지만 난 그 중 RabbitMQ를 선택했다.
AMQP를 구현한 오픈소스 메시지 브로커
그냥 쉽게 말해서 생성자에서 소비자로 메세지를 전달할 때 중간 역할을 하는 담당
이게 왜 비동기가 되지 ?
약간 요런 느낌
그냥 main 서버에서는 코드를 보내고 다른 거 하고 있다가, 실행 끝나면 다시 받으면 그만!
아까전의 테스트와 속도를 비교해 보면 ?
19,077 ms -> 42ms
속도를 엄청 개선할 수 있음
그럼 Kafka랑 비교하면 ?
우선 kafka는 대용량 데이터에 적합함 즉 좀 더 무거움
현재의 내 프로젝트에서는 대용량 데이터가 아니라서 굳이 불필요
https://aws.amazon.com/ko/compare/the-difference-between-rabbitmq-and-kafka/
이거 읽어보면 좋을 거 같음
Redis는 ?
얘는 데이터 유실 될 수 있어서 애초에 배제