S3 Express One Zone의 성능 지침 및 설계 패턴 - Amazon Simple Storage Service

S3 Express One Zone의 성능 지침 및 설계 패턴

Amazon S3 Express One Zone에서 객체를 업로드 및 검색하는 애플리케이션을 빌드할 때 모범 사례 지침에 따라 성능을 최적화합니다. S3 Express One Zone 스토리지 클래스를 사용하려면 S3 디렉터리 버킷을 생성해야 합니다. S3 Express One Zone 스토리지 클래스는 S3 범용 버킷과 함께 사용할 수 없습니다.

기타 모든 Amazon S3 스토리지 클래스 및 S3 범용 버킷에 대한 성능 지침은 모범 사례 설계 패턴: Amazon S3 성능 최적화 섹션을 참조하세요.

S3 Express One Zone 스토리지 클래스 및 디렉터리 버킷을 사용할 때 애플리케이션의 성능을 최상으로 유지하려면 다음 지침 및 설계 패턴을 따르는 것이 좋습니다.

S3 Express One Zone 스토리지를 AWS 컴퓨팅 리소스와 같은 위치에 배치

각 디렉터리 버킷은 버킷을 만들 때 선택한 단일 가용 영역에 저장됩니다. 컴퓨팅 워크로드 또는 리소스와 같은 위치의 로컬 가용 영역에 새 디렉터리 버킷을 생성하여 시작할 수 있습니다. 그러면 지연 시간이 매우 짧은 읽기 및 쓰기를 즉시 시작할 수 있습니다. 디렉터리 버킷은 컴퓨팅과 스토리지 간의 지연 시간을 줄이기 위해 AWS 리전 내에서 가용 영역을 선택할 수 있는 첫 번째 S3 버킷입니다.

서로 다른 가용 영역에서 디렉터리 버킷에 액세스하는 경우 지연 시간이 늘어납니다. 성능을 최적화하려면 가능하면 동일한 가용 영역에 있는 Amazon Elastic Container Service, Amazon Elastic Kubernetes Service 및 Amazon Elastic Compute Cloud 인스턴스에서 디렉터리 버킷에 액세스하는 것이 좋습니다.

디렉터리 버킷

각 디렉터리 버킷은 수십만 건의 초당 트랜잭션(TPS)을 지원할 수 있습니다. 범용 버킷과 달리 디렉터리 버킷은 키를 접두사 대신 디렉터리에 계층적으로 구성합니다. 접두사는 객체 키 이름의 시작 부분에 있는 문자열입니다. 접두사를 디렉터리와 비슷한 방식으로 데이터를 구성하는 방법으로 생각할 수 있습니다. 그러나 접두사는 디렉터리가 아닙니다.

접두사는 범용 버킷 내에서 플랫 네임스페이스로 데이터를 구성하며 범용 버킷 내의 접두사 수에는 제한이 없습니다. 각 접두사는 초당 최소 3,500개의 PUT/POST/DELETE 또는 5,500개의 GET/HEAD 요청을 처리할 수 있습니다. 또한 여러 접두사에 걸쳐 요청을 병렬화하여 성능을 확장할 수 있습니다. 그러나 여기에서 읽기 및 쓰기 작업 모두의 경우 확장은 점진적으로 발생하며 즉각적이지 않습니다. 범용 버킷이 더 높은 신규 요청 속도에 맞춰 확장하는 동안 HTTP 상태 코드 503(서비스 사용 불가) 오류가 발생할 수 있습니다.

계층적 네임스페이스에서는 객체 키의 구분 기호가 중요합니다. 유일하게 지원되는 구분 기호는 슬래시(/)입니다. 디렉터리는 구분 기호 경계로 결정됩니다. 예를 들어, dir1/dir2/file1.txt 객체 키로 인해 dir1/ 디렉터리가 만들어지고 dir2/가 자동으로 생성되며 file1.txt 객체는 dir1/dir2/file1.txt 경로의 /dir2 디렉터리에 추가됩니다.

객체를 디렉터리 버킷에 업로드할 때 생성되는 디렉터리에는 접두사별 TPS 제한이 없으며 HTTP 503(서비스 사용 불가) 오류가 발생할 가능성을 줄이기 위해 자동으로 사전 크기 조정이 이루어집니다. 이 자동 크기 조정을 통해 애플리케이션은 필요에 따라 디렉터리 내부 및 디렉터리 간 읽기 및 쓰기 요청을 병렬화할 수 있습니다.

디렉터리 버킷 수평 크기 조정 요청 병렬화

디렉터리 버킷으로 여러 건의 동시 요청을 보내 요청을 별도의 연결로 분산하여 액세스 가능한 대역폭을 극대화함으로써 최상의 성능을 달성할 수 있습니다. S3 Express One Zone은 디렉터리 버킷에 대한 연결 수 제한이 없습니다. 개별 디렉터리는 동일한 디렉터리에 많은 수의 동시 쓰기가 발생하는 경우 성능을 수평적으로 자동 확장할 수 있습니다.

객체 키가 처음 생성되고 키 이름에 디렉터리가 포함된 경우 해당 객체에 대한 디렉터리가 자동으로 생성됩니다. 이후에 동일한 디렉터리에 객체를 업로드할 때는 디렉터리를 생성할 필요가 없으므로 기존 디렉터리로 객체를 업로드하는 데 걸리는 지연 시간이 줄어듭니다.

