Fan Out On Read (Pull Model)
웹 서비스를 예시로 들며 Fan Out On Read 모델에 대해 알아봅시다
푸시 모델이라고도 하는 Fan Out On Read는 게시물 작성 시 팔로워의 타임라인에 게시물을 즉시 전달하여 실시간 업데이트를 보장하기 위해 소셜 미디어 시스템에서 사용되는 전략입니다.
이 접근 방식은 즉각적인 데이터 일관성을 우선시하여 팔로워가 지체 없이 최신 게시물을 받을 수 있도록 합니다.
Fan Out On Read에는 몇가지 특징이 있습니다
- 즉시 전달
- Fan Out On Read를 사용하면 게시물이 생성되는 즉시 팔로워의 타임라인에 즉시 전달됩니다.
- 게시물 작성과 팔로워의 타임라인에 표시되는 사이에는 지연이 없습니다.
- Read Latency 증가
- 시스템이 포스트 데이터를 여러 타임라인에 동시에 전달해야 하므로 다른 모델에 비해 Read Latency가 다소 길어질 수 있습니다.
- 모든 팔로워의 타임라인을 업데이트하는 데 필요한 시간은 시스템의 전반적인 성능에 영향을 미칠 수 있습니다.
즉 대용량 시스템 아키텍처에서 Fan Out On Read는 읽기와 쓰기에서 읽기 성능을 저하 시키는 트레이드를 하였습니다
흐름으로 이해해봅시다
위와 같은 테이블이 있다고 가정합시다.
각 유저들이 접숙하면 자신이 팔로우한 유저들의 Post를 보게 될 것입니다.
1번 유저가 웹 서비스에 로그인 한 상황입니다
이 때, 자신의 팔로우를 조회하고, 팔로워의 Post를 조회하게 됩니다
이렇게 되면, 시간 복잡도가 상승하는 것을 우리 모두 알게 됩니다.
log(Follow 전체 레코드) + 해당회원의 Following * log(Post 전체 레코드)
위의 시간 복잡도가 발생한 이유는 일단 to의 조건이 or이기 때문입니다. 따라서 끔직한 시간 복잡도가 발생하게 되었죠
서비스로 따지면, 쿼리를 자주 날리는 유저일수록, 충성도가 높은 유저일 것입니다.
그런데 충성된 유저일수록 더 느린 사용자 경험을 하게 되는 기이한…? 상황이 연출 되는 것이죠
부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>
728x90
'DEV > Backend' 카테고리의 다른 글
트랜잭션 격리레벨 (0) | 2023.06.10 |
---|---|
트랜잭션(Transaction) (0) | 2023.06.10 |
Fan Out On Write (Push Model) (0) | 2023.06.09 |
커버링 인덱스 (0) | 2023.06.09 |
커서 기반 페이지네이션 (0) | 2023.06.09 |