CS: 당근 채팅 설계 (Karrot Chatting System Design)

CS: 당근 채팅 설계 (Karrot Chatting System Design)

avatar
FrugalBoy
2025.01.07조회수 2회

https://www.youtube.com/watch?v=_F6k0tg8ODo


1 채팅 메시지는 어떻게 전달될까?

당근 채팅

MAU 18m, 1:1 채팅, 커뮤니티 위한 그룹 채팅

기본 채팅 시스템

크게 채팅 시스템은 3가지 컴포넌트로 구성됨


Screenshot 2025-01-06 at 6.12.33 PM.png

채팅서버: 클라이언트의 요청을 받고 이벤트를 전달

db: 메시지를 저장, 유저목록 관리

푸시서버: 접속하지 않은(offline) 유저에게 푸시메시지를 보냄

서버가 1대만 있을때 1:1 채팅

chat-server memory : 해당 채팅서버만 접근 가능한 로컬 메모리 영역


채팅서버는 양방향으로 통신이 가능한 웹소켓으로 되어 있음

유저가 당근에 로그인시 세션에 저장되고 서버에 연결됨

로컬메모리에 유저아이디를 키값으로 세션정보를 저장하게 됨



서버가 두대 이상일때


Screenshot 2025-01-06 at 6.17.15 PM.png

사용자들이 다른 서버에 있을경우 각각의 서버 메모리는 공유 x

해결방법 1 : 공유메모리 사용 Key-Value Store (KV)


Screenshot 2025-01-06 at 6.18.12 PM.png


-> 해결방법 2: Pub/Sub


여기선 공유메모리 사용 방법에 대해 다룸

아래 그림에서 chat server 1과 2의 로컬에 저장된 user id와 server들의 ip주소가 key-value형태로 공유메모리에 저장됨

Screenshot 2025-01-06 at 6.20.25 PM.png

서버가 10대로 늘어난다면?


Screenshot 2025-01-06 at 6.22.37 PM.png

어떻게 하면 확장에 유리한 구조로 만들수 있을까?

Message Queue + Consumer


Message Queue(이벤트를 차례대로 처리하도록 이벤트를 줄을 세워 대기시키는 저장소)

Consumer(줄서 있는 이벤트를 하나씩 꺼내서 처리하는 작업자) 이용


A가 서버1에 요청을 보내면, 서버1은 메시지를 B에게 보내라는 이벤트를 ...

회원가입만 해도
이 글을 무료로 읽을 수 있어요.

이미 계정이 있으신가요?로그인하기
댓글 0
avatar
FrugalBoy
구독자 5명구독중 10명
Wanna live like a frugal boy For the genetically superior, success is easier to attain. But it is by no means guaranteed. After all, there is no gene for fate -Gattaca-