대용량 바이트는 값싸고 오래 보관하되, bucket·key·version·권한·삭제는 예측 가능하게 다룹니다. 핵심은 metadata의 publish 경계와 data plane의 내구성 경계를 혼동하지 않는 것입니다.
시스템 디자인 아틀라스·사례 연구·제품 사실과 설계 가정을 구분
개념 이해요구사항장애 대응진도 저장
◫30초 핵심 요약
객체의 현재 이름과 version은 조건부 mutation이 가능한 metadata plane에 두고, bytes는 immutable segment와 manifest로 data plane에 둡니다. multipart complete가 manifest 검증과 head pointer publish를 함께 마치기 전까지 객체를 보이지 않게 하며, hot data는 복제, cold data는 erasure coding과 scrub·repair로 내구성을 운영합니다.
설계 가정 · 논리 저장500PB
cold EC 예시12 data + 4 parity
핵심 publish 단위manifest + version head
01 · REQUIREMENTS
바이트와 namespace를 함께 신뢰하게 한다
# 요구사항
객체의 data plane은 높은 처리량·내구성을, metadata plane은 version·권한·삭제의 명확한 상태 전이를 책임집니다.
F1불완전 업로드 차단
part는 staging에만 두고 complete 검증 뒤에만 visible version을 만듭니다.
F2범위 읽기
video·backup은 필요한 segment만 range GET으로 읽고 checksum을 유지합니다.
F3복구 가능한 삭제
version, delete marker, restore, physical GC의 의미를 분리합니다.
F4명시적 권한 위임
signed URL은 object·method·만료가 제한된 bearer credential입니다.
02 · HIGH-LEVEL DESIGN
metadata publish와 durable data plane을 나눈다
# 아키텍처
upload가 성공했다는 것은 data shards가 존재한다는 뜻만이 아니라, 검증된 manifest가 현재 object version으로 publish되었다는 뜻이어야 합니다.
multipart ingest → placement → version publish → repair / lifecycle SVG DIAGRAM · 정책·수치는 설계 예시
정합성 경계: disk 또는 shard write의 ACK는 object publish가 아닙니다. client가 읽을 수 있는 version은 root checksum·part 순서·조건부 head mutation까지 끝난 metadata 결과이며, 실패한 staging 바이트는 TTL sweep 대상입니다.
03 · REQUEST FLOW
재개 가능한 parts를 검증한 뒤 version을 전진한다
# 요청 흐름
01Session
quota·policy를 확인하고 upload ID와 part size를 발급합니다.
02Ingest
각 range와 per-part hash를 검증하고 받은 part inventory를 저장합니다.
논리 바이트 외에 physical overhead, versions, abandoned parts, request, retrieval, egress와 repair traffic을 합산합니다.
bytes × overhead × retention
면접 모드 · 추가 질문06:00
“12+4 EC cold tier에서 한 zone의 여러 shard가 느려져 reconstruction queue가 폭증했습니다. GET p99를 지키면서 어떤 객체를 먼저 repair하고, replica promotion·rate limit·capacity 경보를 어떻게 적용하시겠습니까?”