새소식

TroubleShooting/Cloud-computing

[S3]초당 쿼리 수 제한(QPS Limit)을 극복하고 성능을 향상시키는 방법

  • -

문제

특정 이벤트로 인해 사용자들이 몰리는 현상이 발생하면서 S3 버킷에 대한 요청이 급증했습니다. 이 예기치 못한 트래픽 증가로 인해 S3의 초당 쿼리 수 제한(QPS Limit)에 걸려 많은 파일들이 업로드되지 못하는 문제가 발생했습니다.

S3 초당 쿼리 수 제한에 대한 이해

Amazon S3는 각 접두사(prefix) 당 3,500개의 PUT/COPY/POST/DELETE와 5,500개의 GET/HEAD 요청을 처리할 수 있는 높은 요청 빈도로 설계되어 자동 확장됩니다. 이 기본 성능은 S3의 동적 최적화와 확장 능력을 바탕으로 합니다. 그러나, 오늘과 같이 대규모 이벤트가 발생하여 요청이 급증하면, 시스템은 일시적으로 503 에러를 발생시킬 수 있으며, 이는 S3가 새로운 요청 빈도에 맞게 조정되는 과정 중에 나타납니다.

해결방법: 병렬화를 통한 성능 향상

병렬화는 이러한 제한을 극복하고 성능을 향상시키는 핵심입니다. 객체 키 명명 패턴을 전략적으로 설계하면, 각 접두사가 독립적으로 처리할 수 있는 요청 수를 늘릴 수 있습니다. 이는 각 접두사가 고유의 요청 빈도 한계를 가지게 하여 전체 버킷의 성능을 향상시킵니다.

s3://your-storage-bucket/
s3://your-storage-bucket/prefix-a/
s3://your-storage-bucket/prefix-a/subprefix-b/
s3://your-storage-bucket/prefix-a/subprefix-b/subsubprefix-c/

이러한 구조는 각 접두사가 별도의 처리 능력을 갖게 해주어, 전체 버킷의 성능을 향상시킬 수 있습니다.

접근 방법

병렬화를 효과적으로 수행하기 위해서는, 버킷의 기본 요청 속도에 대한 이해가 필수적입니다. 새 접두사를 도입하고 추가 객체를 업로드하면, 각 접두사는 독립적인 요청 속도를 가지며, 이를 통해 성능을 향상시킬 수 있습니다.

서비스 쿼터 한계와 트러블슈팅

서비스 쿼터 한계에 도달하는 것은 불가피한 일이 될 수 있습니다. AWS는 초당 업로드 수를 늘리는 직접적인 방법을 제공하지 않지만, 병렬 처리를 통해 시스템 전체의 성능을 개선할 수 있습니다.

최적화를 위한 조치 정리

S3의 병렬 처리 능력을 최대한 활용하기 위해 다음과 같은 조치를 취해야 합니다:

  • 적절한 객체 키 명명 패턴 사용: 무작위성을 피하고, 의미 있는 방식으로 접두사를 구성합니다.
  • 접두사 분할: 데이터를 논리적 단위로 분할하여 별도의 접두사를 할당함으로써 병렬 처리 능력을 향상시킵니다.
  • 에러 관리: 503 오류에 대비하여 적절한 오류 처리 로직과 재시도 메커니즘을 구현합니다.

https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/optimizing-performance-design-patterns.html https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/optimizing-performance.html

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.