인스타그램 피드 설계

Gunjoo Ahn·2022년 10월 25일
0

유저들이 게시글을 올렸을 때, 팔로워들이 해당 게시글을 뉴스피드로 조회하는 상황을 고려해보자. 해당 상황에 필요한 시스템 설계는 무엇일까?

두 가지에 대하여 고려해야 하는데,

  1. 일반적인 뉴스 피드
  2. 유명인일 때는?

기본적으로 뉴스 피드 시스템을 설계해야한다. 뉴스 피드 시스템이란 어떤 유저가 포스팅을 하면 팔로우한 유저가 해당 포스팅을 뉴스 피스로 보통 시간 흐름의 역순으로 모아 보는 시스템이다.

  1. 피드 발행
  2. 뉴스 피스 생성

따라서 뉴스 피드 시스템은 위 두 가지로 나누어 설계할 수 있다.

피드 발행

서비스로 세 서비스가 필요하다. 포스팅 저장 서비스, 포스팅 전송 서비스, 알림 서비스가 필요하다. 포스팅 저장 서비스는 새 포스팅을 데이터 베이스에 저장하고, 새 포스팅을 조회 확률이 높으니 캐시에도 저장한다. 포스팅 전송 서비스는 새 포스팅을 팔로워의 뉴스 피드에 메시지 큐같은 곳에 푸시하는 것이다.

뉴스 피드 생성

피드 발행시 저장된 뉴스 피드를 가져와서 뉴스 피드를 보여주고 뉴스 피드 캐시에 저장한다.

피드 Push? Pull?

피드를 팔로워에게 보낸다는 것까지는 push와 pull 모두 똑같다. 하지만 팔로워가 읽기 전에 캐시를 갱신하느냐 읽는 시점에 갱신하느냐의 차이이다. 각 방법에 장단점이 있는데 가장 크게 느껴지는 부분은 팔로워가 많은 유명인일 경우이다. 유명인일 경우 팔로워에게 포스팅을 전송할때 팔로워의 뉴스 피드 캐시까지 갱신하도록 하면 많은 시간이 소요될 것이다(핫키 문제). 따라서 대부분의 사용자는 푸시 모델을 사용하고 유명인에 대해서만 풀 모델을 사용하여 시스템 과부하를 방지할 수 있다. 아울러 안정 해시를 통해 요청과 데이터를 보다 고르게 분산하여 핫키 문제를 줄일 수 있다.

안정 해시는 해시 테이블 크기가 조정될 때 평균적으로 오직 k/n개의 키만 재배치하는 해시 기술이다. 여기서 k는 키의 개수이고, n은 슬롯의 개수다. 이와는 달리 대부분의 전통적 해시 테이블은 슬롯의 수가 바뀌면 거의 대부분의 키를 재배치한다. - 위키피디아

Reference

가상 면접 사례로 배우는 대규모 시스템 설계 기초 11장

profile
Backend Developer

0개의 댓글