정기간행물/daily

뉴스 피드 시스템 설계 (대시설기)

:)jun 2023. 10. 2. 23:55

뉴스 피드는 홈 페이지 중앙에 지속적으로 업데이트되는 스토리이다. (페이스북, 인스타그램 피드 설계)

1단계 문제 이해 및 설계 범위 확정

  • 앱, 웹 모두 지원
  • 새로운 스토리를 올리고, 친구들이 올리는 스토리를 볼 수도 있다.
  • 시간 흐름 역순
  • 한 사용자는 5천명의 친구를 가질 수 있다.
  • 매일 천만 명이 방문 (10million DAU)
  • 이미지나 비디오 등 미디어 파일이 포함될 수 있다.

2단계 개략적 설계안 제시 및 동의 구하기

  1. 피드 발행: 스토리를 포스팅하면 해당 데이터를 캐시와 DB에 기록한다.
  2. 뉴스 피드 생성: 모든 친구의 포스팅을 시간 흐름 역순으로 모아서 만든다.

뉴스 피드 API

피드 발행 API

새 스토리를 포스팅하기 위한 API다.

피드 읽기 API

뉴스 피드를 가져오는 API다.

피드 발행

  • 사용자: 새 포스팅을 올리는 주체
  • 로드밸런서
  • 웹 서버
  • 포스팅 저장 서비스: 새 포스팅을 DB와 캐시에 저장한다.
  • 포스팅 전송 서비스: 새 포스팅을 친구의 뉴스 피드에 푸시한다. 뉴스 피드 데이터는 캐시에 보관하여 빠르게 읽어갈 수 있도록 한다.
  • 알림 서비스: 친구들에게 새 포스팅이 올라왔음을 알리거나, 푸시 알림을 보내는 역할

뉴스 피드 생성

  • 사용자: 뉴스 피드를 읽는 주체
  • 로드 밸런서
  • 웹 서버
  • 뉴스 피드 서비스: 캐시에서 뉴스 피드를 가져오는 서비스
  • 뉴스 피드 캐시: 뉴스 피드를 렌더링할 때 필요한 피드 ID를 보관한다.

3단계 상세 설계

피드 발행 흐름 상세 설계

웹 서버

클라이언트와 통신, 인증, 처리율 제한 기능 수행

포스팅 전송(fanout) 서비스

어떤 사용자의 새 포스팅을 그 사용자와 친구 관계에 있는 모든 사용자에게 전달하는 과정이다.

2가지 모델

  1. 쓰기 시점 팬아웃 (fanout-on-write, push)
  2. 읽기 시점 팬아웃 (fanout-on-read, pull)

캐시 구조

뉴스 피드 시스템의 핵심 컴포넌트다.

  • 뉴스 피드: 뉴스 피드의 ID 보관
  • 콘텐츠: 포스팅 데이터를 보관한다.
  • 소셜 그래프: 사용자 간 관계 정보를 보관한다.
  • 행동: 포스팅에 대한 사용자의 행위에 관한 정보를 보관한다.
  • 횟수: 좋아요 횟수, 응답 수, 팔로어 수, 팔로잉 수 등의 정보를 보관한다.

'정기간행물 > daily' 카테고리의 다른 글

채팅 시스템 설계 (대시설기)  (0) 2023.10.07
검색어 자동완성 시스템 (대시설기)  (1) 2023.10.04
알림 시스템 설계  (0) 2023.09.29
웹 크롤러 설계 (대시설기)  (0) 2023.09.28
Chain of Responsibility  (0) 2023.09.26