가상 면접 사례로 배우는 대규모 시스템 설계 기초 | 알렉스 쉬 - 교보문고
가상 면접 사례로 배우는 대규모 시스템 설계 기초 | 페이스북의 뉴스 피드나 메신저,유튜브, 구글 드라이브 같은 대규모 시스템은 어떻게 설계할까? IT 경력자라도 느닷없이 대규모 시스템을 설
product.kyobobook.co.kr
11장, 뉴스 피드 시스템 설계
- 문제 이해 및 설계 범위 확정
- 웹/앱 둘 다 지원해야 함
- 중요 기능
- 사용자는 뉴스 피드 페이지에 새로운 스토리를 올릴 수 있어야 함
- 친구들이 올리는 스토리도 볼 수 있어야 함
- 뉴스 피드에는 시간 흐름 역순으로 스토리가 표시
- 한 명의 사용자는 최대 5,000명의 친구를 가질 수 있음
- 트래픽 규모는 매일 천만 명
- 스토리에는 이미지나 비디오 등의 미디어 파일이 포함될 수 있음
- 개략적 설계안 제시 및 동의 구하기
- 뉴스 피드 API
- 클라이언트가 서버와 통신하기 위해 사용하는 수단
- HTTP 프로토콜 기반
- 상태 정보를 업데이트하거나, 뉴스 피드를 가져오거나, 친구를 추가하는 등 다양한 작업 수행
- 피드 발행 API
- 새 스토리를 포스팅하기 위한 API
- HTTP POST 형태로 요청
- POST /v1/me/feed
- 피드 읽기 API
- 뉴스 피드를 가져오는 API
- HTTP GET 형태로 요청
- GET /v1/me/feed
- 뉴스 피드 API
- 상세 설계
- 웹 서버
- 클라이언트와 통신할 뿐 아니라 인증이나 처리율 제한 등의 기능도 수행
- 올바른 인증 토큰을 Authorization 헤더에 넣고 API를 호출하는 사용자만 포스팅할 수 있어야 한다.
- 스팸을 막고 유해한 콘텐츠가 자주 올라오는 것을 방지하기 위해 특정 기간 동안 한 사용자가 올릴 수 있는 포스팅의 수에 제한을 두어야 한다.
- 포스팅 전송(팬 아웃) 서비스
- 어떤 사용자의 새 포스팅을 그 사용자와 친구 관계에 있는 모든 사용자에게 전달하는 과정
- 팬 아웃에는 두가지 모델이 있는데 하나는 쓰기 시점에 팬아웃하는 모델이고, 다른 하나는 읽기 시점에 팬아웃 하는 모델이다.
- 쓰기 시점에 팬 아웃하는 모델 (Push 모델)
- 새로운 포스팅을 기록하는 시점에 뉴스 피드를 갱신
- 포스팅이 완료되면 바로 해당 사용자의 캐시에 해당 포스팅을 기록
- 장점
- 뉴스 피드가 실시간으로 갱신
- 친구 목록에 있는 사용자에게 즉시 전송
- 새 포스팅이 기록되는 순간 뉴스 피드가 이미 갱신되므로 뉴스 피드를 읽는 데 드는 시간이 짧아짐
- 단점
- 친구가 많은 사용자의 경우 친구 목록을 가져오고 그 목록에 있는 사용자 모두의 뉴스 피드를 갱신하는 데 많은 시간이 소요될 수도 있다. (핫키 문제)
- 서비스를 자주 이용하지 않는 사용자의 피드까지 갱신해야 하므로 컴퓨팅 자원이 낭비
- 읽기 시점에 팬 아웃하는 모델 (Pull 모델)
- 피드를 읽어야 하는 시점에 뉴스 피드를 갱신
- 요청 기반 모델 (On-demand)
- 사용자가 본인 홈페이지나 타임 라인을 로딩하는 시점에 새로운 포스트를 가져온다
- 장점
- 비활성화된 사용자, 또는 서비스에 거의 로그인하지 않는 사용자의 경우에는 이 모델이 유리
- 로그인하기까지는 어떤 컴퓨팅 자원도 소모하지 않는다.
- 데이터를 친구에 각각 푸시하는 작업이 필요 없으므로 핫키 문제도 생기지 않는다.
- 단점
- 뉴스 피드를 읽는 데 많은 시간이 소요될 수 있다.
- 이번 장에서는 두 가지 방법을 결합하여 장점은 취하고 단점은 버리는 전략을 취한다.
- 뉴스 피드를 빠르게 가져오는 것은 아주 중요하므로 대부분 푸시 모델을 사용한다. 친구나 팔로어가 아주 많은 사용자의 경우 팔로어로 하여금 해당 사용자의 포스팅을 필요할 때 가져가도록 하는 풀 모델을 사용하여 시스템 과부하를 방지할 수 있다.
- 아울러 안정 해시를 통해 요청과 데이터를 보다 고르게 분산하여 핫키 문제를 줄여볼 것이다.
- 웹 서버
- 느낀 점
- 캐시를 필요에 따라 여러 계층으로 나누어 활용할 수 있음
- Push-Pull 모델을 필요에 따라 결합하여 핫키 문제를 방지하고 두 전략의 장점만을 가져올 수 있음
'개발 이야기 (Dev Story)' 카테고리의 다른 글
"가상 면접 사례로 배우는 대규모 시스템 설계 기초"를 읽고 - 10장 (2) | 2024.05.11 |
---|---|
"가상 면접 사례로 배우는 대규모 시스템 설계 기초"를 읽고 - 7장 (0) | 2024.05.11 |
"가상 면접 사례로 배우는 대규모 시스템 설계 기초"를 읽고 - 6장 (0) | 2024.05.11 |
"가상 면접 사례로 배우는 대규모 시스템 설계 기초"를 읽고 - 4장 (0) | 2024.05.11 |
[아키텍처 패턴] 레이어 패턴 (Layered Pattern) (0) | 2024.05.10 |