설계 경계: hot 작성자의 기준은 팔로워 수 하나가 아니라 최근 fan-out write, queue lag, 활성 독자, timeline cache hit을 함께 보는 정책입니다. 전환 중에는 두 경로가 겹칠 수 있으므로 read-time post_id 중복 제거가 필요합니다.
03 · WRITE / READ FLOW
쓰기에는 후보를, 읽기에는 정책과 순위를 둔다
# 흐름
1원자적 post + outbox
작성 ACK 전에 post 정본과 전파 이벤트가 함께 기록되어 유실 창을 줄입니다.
2일반 write fan-out
follower 배치에 post ID를 멱등 upsert해 개인 inbox 후보를 만듭니다.
3hot read fan-out
수백만 inbox write 대신 author timeline 하나를 기록해 읽을 때만 합칩니다.
4권한·철회 필터
block, mute, audience, 삭제, tombstone을 ranker 앞에서 제거합니다.
5랭킹과 cursor
신선도·관계 feature로 정렬하고 세션 안정성을 위한 snapshot cursor를 돌려줍니다.
04 · TRADEOFFS
평균이 아니라 긴 꼬리와 철회 비용을 비교한다
# 트레이드오프
fan-out 전략은 랭킹 여부와 별개입니다. 어떤 전략이든 후보는 중복될 수 있고, 삭제·차단·공개 범위 변경은 최종 노출 전에 확인해야 합니다.
선택
강점
제약
적용 판단
fan-out on write
개인 inbox 읽기가 빠르고 단순
팔로워 수만큼 queue·저장 write가 증가
일반 작성자, 높은 읽기 빈도
fan-out on read
post는 한 번 기록, write 폭발 방지
feed 열기 때 timeline 병합·hydrate 비용
매우 큰 follower를 가진 hot 작성자
hybrid
긴 꼬리 비용을 제한
경계, 이행, dedupe, 관측이 복잡
팔로워 분포가 크게 치우친 서비스
시간순 fallback
설명·복구·디버깅이 쉬움
관련성·다양성 최적화가 제한
ranker 장애, 초기 제품
inbox에 post ID
삭제·수정·privacy를 정본에서 확인
read-time hydrate 필요
철회 요구가 중요한 피드
05 · FAILURE MODES
지연·중복·철회를 측정 가능한 복구 절차로 만든다
# 장애 6가지
≋fan-out 큐 적체
새 post가 follower inbox에 늦어져 작성 시각과 노출 시각이 크게 벌어집니다.
대응 · consumer 확장, 배치 축소, hot 정책 전환. post-to-inbox delay가 SLA 안인지 검증합니다.
◉hot 작성자 폭주
한 post가 수백만 inbox write를 만들어 일반 작성자까지 밀어냅니다.
대응 · dynamic read fan-out, 전용 quota와 cache. 일반 writer lag 회복을 확인합니다.
홈 피드 범위, 시간순/랭킹, 최대 팔로워 수, 삭제·차단 SLA, 광고·추천 포함 여부를 먼저 확인한다.
post·graph·feed inbox를 정본과 파생 데이터로 구분하고, post 저장과 outbox 기록을 원자화한다.
일반 작성자에는 fan-out on write, hot 작성자에는 fan-out on read를 쓰는 hybrid 정책과 그 경계의 관측 지표를 설명한다.
읽기에서 inbox·timeline 후보를 합치고 권한·삭제 필터를 ranker보다 먼저 적용한다고 말한다.
큐 적체, hot user, 중복, ranker 장애, 삭제/privacy 철회 지연, graph 실패를 감지·대응·복구 검증까지 연결한다.
마지막으로 revoke_to_hide_seconds, fan-out lag, candidate shortage, fallback ratio, 비용과 feature privacy를 운영 지표로 제시한다. 이번 선택: hot 전환과 롤백에 서로 다른 임계값과 유지 시간을 둔다. 깨지는 신호: 정책이 경계에서 반복 전환되거나 두 source 병합에서 duplicate·gap이 늘어난다. 다음 검증: 9,000 writes/s 버스트 뒤 backlog drain과 800/s 롤백을 순서대로 재현한다.