Skip to content

Handling large amount of network traffic for Open Chat service (Line Tech Blog) #2

@YeonwooSung

Description

@YeonwooSung

tech blog: LINE 오픈챗 서버가 100배 급증하는 트래픽을 다루는 방법

  • 오픈 채팅 서비스의 경우, 전체 채팅방들 중 일부 채팅방이 급격한 트래픽 증가를 가져오는 핫챗 현상이 일어날 수 있음
  • 예를 들면, 게임 오픈 채팅방이나 특정 이벤트를 위한 오픈 채팅방 등의 경우 평소에는 정상적이다가 특정 상황(이벤트 상황) 등에 트래픽이 크게 늘 수 있음
  • 갑자기 트래픽이 증가하게 되면 DBMS에 부하가 급격히 증가할 수 있음

해결법:

  1. Redis 등에 각 채팅방의 트래픽 양을 실시간으로 기록하고, 특정 시간대에 일정 수준 이상의 트래픽이 몰리게 되면 해당 채팅방에 대해서는 푸시 알림 등의 요청을 block 시킴 (간단한 핫챗 throttling 로직)

  2. 조인 throttling: kafka나 redis, local cache를 사용해서 트래픽 기록 및 throttle 적용.

  • Kafka의 경우, 대용량 트래픽에 대해 쓰로틀 체크 시에 약간의 지연이 있을 수 있는데, 그 사이에 DB에 충분한 부하가 가해져서 시스템이 더 오랜 시간동안 손상될 수 있음
  • Redis에 기록할 경우, 일부 핫챗을 위해 평상시에 다른 모든 수 많은 채팅방들에 대해서도 데이터를 Redis에 기록하고 체크하는 통신 알고리즘이 적용되어야 하는데, 이는 비효율적임
  • 외부 서버의 Redis가 아닌 로컬 머신 내의 캐시를 사용하면 통신 등의 부하를 줄일 수 있음
  1. 서킷 브레이커와 벌크헤드를 적용해서 특정 샤드에 문제가 생겨도 장애가 다른 샤드들로 전파되는 상황을 방지
  • 서킷 브레이커는 문제가 발생한 지점을 감지하고 실패하는 요청을 계속하지 않도록 방지하도록 하는 것을 목표로 하는 디자인 패턴이다

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions