본문 바로가기

개발

채팅 시스템에 사용할 메시지 브로커 선택하기

 

서로 다른 메시지 브로커를 사용하는 채팅 시스템의 성능을 비교하여 가장 적합한 것을 선택하도록 하겠습니다.

 

테스트 환경

설정 값

  • 쓰레드 수 : 10,000
  • 메시지 크기 : 256 bytes

테스트 도구

  • JMeter
  • Prometheus

서버 사양

  • CPU: 1 vCPU (burstable)
  • RAM: 1 GB
  • 네트워크 성능: 최대 100 Mbps

메시지 브로커로 사용될 도구

  • RabbitMQ
  • Kafka
  • Redis Pub/Sub

비교 기준

상대 기준

  • CPU 사용량
  • 메모리 사용량
  • 네트워크 사용량

(서비스의 특성 상 가용성보다 성능이 중요합니다)

 

절대 기준

  • 지연 시간은 200ms 미만이어야 합니다.
  • CPU, 메모리, 네트워크 사용량은 30%를 넘으면 안됩니다.

부하 테스트 결과

RabbitMQ

채팅 빈도
(초당 메시지 수)
 CPU 사용
(%)
 메모리 사용량
(%)
 네트워크 사용량
(%)
 지연 시간
(ms)
500 3.13 0.08 1.09 5.02
1,000 7.68 0.13 2.18 6.90
2,500 18.39 0.38 6.02 8.43
5,000 30.10 0.82 13.59 11.29
10,000 61.64 1.69 22.60 17.94
20,000 100+      
40,000 100+      

 

Kafka

채팅 빈도
(초당 메시지 수)
 CPU 사용
(%)
 메모리 사용량
(%)
 네트워크 사용량
(%)
 지연 시간
(ms)
500 0.16 0.04 1.94 2.25
1,000 0.32 0.08 3.11 2.50
2,500 0.76 0.17 8.94 2.75
5,000 1.58 0.35 15.23 3.00
10,000 3.31 0.74 22.33 4.00
20,000 6.28 1.52 43.70 6.00
40,000 13.93 3.02 91.45 8.00

 

Redis Pub/Sub

채팅 빈도
(초당 메시지 수)
 CPU 사용
(%)
 메모리 사용량
(%)
 네트워크 사용량
(%)
 지연 시간
(ms)
500 0.06 0.02 1.04 0.23
1,000 0.13 0.03 2.41 0.34
2,500 0.28 0.07 4.99 0.40
5,000 0.58 0.15 10.92 0.52
10,000 1.21 0.26 20.75 0.84
20,000 2.48 0.53 42.08 1.60
40,000 5.30 1.11 83.14 2.47

 

결론

  • RabbitMQ는 CPU 사용량이 높아서 비교적 기준치를 일찍 넘어갔다.
    (하지만 RabbitMQ도 소규모 서비스에서는 전혀 문제가 없는 수준이다.)
  • Kafka와 Redis는 비슷한 부하 수준에서 기준치를 넘어갔다.
  • 지연 시간은 Redis를 사용할 때 훨씬 낮았다.
    (하지만 사용자 경험의 관점에서 유의미한 수치는 아니다)
  • 결과적으로 고가용성을 보장하는 Kafka를 사용하는 것이 유리하다고 판단된다.
  • 하지만 설계 난이도를 고려하면 Redis가 더 좋을 수 있다.

Redis 선택

728x90
반응형