떵호
seongho'Dev
떵호
전체 방문자
오늘
어제
  • 분류 전체보기 (116)
    • 회고 (2)
    • Algorithm (74)
      • 프로그래머스 (65)
      • 백준(BOJ) (2)
      • Note (7)
    • 기술독서 (25)
      • Clean Code (11)
      • 자바의 정석 (8)
      • 대규모 시스템 설계 기초 (6)
    • Computer Science (1)
      • Operating System (1)
    • Typescript (1)
    • JAVA (0)
    • Spring (6)
      • JPA (6)
    • AWS (2)
    • Git (2)
    • Etc (2)

블로그 메뉴

  • github

티스토리

태그

  • 구현
  • 프로그래머스
  • 완전탐색
  • 클린코드
  • 코딩테스트 준비
  • 알고리즘
  • Clean Code
  • 카카오 코테
  • 자바의 정석
  • JPA
hELLO · Designed By 정상우.
떵호

seongho'Dev

[대규모 시스템 설계 기초] 11장 - 뉴스 피드 시스템 설계
기술독서/대규모 시스템 설계 기초

[대규모 시스템 설계 기초] 11장 - 뉴스 피드 시스템 설계

2024. 3. 20. 22:20
728x90

11장은 뉴스 피드(news feed) 설계에 대해 다룬다.

뉴스 피드란?
사용자에게 자주 업데이트되는 콘텐츠를 제공하는 데 쓰이는 데이터 포맷이다. 콘텐츠 배포자들은 웹 피드를 중개함으로써 사용자들이 이들을 구독할 수 있게 한다.
출처 - 위키피디아

 

요구사항 예시

  1. 모바일 앱, 웹 모두 지원
  2. 사용자가 업로드한 스토리 및 친구들이 올리는 스토리를 볼 수 있어야 함
  3. 피드는 최근 순으로 정렬
  4. 사용자는 5천 명의 친구를 맺을 수 있음
  5. 10M의 DAU를 가짐
  6. 피드는 이미지, 비디오 모두 포함

개략적 설계

뉴스 피드는 피드 발행(feed publishing), 피드 생성(feed building) 두 가지 부분으로 나뉘어 있다.

  • 피드 발행: 사용자가 스토리를 포스팅하면 해당 데이터를 cache와 DB에 기록한다. 이때 친구의 뉴스 피드에도 전송된다.
  • 피드 생성: 모든 친구의 포스팅을 최신 순으로 모아서 만든다고 가정한다.

뉴스 피드 API

뉴스 피드 API는 클라이언트가 서버와 통신하기 위해 사용하는 수단이다.

 

피드 발행 API

스토리를 포스팅하기 위한 API

 

POST /v1/me/feed

  • body: posting 내용
  • Authorization 헤더: API 호출 인증

피드 발행 개략적 아키텍처

피드 생성 API
뉴스 피드를 가져오는 API

GET /v1/me/feed

  • Authorization 헤더: API 호출 인증

피드 생성 개략적 아키텍처


상세 설계

피드 발생 흐름 상세 설계

피드 읽기 상세 아키텍처

팬아웃 서비스

팬아웃(fanout) 서비스는 어떤 사용자의 새 포스팅을 사용자와 친구 관계에 있는 모든 사용자게 전달하는 과정이다.

 

팬아웃은 쓰기 모델(push model)과 읽기 모델(pull model)로 나눌 수 있다.

 

push model(pre-computing)
새로운 포스팅을 기록하는 시점에 뉴스 피드 갱신한다.

  • 장점
    • 피드가 실시간으로 갱신되므로 피드 read 시간이 짧아진다.
  • 단점
    • 친구가 많은 사용자의 경우 hotkey 문제가 발생한다.
    • 서비스를 자주 사용하지 않는 사용자의 피드도 갱신하므로 리소스 낭비가 발생한다.

최근에 사전 과제에 뉴스 피드 구현 요구사항이 있었는데, 복기를 해보면 push model을 사용하여 뉴스 피드를 구현하는 요구사항이었던 것 같다.

pull model(on-demand)
사용자가 피드를 읽을 때 뉴스 피드 갱신한다.

  • 장점
    • 서비스를 자주 사용하지 않는 사용자의 피드를 갱신하지 않으므로 리소스 낭비가 덜 발생한다.
    • 피드를 push 하지 않기 때문에 hotkey 문제가 발생하지 않는다.
  • 단점
    • 피드를 읽는데 많은 시간이 소요될 수 있다.

AWS 교육 때 피드 키 모델링에 대한 교육을 받으면서 피드에 대한 내용이 언급되었다. 그때 트위터 예시를 들면서 피드를 갱신하는 시간은 크게 문제가 되지 않는다고 들었는데, pull model에 대한 것을 말한 것 같다.
실제 트위터와 메타의 서비스를 보면 push mdoel과 pull model 모두 병행하여 사용하는 것 같다.

피드 읽기 흐름 상세 설계

캐시 구조
캐시는 뉴스 피드 시스템의 핵심 컴포넌트다.

  • 뉴스 피드: 뉴스 피드 ID 보관
  • 콘텐츠: 포스팅 데이터 보관, 인기 콘텐츠는 따로 보관
  • 소셜 그래프: 사용자 간 관계 정보 보관
  • 행동: 포스팅에 대한 사용자 행위 정보 보관
  • 횟수: 좋아요, 응답, 팔로어와 같은 카운트 정보 보관
728x90
저작자표시 (새창열림)

'기술독서 > 대규모 시스템 설계 기초' 카테고리의 다른 글

[대규모 시스템 설계 기초] 14장 - 유튜브 설계  (1) 2024.04.28
[대규모 시스템 설계 기초] 13장 - 검색어 자동완성 시스템 설계  (0) 2024.04.24
[대규모 시스템 설계 기초] 12장 - 채팅 시스템 설계  (1) 2024.03.28
[대규모 시스템 설계 기초] 10장 - 알림 시스템 설계  (1) 2024.03.15
[대규모 시스템 설계 기초] 9장 웹 크롤러 설계  (0) 2024.03.06
    '기술독서/대규모 시스템 설계 기초' 카테고리의 다른 글
    • [대규모 시스템 설계 기초] 13장 - 검색어 자동완성 시스템 설계
    • [대규모 시스템 설계 기초] 12장 - 채팅 시스템 설계
    • [대규모 시스템 설계 기초] 10장 - 알림 시스템 설계
    • [대규모 시스템 설계 기초] 9장 웹 크롤러 설계
    떵호
    떵호

    티스토리툴바