AWS S3가 느린 HDD 위에서 초당 1페타바이트를 처리하는 방식

1 month ago 13

  • AWS S3는 대규모 멀티테넌트 스토리지 서비스로, 높은 가용성내구성을 낮은 비용에 제공함
  • 서비스는 구식이면서 느린 HDD를 활용하지만, 저렴한 대용량 저장 매체의 경제성을 극대화함
  • S3는 에러수정코딩(Erasure Coding)병렬 처리를 통해 무작위 접근 성능 문제를 극복함
  • 로드 밸런싱을 위해 데이터 위치를 무작위로 선정 및 지속적으로 재분산
  • 대규모 시스템일수록 예측 가능성이 증가하며, 작업 부하의 분산 효과가 커짐

AWS S3의 대규모 스토리지 아키텍처

누구나 AWS S3가 무엇인지는 알지만, S3가 얼마나 거대한 규모로 동작하는지와 이를 위해 어떤 혁신이 있었는지 아는 사람은 적음

S3는 확장 가능한 멀티테넌트 오브젝트 스토리지 서비스이며, API를 통해 오브젝트를 저장 및 조회할 수 있고, 매우 높은 가용성내구성을 상대적으로 저렴한 비용으로 제공함

규모

  • 400조 개 이상의 오브젝트 저장
  • 초당 1억 5천만 건의 요청 처리
  • 피크 시 초당 1PB 이상 트래픽 지원
  • 수천만 개의 디스크 운영

기반 기술: 하드 드라이브(HDD)

S3의 놀라운 확장성퍼포먼스는 전통적인 저장 매체인 HDD가 기반임
HDD는 오래된 기술로 내구성은 높지만 물리적 이동에 의해 IOPS(초당 입출력)과 지연에서 한계가 존재함

SSD와는 달리, HDD는 극도로 저렴한 단가높은 저장 용량 증대로 인해 여전히 대규모 스토리지에 활용되고 있음

  • 가격: 바이트당 60억 배 하락 (물가 반영 기준)
  • 용량: 720만 배 증가
  • 크기: 5천 배 감소
  • 무게: 1,235배 감소

그러나 30년째 IOPS는 약 120 수준에 정체되어 있으며, 랜덤 접근 성능과 지연은 크게 개선되지 않음

HDD가 느린 이유

HDD의 느림은 물리 법칙에 기인함
기계적 팔이 플래터를 꼭짓점 위치까지 이동, 대기 후 전기적으로 데이터 읽기 수행
이동해야 하므로 전체적인 지연이 불가피함

순차 접근

HDD는 순차 입출력 패턴에 최적화되어 있음
연속된 바이트를 읽고 쓰면 디스크 플래터가 자연스럽게 돌아가면서 빠르게 데이터 처리 가능
로그 기반 데이터 구조(log-structured)는 이런 순차 특성을 활용함
S3 자체도 LSM(log-structured merge) 트리를 기반으로 구축되어 있음

랜덤 접근

임의(랜덤) 위치 읽기는 평균적으로 물리적 이동의 절반가량을 필요로 하며,
랜덤 I/O의 평균 지연은 약 11ms로 0.5MB 데이터 접근이 느림
HDD 한 개에서 랜덤 I/O로 최대 초당 45MB 처리 가능

그래서 대량의 데이터 저장에는 HDD가 가성비가 뛰어나지만, 무작위 액세스 성능이 떨어짐
S3는 이 물리적 한계를 극복하며, 대규모 데이터에 대한 무작위 액세스를 제공함

병렬성의 필요

S3는 대규모 병렬성을 활용함
데이터를 수많은 HDD에 분산 저장, 각 디스크의 입력/출력을 병렬로 사용해 전체 처리량을 크게 높임
예를 들어 1TB 파일을 2만 개의 HDD에 분할 저장하면, 전체 디스크의 처리량을 합산하여 TB/s급 읽기 가능함

에러수정코딩(Erasure Coding)

