서로 다른 메시지 브로커를 사용하는 채팅 시스템의 성능을 비교하여 가장 적합한 것을 선택하도록 하겠습니다.
테스트 환경
설정 값
- 쓰레드 수 : 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
반응형