tech blog: LINE 오픈챗 서버가 100배 급증하는 트래픽을 다루는 방법
- 오픈 채팅 서비스의 경우, 전체 채팅방들 중 일부 채팅방이 급격한 트래픽 증가를 가져오는 핫챗 현상이 일어날 수 있음
- 예를 들면, 게임 오픈 채팅방이나 특정 이벤트를 위한 오픈 채팅방 등의 경우 평소에는 정상적이다가 특정 상황(이벤트 상황) 등에 트래픽이 크게 늘 수 있음
- 갑자기 트래픽이 증가하게 되면 DBMS에 부하가 급격히 증가할 수 있음
해결법:
-
Redis 등에 각 채팅방의 트래픽 양을 실시간으로 기록하고, 특정 시간대에 일정 수준 이상의 트래픽이 몰리게 되면 해당 채팅방에 대해서는 푸시 알림 등의 요청을 block 시킴 (간단한 핫챗 throttling 로직)
-
조인 throttling: kafka나 redis, local cache를 사용해서 트래픽 기록 및 throttle 적용.
- Kafka의 경우, 대용량 트래픽에 대해 쓰로틀 체크 시에 약간의 지연이 있을 수 있는데, 그 사이에 DB에 충분한 부하가 가해져서 시스템이 더 오랜 시간동안 손상될 수 있음
- Redis에 기록할 경우, 일부 핫챗을 위해 평상시에 다른 모든 수 많은 채팅방들에 대해서도 데이터를 Redis에 기록하고 체크하는 통신 알고리즘이 적용되어야 하는데, 이는 비효율적임
- 외부 서버의 Redis가 아닌 로컬 머신 내의 캐시를 사용하면 통신 등의 부하를 줄일 수 있음
- 서킷 브레이커와 벌크헤드를 적용해서 특정 샤드에 문제가 생겨도 장애가 다른 샤드들로 전파되는 상황을 방지
- 서킷 브레이커는 문제가 발생한 지점을 감지하고 실패하는 요청을 계속하지 않도록 방지하도록 하는 것을 목표로 하는 디자인 패턴이다
tech blog: LINE 오픈챗 서버가 100배 급증하는 트래픽을 다루는 방법
해결법:
Redis 등에 각 채팅방의 트래픽 양을 실시간으로 기록하고, 특정 시간대에 일정 수준 이상의 트래픽이 몰리게 되면 해당 채팅방에 대해서는 푸시 알림 등의 요청을 block 시킴 (간단한 핫챗 throttling 로직)
조인 throttling: kafka나 redis, local cache를 사용해서 트래픽 기록 및 throttle 적용.