Amazon S3 성능 지침 - Amazon Simple Storage Service

Amazon S3 성능 지침

Amazon S3에서 객체를 업로드 및 검색하는 애플리케이션을 빌드할 때 모범 사례 지침에 따라 성능을 최적화합니다. 자세한 내용은 성능 디자인 패턴 섹션을 참조하십시오.

Amazon S3에서 애플리케이션의 성능을 최상으로 유지하려면 다음 지침을 따르는 것이 좋습니다.

성능 측정

성능을 최적화할 때 네트워크 처리량, CPU 및 DRAM 요구 사항을 살펴보십시오. 이처럼 다양한 리소스에 대한 요구 조건의 조합에 따라 다른 Amazon EC2 인스턴스 유형을 평가할 가치가 있습니다. 인스턴스 유형에 대한 자세한 내용은 Linux 인스턴스용 Amazon EC2 사용 설명서인스턴스 유형을 참조하십시오.

성능을 측정할 때 HTTP 분석 도구를 사용하여 DNS 조회 시간, 지연 시간 및 데이터 전송 속도를 살펴 보는 것도 도움이 됩니다.

성능 요구 사항을 이해하고 애플리케이션의 성능을 최적화하기 위해 수신되는 503 오류 응답을 모니터링할 수도 있습니다. 특정 성과 지표를 모니터링하면 추가 비용이 발생할 수 있습니다. 자세한 내용은 Amazon S3 요금을 참조하십시오.

503(속도 저하) 상태 오류 응답 수 모니터링

표시되는 503 상태 오류 응답 수를 모니터링하려면 다음 옵션 중 하나를 사용할 수 있습니다.

  • Amazon S3에 대한 Amazon CloudWatch 요청 지표 사용 CloudWatch 요청 지표에는 5xx 상태 응답에 대한 지표가 포함됩니다. CloudWatch 요청 지표에 대한 자세한 내용은 Amazon CloudWatch를 사용한 지표 모니터링 섹션을 참조하세요.

  • Amazon S3 스토리지 렌즈의 고급 지표 섹션에서 제공되는 503(서비스 사용 불가) 오류 수를 사용합니다. 자세한 내용은 성능 향상을 위한 S3 스토리지 렌즈 지표 사용 단원을 참조하십시오.

  • Amazon S3 서버 액세스 로깅 사용 서버 액세스 로깅을 사용하면 503(내부 오류) 응답을 받는 모든 요청을 필터링하고 검토할 수 있습니다. 또한 Amazon Athena를 사용하여 로그를 구문 분석할 수도 있습니다. 서버 액세스 로깅에 대한 자세한 내용은 서버 액세스 로깅을 사용한 요청 로깅 단원을 참조하십시오.

HTTP 503 상태 오류 코드의 수를 모니터링하면 제한 요청이 가장 많이 발생하는 접두사, 키 또는 버킷에 대한 유용한 인사이트를 얻을 수 있습니다.

스토리지 연결 수평 확장

여러 연결에 걸쳐 요청을 분산시키는 것은 성능을 수평으로 확장하는 일반적인 설계 패턴입니다. 고성능 애플리케이션을 빌드할 때는 Amazon S3를 기존의 스토리지 서버와 같은 단일 네트워크 엔드포인트가 아닌 아주 큰 분산 시스템처럼 생각하십시오. Amazon S3로 여러 건의 동시 요청을 보내 최상의 성능을 달성할 수 있습니다. Amazon S3에서 액세스할 수 있는 대역폭을 최대화하기 위해 이러한 요청을 별도의 연결로 분산합니다. Amazon S3는 버킷에 대한 연결 수 제한이 없습니다.

바이트 범위 가져오기 사용

GET Object 요청에서 Range HTTP 헤더를 사용하면 객체에서 바이트 범위를 가져와 지정된 부분만 전송할 수 있습니다. Amazon S3에 대한 동시 연결을 사용하여 동일한 객체 내에서 서로 다른 바이트 범위를 가져올 수 있습니다. 그러면 전체 객체 요청 한 건에 비해 집계 처리량을 높일 수 있습니다. 더 작은 범위의 큰 객체를 가져와 요청이 중단되었을 때 애플리케이션의 재시도 횟수를 개선할 수도 있습니다. 자세한 내용은 객체 다운로드 섹션을 참조하세요.