디렉터리 버킷 내에 객체를 저장하는 데는 단순한 디렉터리 구조와 복잡한 디렉터리 구조가 모두 지원되지만 디렉터리 버킷은 자동으로 수평적으로 확장되므로 동일한 디렉터리 또는 같은 계층에 속한 병렬 디렉터리로의 동시 업로드 지연 시간이 줄어듭니다.

세션 기반 인증 사용

S3 Express One Zone 및 디렉터리 버킷은 디렉터리 버킷에 대한 요청을 인증하고 권한을 부여하기 위해 새로운 세션 기반 권한 부여 메커니즘을 지원합니다. 세션 기반 인증을 통해 AWS SDK는 CreateSession API 작업을 자동으로 사용하여 짧은 지연 시간으로 디렉터리 버킷에 대한 데이터 요청에 권한을 부여하는 데 사용할 수 있는 임시 세션 토큰을 생성합니다.

AWSSDK는 CreateSession API 작업을 사용하여 임시 보안 인증 정보를 요청한 다음 5분마다 사용자를 대신하여 자동으로 토큰을 생성하고 새로 고칩니다. S3 Express One Zone 스토리지 클래스의 성능적 이점을 활용하려면 AWS SDK를 사용하여 CreateSession API 요청을 시작하고 관리하는 것이 좋습니다. 이 세션 기반 모델에 대한 자세한 내용은 CreateSession 권한 부여 섹션을 참조하세요.

S3 추가 체크섬 모범 사례

S3 Express One Zone은 업로드 또는 다운로드 중에 데이터를 검증하는 데 사용하는 체크섬 알고리즘을 선택할 수 있는 옵션을 제공합니다. SHA(보안 해시 알고리즘) 또는 CRC(순환 중복 검사) 데이터 무결성 확인 알고리즘(CRC32, CRC32C, SHA-1, SHA-256) 중 하나를 선택할 수 있습니다. MD5 기반 체크섬은 S3 Express One Zone 스토리지 클래스에서 지원되지 않습니다.

CRC32는 S3 Express One Zone과 데이터를 주고받을 때 AWS SDK에서 사용하는 기본 체크섬입니다. S3 Express One Zone 스토리지 클래스에서 최상의 성능을 위해 CRC32 및 CRC32C를 사용하는 것이 좋습니다.

최신 버전의 AWS SDK 및 공용 런타임 라이브러리를 사용하세요.

또한 일부 AWS SDK는 S3 클라이언트에서 성능을 더욱 가속화하기 위해 AWS Common Runtime(CRT) 라이브러리를 제공합니다. 이러한 SDK에는 AWS SDK for Java 2.x, AWS SDK for C++, AWS SDK for Python (Boto3) 등이 있습니다. CRT 기반 S3 클라이언트는 멀티파트 업로드 API 작업과 바이트 범위 가져오기를 자동으로 사용하여 연결을 수평적으로 확장하는 작업을 자동화함으로써 향상된 성능과 신뢰성을 제공하면서 S3 Express One Zone과 객체를 주고 받습니다.

S3 Express One Zone 스토리지 클래스로 최고의 성능을 달성하려면 CRT 라이브러리가 포함된 최신 버전의 AWS SDK를 사용하거나 AWS Command Line Interface(AWS CLI)를 사용하는 것이 좋습니다.

성능 문제 해결

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

S3 Express One Zone은 추가 조정 없이 일관된 수준의 고성능을 제공하도록 특별히 설계되었습니다. 하지만 제한 시간 값과 재시도를 적극적으로 설정하면 지연 시간과 성능을 일관되게 유지하는 데 도움이 될 수 있습니다. AWS SDK에는 특정 애플리케이션의 허용 오차에 따라 튜닝할 수 있는 구성 가능한 제한 시간 및 재시도 값이 있습니다.

AWS Common Runtime(CRT) 라이브러리 및 Amazon EC2 인스턴스 유형 페어링

다수의 읽기 및 쓰기 작업을 수행하는 애플리케이션은 그렇지 않은 애플리케이션보다 메모리 또는 컴퓨팅 용량이 훨씬 더 많이 필요합니다. 성능이 요구되는 워크로드를 위해 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 시작할 때는 애플리케이션에 필요한 만큼의 리소스를 포함하는 인스턴스 유형을 선택하세요. S3 Express One Zone 고성능 스토리지는 고성능 스토리지의 이점을 활용할 수 있는 더 큰 용량의 시스템 메모리와 더 강력한 CPU 및 GPU를 갖춘 더 큰 신규 인스턴스 유형과 함께 사용하는 것이 이상적입니다. 또한 읽기 및 쓰기 요청을 병렬로 더 빠르게 처리할 수 있는 최신 버전의 CRT 지원 AWS SDK를 사용하는 것이 좋습니다.

HTTP REST API 대신 AWS SDK에서 세션 기반 인증 사용

Amazon S3를 사용하면 AWS SDK의 일부 모범 사례와 동일한 모범 사례를 따라 HTTP REST API 요청을 사용할 때 성능을 최적화할 수 있습니다. 하지만 S3 Express One Zone에서 사용하는 세션 기반 권한 부여 및 인증 메커니즘을 사용하면 AWS SDK를 사용하여 CreateSession 및 관리형 세션 토큰을 관리하는 것이 좋습니다. AWS SDK는 CreateSession API 작업을 사용하여 사용자를 대신하여 자동으로 토큰을 생성하고 새로 고칩니다. CreateSession을 사용하면 각 요청을 승인하는 데 필요한 AWS Identity and Access Management(IAM)로의 요청당 왕복 지연 시간을 줄일 수 있습니다.