[35일차] | 대규모 시스템 설계 기초2 | 책너두

9장 S3와 유사한 객체 저장소
저장소 시스템 101
- 저장소 시스템의 종류는 아래와 같은 세 가지 종류가 있다.
- 블록(block) 저장소
- 파일(file) 저장소
- 객체(object) 저장소
블록 저장소
- 블록 저장소는 특정 서버에 원시 블록(raw block)을 직접 제공한다.
- 가장 유연하고 융통성이 높다. 또한 성능도 가장 우수하다.
- 그말인 즉슨, 사용자가 신경써야할 것이 많다는 것이다.
- 이러한 블록 저장소의 가장 대표적인 예시는 서버에 직접 설치되는 하드디스크이다.
- 이와 달리, 고속 네트워크를 통해 FC(Fibre Channel) 또는 iSCSI(Internet SCSI)로 제공되는 블록 저장소도 있다.
- 서버 입장에서, 개념적으로 이 둘은 동일하다.
파일 저장소
- 파일 저장소는 블록 저장소 위에 구현된다.
- 파일과 디렉터리를 관리하는 파일 시스템 기능을 포함한다.
- SMB(Server Messge Block)/CIFS(Common Internet File System), 또는 NFS(Network File System)를 사용하여 제공된다.
- 이러한 파일 저장소는 개별 블록에 대한 포멧과 관리 등의 작업을 고려할 필요가 없다.
객체 저장소
- 객체 저장소는 데이터 저장 비용을 낮추기 위해 성능을 포기한다.
- 실시간으로 수정 할 수 없는 콜드 데이터를 저장하는데 적합하다.
- 데이터의 수정은 불가하고, 대신 전체 덮어쓰기를 지원하며 이를 위한 버전 관리 기능을 제공한다.
비교
용어 정리
- 버킷(bucket): 객체를 보관하는 논리적 컨테이너. 전역적으로 유일해야 한다.
- 객체(object): 객체는 버킷에 저장하는 최소 단위로, 개별 데이터를 말한다.
- 데이터: 페이로드(payload)라고도 하는 데이터의 실제 내용
- 메타데이터: 객체를 기술하는 키-값 쌍
- 버전(version): 한 버킷 내에서 같은 객체의 여러 버전을 관리할 수 있도록 한다.
- URI: Uniform Resource Identifier. 객체 저장소에서 객체를 식별하는 고유한 식별자.
- SLA: Service Level Agreement. 서비스 수준 동의서. 서비스 제공자와 사용자 간의 서비스 수준에 대한 계약.
- AWS S3의 경우 아래와 같은 SLA를 만족한다고 한다.
- 여러 AZ에 걸쳐 99.999999999%의 가용성(nine nines)
- 하나의 AZ가 전체 소실되어도 복원이 가능
- 연간 99.9%의 가용성 제공
1단계: 문제 이해 및 설계 범위 확정
- 버킷 생성, 객체 업로드/다운로드, 객체의 버전관리, 버킷 내 목록 출력 기능 등
- 아주 큰 객체(수 GB 이상)부터 소형 객체(수 KB 이하)까지 효율적으로 저장 가능
- 연간 100PB 이상의 대규모 데이터 추가
- 99.9999%(six nines)의 가용성
- 99.99%(four nines)의 내구성
대략적인 규모 추정
- 하드 디스크의 IOPS는 초당 100~150정도로 가정한다.
- 1년간 데터 저장량은 100PB로 가정했다.
- 디스크 용량 산출
- 객체의 20%는 1MB 이하의 작은 객체이다. 이는 0.5MB로 가정한다.
- 객체의 60%는 1~64MB 사이의 중간 크기 객체이다. 이는 32MB로 가정한다.
- 나머지 20%는 64MB 이상의 큰 객체이다. 이는 200MB로 가정한다.
- 각각의 객체의 메타데이터는 1KB로 가정한다.
- 따라서 객체 하나의 평균 크기는 약 59.3MB = 60MB이다.
- 결과적으로 1년에 저장하는 객체의 수는 대략 100PB / 60MB = 1000000000 / 60 = 16,666,666개이다.
