가상면접으로 배우는 대규모 시스템 설계 기초
11장 뉴스 피드 시스템 설계
피드 발행 : 피드를 생성하면 데이터 베이스에 저장하고 새 포스팅은 친구들의 뉴스피드에도 전송 된다
뉴스 피드 생성 : 모든 친구의 포스팅을 시간 흐름 역순으로 모아서 만든다
팬아웃 : 어떤 사용자의 새 포스팅을 그 사용자와 친구관계에 있는 모든 사용자에게 전달하는 과정
쓰기 시점 팬아웃(push 모델)
- 장점
- 실시간 갱신
- 뉴스피드가 실시간 갱신되서 읽는 데 드는 시간이 짧아 진다
- 단점
- 친구가 많으면 뉴스피드 갱신시간이 오래 걸린다(핫키 문제)
- 서비스를 자주 사용하지 않는 사용자까지 갱신시켜 자원이 낭비
- 장점
읽기 시점 팬아웃(poll 모델)
- 장점
- 비활성화 사용자, 서비스의 거의 로그인하지 않는 사용자에겐 이방법이 유리하다
- 핫키 문제가 발생하지 않는다
- 단점
- 뉴스 피드를 읽는 데 많은 시간이 소요된다
- 장점
캐시 구조
- 뉴스피드
- 콘텐츠
- 소셜그래프
- 행동
- 횟수
데이터베이스 규모 확장
수직적 규모 확장 vs 수평적 규모 확장
SQL vs NOSQL
주-부(master-slave) 다중화
복제본(replica)에 대한 읽기 연산
일관성 모델
데이터베이스 샤딩
웹 계층 무상태로 운영하기
가능한 많은 데이터를 캐시 할 방법
여러 데이터 센터를 지원할 방법
메시지 큐를 사용해서 컴포넌트간의 결합도 낮추기
핵심 메트릭에 대한 모니터링
- QPS
- 지연시간