기술블로그

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

ignuy 2023. 8. 1.

1억 6천명을 연결하는 글로벌 메신저 '라인'

📑서론, 오픈챗?

오픈챗은 메신저형 소셜 네트워크와 장점을 공유한다. 여러 사람이 동시에 소통할 수 있으며, 실시간으로 참여하지 않더라도 남겨진 메시지를 통해 수월하게 소통할 수 있다. 또한 접속만 하고 있다면, 참여 여부와 상관없이 인원과 채팅내역이 지속된다.

파일, 목소리, 단체통화 등 여러 형태로 소통이 가능하며 연동된 앱에 따라선 송금, 선물등의 행위까지 수월하게 할 수 있으며 대부분 모바일이 연동되므로 비교적 접속과 참여가 자유롭다.

한 오픈챗에 수천 명부터 수만 명의 사용자가 참여할 수 있고, 활발한 오픈챗은 한 오픈챗에서만 1분에 20만 개의 API 요청을 처리하기도 한다. 통계적으로 라인의 오픈챗 서버는 1분에 천만 개, 하루에 약 100억 개의 API요청을 처리하고 있다. 따라서 네이버의 메인 페이지와 마찬가지로 라인의 오픈챗에서도 트래픽이 폭발적으로 증가하는 순간이 있다.

유명 가수 콘서트에 약 5000명의 사용자가 한 채팅방에서 만들어낸 트래픽

수천 명의 사용자가 하나의 오픈챗 서버에서 메시지를 동시에 주고받다 보면 일반 오픈챗 대비 100배 이상의 트래픽이 급증하는 것을 볼 수 있다. 이는 서버팀에서 “Hot chat”이라고 부르는 현상인데 이 포스팅에서는 라인 오픈챗 서버팀이 경험한 두가지 Hot chat 패턴과 그로 인해 발생한 문제, 그리고 그 문제를 어떤 방식으로 해결했는지 정리해 본다.

 

🔥Hot chat

Hot chat을 이해하기 위해선 오픈챗 서버의 이벤트 기반 아키텍처를 알아야 한다. 이벤트 기반 아키텍처란 분산된 애플리케이션 서비스들이 이벤트를 기반으로 통신하고 서로의 동작을 야기하는 패턴을 말한다. 이벤트는 사이트 방문, 주문, 결제 등 비즈니스 내외부에서 발생한 주목할만한 사건을 의미하고 일반적으로 json, xml 등의 포맷으로 교환된다.

LINE에서 활용하는 이벤트 기반 아키텍처의 개요는 아래와 같다.

🔥 오픈챗 서버에서는 메시지 전송과 메시지 리액션, 메시지 읽음 등과 같은 오픈챗 내 다양한 행위를 모두 이벤트로 간주하고 이벤트가 생성될 때마다 스토리지에 저장한 후 오픈챗에 참여하고 있는 모든 사용자에게 서버 푸시로 ‘새로운 이벤트가 생성됐으니 받아 가세요’라고 알린다. 서버 푸시를 받은 사용자(클라이언트)는 스토리지에 새로 들어온 이벤트를 페치(fetch) 이벤트 API를 이용해 받아가고 새 메시지 등을 화면에 추가하는 액션을 실행한다.

이벤트가 생성될 때마다 오픈챗에 참여하고 있는 모든 사용자에게 정보를 전달해야 한다. 5천 명이 한 오픈챗에 참여하고 있다고 가정하면 이벤트가 하나 생성될 때마다 5천 명의 사용자가 이 이벤트를 전달받기 위해 5천 개의 fetch 이벤트 API 요청을 호출하는 것이다. 따라서 1초에 수십 개의 이벤트가 생성되는 핫 챗에서는 그만큼 fetch 이벤트 API 요청이 급증하게 된다.

핫 챗이 발생하면 Storage에 거대한 부하가 발생할 수밖에 없는 구조이다. LINE은 이러한 현상을 어떻게 해결했는지 본론에서 알아보도록 하겠다.

댓글