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://seongho96.tistory.com/117
https://velog.io/@akfls221/실무에서-확인한-FAN-OUT과-대규모-트레픽에서의-FAN-OUT
'CS 기본 지식' 카테고리의 다른 글
개발 - 디자인 패턴 (0) | 2023.05.23 |
---|---|
백엔드, 프론트 서버를 연결할 때: 'CORS' 문제 및 해결법 (0) | 2023.03.20 |
웹서버와 WAS, 포워드 프록시, 리버스 프록시 (0) | 2023.01.16 |
URL과 URI 의 차이 (0) | 2022.02.22 |