스토리지 시스템에서는 중복성 보장이 필수임
S3는 Erasure Coding(EC) 을 사용하여 데이터를 K개의 조각과 M개의 패리티 조각으로 분할
총 K+M개 중 임의의 K개만 있으면 복원 가능

  • S3는 9분할(5개 데이터 샤드, 4개 패리티 샤드) 구조를 활용
  • 최대 4개 샤드 손실까지 복원 가능 (5/9 샤드 필요)
  • EC 덕분에 저장 용량 1.8배 소모, 5개의 병렬 읽기 경로 확보
  • 3중 복제 대비 더 높은 내성 및 병렬성 제공
  • EC는 로드 분산에 탁월, 작은 단위로 샤딩되어 핫스팟 발생 시 신속한 우회 요청(hedge requests) 처리 가능

병렬 처리 구조

S3는 3가지 주요 병렬화 방식을 사용

  1. 사용자는 데이터를 여러 청크로 나누어 업로드 및 다운로드
  2. 클라이언트는 여러 프론트엔드 서버에 동시 요청
  3. 서버는 여러 스토리지 서버에 오브젝트를 분산 저장

1. 프론트엔드 서버 단위 병렬 처리

  • 내부 HTTP 커넥션 풀을 활용해 분산된 여러 엔드포인트에 동시에 연결
  • 특정 인프라 노드나 캐시에서 과부하 방지

2. 하드 드라이브 간 병렬 처리

  • EC 기반으로 데이터를 여러 HDD에 소규모 샤드로 분산 저장

3. PUT/GET 요청 병렬 처리

  • 클라이언트가 데이터를 여러 부분으로 쪼개서 병렬 업로드
  • PUT: 멀티파트 업로드로 신규 병렬 처리 극대화
  • GET: 바이트 레인지 GET 지원(객체 내 일부 범위만 읽기 가능)

병렬로 분산 처리하면 초당 1GB 업로드 등도 어려움 없이 달성 가능

핫스팟(Hot Spot) 방지

S3는 수천만 대의 드라이브와 초당 수억 요청, 수억 샤드의 병렬 운영 환경
특정 디스크나 노드에 부하가 몰릴 경우 시스템 전체 성능 저하 위험 발생

이를 막기 위한 핵심 전략:

  1. 데이터 저장 위치 무작위 분산
  2. 지속적 리밸런싱
  3. 시스템 규모 확장

셔플 샤딩 & Power of Two

  • 최초 데이터 저장 위치를 무작위로 분산함
  • Power of Two Random Choices’ 알고리듬 적용:
    무작위 2개의 노드 중 부하가 적은 쪽 선택 시 효과적 로드 밸런싱 가능

리밸런싱

  • 신규 데이터가 기존 데이터보다 더 자주 접근됨
  • 데이터가 오래될수록 접근 빈도 감소, 스토리지 전체의 I/O 여력 증가
  • S3는 콜드 데이터를 재분산하여 공간과 자원 활용 극대화
  • 스토리지 랙(20PB) 신규 추가 시 전체적으로 로드 재분산 진행

Chill@Scale

  • 시스템 규모가 클수록 종합 부하가 평탄화, 예측성 증가
  • 사용량이 급증-휴면을 반복하더라도 대규모에서는 서로 상쇄되어 예측 가능한 부하 유지 가능

요약

  • AWS S3는 대규모 멀티테넌트 스토리지 서비스로, 느린 저장 매체의 한계를 대규모 병렬성, 로드 밸런싱, 데이터 샤딩 기술로 극복함
  • 에러수정코딩, 무작위 분산, 지속적 리밸런싱, 헤지 요청 등으로 안정성과 성능을 확보함
  • 초기에는 백업·미디어 중심이었으나, 데이터 분석 및 머신러닝 등 빅데이터 인프라의 메인 스토리지로 발전함
  • S3 기반 아키텍처는 스테이트리스 확장성을 확보하며, 내구성·복제·로드 밸런싱 문제를 효과적으로 AWS 측에 위임 가능
  • 이는 클라우드 비용 절감 및 관리 효율까지 제공함

참고

  • S3는 DNS 레벨 셔플 샤딩, 클라이언트 라이브러리 헤지 요청(p95 이상 느린 요청 신속 대체), 무중단 소프트웨어 업데이트, 마이크로서비스 구성(300개 이상), 내구성 중심 관리 및 위협 모델링 등 여러 고급 기능 내장
  • 연례 re:Invent에서 심층 구조 공개
  • 참조 영상: AWS re:Invent S3 Deep Dive

Read Entire Article