뉴스 피드를 설계하세요 — 유명 사용자까지 버티게
지금 설계는 이렇습니다. 글쓰기 API가 팔로워들의 피드에 그 자리에서 직접 씁니다. 그리고 피드 조회 API도 데이터베이스를 직접 읽습니다.
이 과제에는 시나리오가 두 개 있고, 둘 다 통과해야 합니다.
| 시나리오 | 글쓰기 | 피드 조회 |
|---|
| 일반 사용자 (팔로워 200명) | 초당 8건 | 초당 120건 |
| 유명 사용자 (팔로워 500만 명) | 초당 50건 | 초당 120건 |
유명 사용자 시나리오의 초당 50건은 그 사람이 초당 50번 글을 쓴다는 뜻이 아닙니다. 글 한 줄이 내부에서 수백만 건의 뿌리기 작업으로 증폭된 상태를 표현한 것입니다. 이것이 바로 동기 팬아웃의 실제 모습입니다.
일반 사용자만 보고 만든 설계는 유명 사용자 시나리오에서 반드시 무너집니다. 그게 이 과제의 요점입니다.
캔버스에는 이미 팬아웃 큐와 팬아웃 워커 1이 놓여 있지만, 글쓰기 API가 그 길을 쓰지 않고 데이터베이스로 직행하고 있습니다.
풀어야 할 것 세 가지
- 글쓰기가 데이터베이스를 직접 붙잡지 못하게 하세요. 뿌리기는 사용자를
기다리게 할 이유가 없습니다.
- 피드 조회가 매번 데이터베이스까지 가지 못하게 하세요. 모두가 비슷한 것을
읽습니다.
- 유명 사용자의 폭발을 뒤에서 감당할 만큼 뿌리는 사람을 두세요.
워커 한 대로는 초당 50건을 따라가지 못합니다. 큐는 600자리뿐이고, 넘치면 글이 사라집니다.
합격 조건 (두 시나리오 모두)
- 응답 95%가 500밀리초 이내
- 유실률 2% 미만
- 팬아웃 큐 적체가 300건 미만 (밀려도 한계 안에)
- 캐시가 실제로 적중해서 데이터베이스 호출을 막을 것
트래픽을 실행해 무엇이 깨지는지 먼저 확인한 다음, 설계를 고치고 검사하세요.
설정
컴포넌트를 선택하면 처리 용량이나 동작 방식을 바꿀 수 있습니다.