Skip to content

[노지원] 12장 채팅 시스템 아키텍처 #73

@rojiwon123

Description

@rojiwon123

[메시지 발송 트래픽 계산]

  • 한 사용자당 일일 메시지 발송량: 100회
  • 100만 MAU (33,000 DAU)
  • 평균 QPS = 330만 / 86,400초 ≈ 38 QPS
  • 피크 시간대는 약 3배로 가정 (= 약 150 QPS)

100만 MAU 서비스의 경우 메시지 발송 예상 qps는 150 (이미 높은 편)

현재 1000만 MAU 이상이고 계속 성장하는 서비스라고 가정했을 때, 트래픽이 집중되는 시간에 부하가 크므로 비동기 처리를 통해 부하를 조절한다.

  • 메시지 발송이 단순히 디비에 채팅 레코드 하나 추가하는 동작이 아니라 다양한 정책을 확인하는 복잡한 전처리를 필요로 한다고 고려했음
graph LR
    BROWSER[Browser] -->|메시지 전송| API[API 서버]
    BROWSER -.->|WebSocket 연결| CHANNEL[채널 서버]
    
    INTERNAL[Internal Client<br/>다른 도메인 서버] -->|Internal API| API
    
    API -->|이벤트 발행| KAFKA[Kafka]
    API --> DB[(DB)]
    
    KAFKA -->|이벤트 구독| WORKER[워커]
    KAFKA -->|이벤트 구독| CHANNEL
    
    WORKER -->|이벤트 발행| KAFKA
    WORKER --> DB
    CHANNEL -.->|메시지 푸시| BROWSER
Loading

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions