Search
Duplicate
📒

[Database Study] 02-3. Fan-out 구조(피드 시스템)

상태
미진행
수업
Database Study
주제
연관 노트
3 more properties
참고

피드 시스템 설계

NOTE
피드 시스템이란 지속적으로 업데이트되는 스토리들로, 페이스북, 인스타그램, 트위터 타임라인 등을 예시로 들 수 있다.
Fan-out → Input이 들어올때 여러 개의 task로 분산되서 나감 Fan-in → task가 하나로 취합하는 merge를 거친다.
어떤 사용자의 새 포스팅을 그 사용자와 친구 관계에 있는 모든 사용자에게 전달한다.
⇒ 팬 아웃 서비스
팬 아웃에는 2가지 모델이 존재한다.
Push 모델(쓰기 시점에 팬아웃 한다)
Pull 모델(읽기 시점에 팬아웃 한다)

Fan-out read(Pull 모델)

NOTE
피드를 읽어야 하는 시점에 뉴스 피드를 갱신한다!
피드를 읽을 때 1번 유저가 팔로우한 회원의 Post를 조회한다.

장점

비활성화된 사용자, 또는 서비스를 거의 사용하지 않는 사용자의 경우에는 로그인하기까지에는 어떤 자원도 소모하지 않는다.

단점

뉴스 피드를 읽는데 많은 시간이 소요된다.

Fan-out write(Push 모델)

NOTE
새로운 포스팅을 기록하는 시점에 뉴스 피드를 갱신하게 된다!
Post를 쓰는시점에 피드를 갱신한다.

장점

뉴스 피드가 실시간으로 갱신되며 친구 목록에 있는 사용자에게 즉시 전송된다.
뉴스 피드를 읽는 시간이 줄어 든다.

단점

친구가 많은 사용자의 경우 친구 목록을 가져오고 그 목록에 있는 모두의 뉴스 피드를 갱신하는데 많은 시간이 걸릴 수 있다.
서비스를 자주 사용하지 않는 Cold존의 사용자 피드까지 갱신하므로 컴퓨팅 자원이 낭비된다.

정합성과 성능

NOTE

Push 모델 (twitter)

공간 복잡도를 희생 (인덱스)
게시물 작성과 타임라인 배달의 정합성 보장에 대한 고민이 필요하다.
Pull 모델이 비해 시스템 복잡도가 높다

Pull 모델 (facebook)

시간 복잡도를 희생 (검색 시간)
원본 데이터를 직접 참조하므로, 정합성 보장에 유리하다.
하지만 Follow가 많은 회원일수록 처리속도가 느리다.