본문 바로가기
CS 기본 지식

Fanout Service(포스팅 전송 서비스)에서 Push 모델(fanout-on-write)과 Pull(fanout-on-read) 모델 비교

by khds 2021. 11. 23.

 

Fanout Service(포스팅 전송 서비스): 어떤 사용자의 새 포스팅을 그 사용자와 친구 관계에 있는 모든 사용자에게 전달하는 과정을 fanout이라고 부른다.

fanout에는 두가지 모델이 있다.

  • fanout-on-write (Push 모델)
  • fanout-on-read(Pull 모델)

 

 

1. Push 모델( fanout-on-write )

새로운 포스팅이 기록되는 시점에 뉴스 피드를 갱신한다. 즉 포스팅 완료시 연관된 친구들의 뉴스피드 캐시를 갱신한다.

장점: 뉴스 피드가 실시간 갱신되며 친구 목록에 있는 사용자에게 즉시 전송이되어, 뉴스 피드를 읽는데 드는 시간이 짧아진다. 기록되는 순간에 뉴스피드가 이미 갱신되었기 때문이다.

단점: 친구가 많은 사용자의 경우 친구 목록을 가져오고 그 목록에 있는 모든 친구들의 뉴스 피드를 갱신하는데 많은 시간이 소요 될 수 있다.

hotkey 문제: 서비스를 자주 이용하지 않는 사용자의 피드를 갱신함으로 컴퓨팅 자원 낭비가 일어날 수 있다.

 

2. Pull 모델(fanout-on-read)

피드를 읽어야 하는 시점에 뉴스 피드를 생성한다.

장점: 비활성화된 사용자 또는 거의 사용하지 않는 사용자의 경우에 유리하다. 사전에 친구들에게 전송하는 데이터 푸시 작업이 없기 때문에, 읽기 전까지 컴퓨팅 자원이 소모되지 않음으로 hotkey문제도 없다. 

단점: 뉴스 피드를 읽는 데 많은 시간이 소요될 수 있다.

 

두 모델의 장, 단점을 확인하여 두 모델을 혼합하여 사용할 수 있다.

유명인(follwers가 많은 사용자(=인기인))을 제외한 사용자에 대해서는 push 모델을 사용한다. 하지만 유명인들의 posts는 followers가 읽을 때 pull 모델로 가져가서 news feed를 생성한다. 

 

 

참고

https://berom.tistory.com/316

 

Fan Out On Write (Push Model)

Fan Out On Write (Push Model) Fan Out On Read (Pull Model)로 설명을 하면, 게시물 작성 할 때 , 해당 회원을 팔로우하는 회원들에게 데이터를 배달하는 것입니다 일종의 인덱스? 역할을 하는 Timeline 테이블을

berom.tistory.com

https://seongho96.tistory.com/117

 

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

11장은 뉴스 피드(news feed) 설계에 대해 다룬다. 뉴스 피드란? 사용자에게 자주 업데이트되는 콘텐츠를 제공하는 데 쓰이는 데이터 포맷이다. 콘텐츠 배포자들은 웹 피드를 중개함으로써 사용자

seongho96.tistory.com

https://velog.io/@akfls221/실무에서-확인한-FAN-OUT과-대규모-트레픽에서의-FAN-OUT

 

실무에서 확인한 FAN-OUT과 대규모 트레픽에서의 FAN-OUT

실무에서의 경험으로 배운 FAN-OUT과 트위터의 FAN-OUT

velog.io