BackEnd

Timline 읽어오는법 ( pull/push Model )

Raconer 2024. 2. 3. 15:30
728x90

TimeLine

Follow 같은 구조일 경우 Follow 된 User의 Post 까지 가져오는 2가지 방식을 설명

1. Pull Model(Fan Out On Read)

  • 시간 복잡도
    • log(Follow 전체 레코드) + 해당회원의 Following * log(Post 전체 레코드)
  • 단점
    • 사용자가 매번 홈에 접속할때마다 부하가 발생한다.(사용자 Follow를 매번 OR 조건으로 검색해야 한다.)
  • 사용 하는 업체 : FaceBook
    • 기술적 한계 로 인한 정책
      • Facebook에서 최대 5000명의 친구를 보유할수 있습니다. 5000명 이상의 사람들과 연결해야 하는 경우 개인 계정을 Facebook 페이지로 변경하세요. 다른 친구 요청을 보내려면 먼저 누군가와 친구 관계를 끊어야 합니다.

2. Push Model (Fan Out On Write)

  • 핵심 개념
    • 게시물 작성시, 해당 회원을 팔로우 하는 회원들에게 데이터를 배달한다.
    • 타임라인 테이블을 추가 하여 MemberId, PostId 컬럼으로 만든다. (MemberId로 만 검색 하면된다.)
  • 사용 업체 : Twitter
    • 기술적 한계 로 인한 정책
      • 일일 한도 외에도 특정한 개수의 계정을 팔로잉할 때 적용이 되는 팔로우율이 있습니다. 모든 트위터 계쩡이 최대 5000개의 계정을 팔로우 할 수 있습니다. 이 한도에 도달 했다면 내 계정을 팔로우 하는 사람들이 늘어 날 떄가지 기다려야 추가로 계정을 팔로우 할수 있습니다. 이숫자는 계정마다 다르며 팔로워와 팔로잉의 고유한 비율을 기반으로 자동 계산됩니다.

Pull/Push Model 간의 차이점

홈에 "접속"할때마다 생기는 부하(Pull Model)를 글을 "작성"할때 부하(Push Model)로 치환한다.

질문

  1. 질문 Push Model VS Pull Model 중 어떤 것이 정합성을 보장하기 쉬울까?

Pull Model 은 원본 데이터를 직접 참조 하므로, 정합성 보장에 유리하지만 Follow 가 많은 회원일수록 처리 속도가 느리다.
Push Model에서는 게시물 작성과 타임라인 배달의 적합성 보장에 대한 고민이 필요한다.

  1. 질문.2 모든 회원의 타임라인에 배달되기 전까지 게시물 작성의 트랜잭션을 유지 하는 것이 맞을까?

CAP 이론을 참고 하면 좋다.
Push Model은 Pull Model에 비해 시스템 복잡도가 높다. 하지만 그만큼 비즈니스, 기술 측면에서 유연성을 확보 시켜 준다.
결국 은총알은 없다. 상황, 자원, 정책 등 여러가지를 고려해 트레이드 오프 해야 한다.

728x90