바이트 범위 요청의 일반적인 크기는 8MB 또는 16MB입니다. 객체가 멀티파트 업로드를 사용해 PUT되는 경우 최상의 성능을 위해 동일한 파트 크기(또는 최소한 파트 경계에 맞춤)로 GET하는 것이 좋습니다. GET 요청은 개별 파트(예: GET ?partNumber=N.)를 직접 처리할 수 있습니다.

지연 시간에 민감한 애플리케이션 요청 재시도

공격적인 제한 시간과 재시도는 일관된 지연 시간을 유지하는 데 도움이 됩니다. Amazon S3의 큰 규모로 볼 때, 첫 번째 요청이 느린 경우 재시도된 요청은 다른 경로를 취하여 신속하게 성공할 가능성이 높습니다. AWS SDK에는 특정 애플리케이션의 허용 오차에 따라 튜닝할 수 있는 구성 가능한 제한 시간 및 재시도 값이 있습니다.

동일한 AWS 리전에서 Amazon S3(스토리지)와 Amazon EC2(컴퓨팅) 결합

S3 버킷 이름은 전 세계적으로 고유하지만 각 버킷은 버킷을 만들 때 선택한 리전에 저장됩니다. 성능을 최적화하려면, 가급적 같은 AWS 리전의 Amazon EC2 인스턴스에서 버킷에 액세스하는 것이 좋습니다. 그러면 네트워크 지연 시간 및 데이터 전송 비용을 줄일 수 있습니다.

데이터 전송 요금에 대한 자세한 내용은 Amazon S3 요금을 참조하십시오.

거리에 의해 발생하는 지연 시간을 최소화하기 위해 Amazon S3 Transfer Acceleration 사용

Amazon S3 Transfer Acceleration을 사용하여 빠르고 안전한 파일 전송 구성을 사용하면 지리적으로 거리가 먼 클라이언트와 S3 버킷 간에 파일을 빠르고 쉽고 안전하게 전송할 수 있습니다. Transfer Acceleration은 Amazon CloudFront에서 전 세계에 분산된 엣지 로케이션을 활용합니다. 엣지 로케이션에 도착한 데이터는 최적화된 네트워크 경로를 통해 Amazon S3로 라우팅됩니다. Transfer Acceleration은 여러 대륙에 걸쳐 기가바이트 또는 테라바이트 용량의 데이터를 정기적으로 전송하는 데 이상적입니다. 전 세계의 중앙 집중식 버킷에 업로드하는 클라이언트에도 유용합니다.

Amazon S3 Transfer Acceleration 속도 비교 도구를 사용하면 Amazon S3 리전에서 속도를 높인 경우와 그렇지 않은 경우의 업로드 속도를 비교할 수 있습니다. 이 속도 비교 도구는 멀티파트 업로드를 통해 Amazon S3 Transfer Acceleration을 사용하거나 사용하지 않으면서 브라우저에서 여러 Amazon S3 리전으로 파일을 전송합니다.

최신 AWS SDK 버전 사용

AWS SDK는 Amazon S3 성능을 최적화하기 위한 다양한 권장 지침을 기본적으로 지원합니다. SDK는 애플리케이션 내에서 Amazon S3를 활용할 수 있는 더 간단한 API를 제공하며 최신 모범 사례를 따르기 위해 정기적으로 업데이트됩니다. 예를 들어 SDK에는 HTTP 503 오류에 대한 요청을 자동으로 다시 시도하는 로직이 포함되어 있으며 느린 연결에 응답하고 적응하는 코드에 투자하고 있습니다.

SDK는 또한 경우에 따라 바이트 범위 요청을 사용하여 초당 수천 건의 요청을 달성하기 위해 수평 조정 연결을 자동화하는 Transfer Manager를 제공합니다. 최신 성능 최적화 기능을 사용하려면 최신 버전의 AWS SDK를 사용하는 것이 중요합니다.

HTTP REST API 요청을 사용하여 성능을 최적화 할 수도 있습니다. REST API를 사용할 때는 SDK에 포함된 것과 동일한 모범 사례를 따라야 합니다. 느린 요청에 대해 제한 시간 및 재시도를 허용하고 객체 데이터를 병렬로 가져올 수 있도록 다중 연결을 허용합니다. REST API 사용에 대한 자세한 내용은 Amazon Simple Storage Service API 참조를 참조하세요.