CS: 당근 채팅 설계 (Karrot Chatting System Design)
https://www.youtube.com/watch?v=_F6k0tg8ODo
1 채팅 메시지는 어떻게 전달될까?
당근 채팅
MAU 18m, 1:1 채팅, 커뮤니티 위한 그룹 채팅
기본 채팅 시스템
크게 채팅 시스템은 3가지 컴포넌트로 구성됨
채팅서버: 클라이언트의 요청을 받고 이벤트를 전달
db: 메시지를 저장, 유저목록 관리
푸시서버: 접속하지 않은(offline) 유저에게 푸시메시지를 보냄
서버가 1대만 있을때 1:1 채팅
chat-server memory : 해당 채팅서버만 접근 가능한 로컬 메모리 영역
채팅서버는 양방향으로 통신이 가능한 웹소켓으로 되어 있음
유저가 당근에 로그인시 세션에 저장되고 서버에 연결됨
로컬메모리에 유저아이디를 키값으로 세션정보를 저장하게 됨
서버가 두대 이상일때
사용자들이 다른 서버에 있을경우 각각의 서버 메모리는 공유 x
해결방법 1 : 공유메모리 사용 Key-Value Store (KV)
-> 해결방법 2: Pub/Sub
여기선 공유메모리 사용 방법에 대해 다룸
아래 그림에서 chat server 1과 2의 로컬에 저장된 user id와 server들의 ip주소가 key-value형태로 공유메모리에 저장됨
서버가 10대로 늘어난다면?
어떻게 하면 확장에 유리한 구조로 만들수 있을까?
Message Queue + Consumer
Message Queue(이벤트를 차례대로 처리하도록 이벤트를 줄을 세워 대기시키는 저장소)
Consumer(줄서 있는 이벤트를 하나씩 ...