대기열
- 대기열은 서버에 대용량 트래픽이 몰릴 때를 대비하여 서버의 부하를 일정 수준으로 유지하기 위해 만든다.
- 티켓팅 시간에 맞춰 많은 요청이 한번에 들어올 경우 서버가 부하를 이기지 못하고 장애가 발생할 수 있다.
- 따라 요청들에 대기열을 부여하여 하나씩 처리할 수 있도록 하는 대기열 시스템을 도입한다.
대기열 처리 기술
Kafka
장점
- 높은 처리량과 확장성 : 분산 아키텍처와 파티셔닝을 토앻 초당 수백만 건의 메세지를 처리할 수 있으며, 대규모 트래픽에 매우 적합
- 데이터 내구성 : 디스크에 데이터를 저장하고 복제하기 떄문에 메시지 손실을 방지하고, 장애 시 데이터를 복구 할 수 있음
- Offset 관리 : 메시지를 원하는 시점부터 다시 읽을 수 있어 재처리와 재실행이 가능
- 순서 보장 : 동일한 파티션 내에서 메세지 순서 보장
- 신뢰성 : 데이터 중복 없이 정확하게 한 번만 처리할 수 있어 신뢰성 제공
단점
- 지연 시간 : Redis 보다 지연 시간이 길 수 있어, 즉각적인 응답이 필요한 실시간 처리에는 약간 부족함이 있을 수 있음
- 복잡한 설정과 운영 : 설정과 운영이 복잡하여, 관리 비용이 높을 수 있음
Redis
장점
- 빠른 속도 : 인메모리 데이터 저장소이기 때문에 매우 낮은 지연 시간과 빠른 응답 속도를 제공
- 간단한 사용법 : 설정과 운영이 간단하고, 구현이 용이
- 실시간 처리에 적합
단점
- 데이터 손실 위험 : Redis는 기본적으로 인메모리 데이터베이스이기 떄문에 시스템 장애에 데이터가 손실될 위험이 있음. 지속성을 위해 추가적인 설정이 필요
- 확장성 한계 : 대규모 트래픽 처리에 있어 kafka만큼 확장성이 뛰어나지 않음
- 순서 보장 부족 : 높은 동시성에서 메시지 순서를 보장하기 어렵고, 메세지 내구성이 약할 수 있음
Kafka & Redis
장점
• 유연성 : Redis를 통해 빠른 응답이 필요한 실시간 작업을 처리하고, Kafka를 통해 대규모 데이터 처리를 담당하는 구조로 구성할 수 있다.
• 장점 극대화: Redis의 빠른 속도와 Kafka의 높은 처리량 및 데이터 내구성을 동시에 활용하여 다양한 상황에 적응할 수 있다.
• 복구 및 재처리: Redis에서 실패한 메시지를 Kafka로 전달하여 안정적으로 재처리할 수 있어 장애 대응이 유연
단점
• 구성 복잡성: 두 가지 시스템을 모두 운영해야 하기 때문에 설정 및 관리가 복잡해질 수 있으며, 운영 비용이 증가
• 중복 처리 비용: 두 시스템 간의 메시지 전송과 처리가 중복으로 발생할 수 있어 리소스 사용 효율성이 떨어질 수 있다.
결론
- Kafka를 사용하는 것으로 결정!
- Kafka를 선택하는 주된 이유는 대기열 시스템의 핵심 요구 사항인 확장성, 데이터 내구성, 메시지 순서 보장, 유연한 소비 모델, 그리고 운영 편의성을 Redis보다 더 잘 충족시키기 때문이다.
- Kafka는 대규모 데이터 처리와 장애 복구 능력에서 특히 강점을 가지며, 여러 Consumer 그룹이 독립적으로 작업을 처리할 수 있는 구조를 제공하여 대기열 관리의 효율성을 극대화