내구성(Durability)
R2가 연간 99.999999999%(11 nine)의 내구성을 제공하도록 설계되었다는 것과, 그 내구성을 어떻게 달성하는지 배워 보아요.
출처: 문서
본문
R2는 연간 99.999999999%(11 nine)의 내구성을 제공하도록 설계되었어요. 즉 R2에 10,000,000개의 객체를 저장한다면 평균적으로 10,000년마다 한 번 객체를 잃을 것으로 기대할 수 있어요.
R2가 11-nine 내구성을 달성하는 방법
R2의 내구성은 여러 계층의 리던던시(redundancy)와 데이터 보호 위에 구축되어 있어요.
- 복제(Replication): 객체를 업로드하면 R2는 전체 복제와/또는 이레이저 코딩(erasure coding)을 통해 해당 객체의 여러 "복사본"을 저장해요. 이는 개별 디스크의 전체 또는 부분 장애가 데이터 손실로 이어지지 않도록 보장해요. 이레이저 코딩은 객체의 일부를 여러 디스크에 분산해서, 일부 디스크가 실패해도 사용 가능한 일부에서 객체를 재구성할 수 있도록 해요. 이로써 하드웨어 장애나 데이터 센터에 대한 물리적 영향(화재, 홍수 등)으로 인한 데이터 손실을 방지하죠.
- 하드웨어 리던던시(Hardware redundancy): 스토리지 클러스터는 지리적 리전 내 여러 데이터 센터에 분산된 하드웨어로 구성돼요. 이러한 물리적 분산 덕분에 단일 시설의 정전, 네트워크 장애, 하드웨어 오작동 같은 국지적 장애가 데이터 손실로 이어지지 않아요.
- 동기식 쓰기(Synchronous writes): R2는 데이터가 디스크에 영속화된 경우에만 쓰기에 대해
HTTP 200 (OK)을 반환하거나 다른 방식으로 성공을 표시해요. 비동기 복제에 의존해서 기본 내구성 보장을 뒷받침하지 않아요. 이는 R2의 일관성 보장에 중요하며, 기반 메타데이터와 스토리지 인프라가 변경 사항을 영속화하지 않은 상태에서 클라이언트가 성공 API 응답을 받을 가능성을 줄여 줘요.
고려 사항
- 내구성은 데이터 가용성의 보장이 아니에요. 데이터 손실 가능성의 척도예요.
- R2는 99.9%의 가용성 SLA ↗︎를 제공해요.
- 내구성은 데이터의 의도적이거나 우발적인 삭제를 막아 주지 않아요. 버킷 잠금 및/또는 버킷 범위 API 토큰을 사용해서 데이터에 대한 접근을 제한해요.
- 내구성은 일관성(consistency)과도 구별돼요. 일관성은 읽기와 쓰기가 시스템 상태에 어떻게 반영되는지(예: 결과적 일관성 vs 강력한 일관성)를 설명하죠.