HTTP API에 대한 요청 조절 - Amazon API Gateway

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

HTTP API에 대한 요청 조절

너무 많은 요청으로 인해 API가 가득 차는 것을 방지하기 위해 Amazon API Gateway에서는 토큰 버킷 알고리즘을 사용하여 API에 대한 요청을 조절합니다. 이 알고리즘에서는 토큰을 요청으로 간주합니다. 특히 API Gateway에서는 리전별로 계정의 모든 API에 대한 요청 제출 버스트 및 안정적인 상태의 속도에 관한 한도를 설정합니다. 토큰 버킷 알고리즘에서 버스트는 최대 버킷 크기입니다.

요청 제출이 안정적인 상태의 요청 속도 및 버스트 한도를 초과할 경우 API Gateway에서 한도 초과 요청을 실패하고 429 Too Many Requests 오류 응답을 클라이언트에 반환합니다. 클라이언트가 이러한 오류 응답을 받으면 클라이언트는 API Gateway 조절 한도를 준수하면서 속도를 제한하는 방식으로 실패한 요청을 다시 제출할 수 있습니다.

리전별 계정 수준 조절

기본적으로 API Gateway는 리전별로 AWS 계정 내의 모든 API에 대해 일정한 상태 RPS(초당 요청 수)를 제한합니다. 또한 리전별로 AWS 계정 내 모든 API에 대해 버스트(즉, 최대 버킷 크기)를 제한합니다. API Gateway에서 버스트 한도는 API Gateway에서 429 Too Many Requests 오류 응답을 반환하지 않고 언제든지 이행할 수 있는 최대 동시 요청 제출 수에 해당합니다. 조절 할당량에 대한 자세한 내용은 Amazon API Gateway 할당량 및 중요 정보 단원을 참조하세요.

이러한 조절 한도를 이해하는 데 도움이 되도록 다음은 리전에서 버스트 한도가 5,000이고 계정 수준 속도 제한이 초당 10,000개 요청인 경우의 몇 가지 예입니다.

  • 호출자가 1초 동안 균등하게 10,000개의 요청을 제출하면(예를 들어 1밀리초마다 10개 요청), API Gateway는 어떤 것도 삭제하지 않고 모든 요청을 처리합니다.

  • 호출자가 첫 밀리초 내에 10,000개 요청을 제출하면 API Gateway는 1초 내에 이 요청 중 5,000개를 처리하고 나머지 요청을 조절합니다.

  • 호출자가 첫 밀리초 내에 5,000개 요청을 제출한 후, 남은 999밀리초 동안 5,000개 요청을 균등하게 분산해 제출하면(예를 들어 1밀리초마다 약 5개 요청), API Gateway는 429 Too Many Requests 오류 응답을 반환하지 않고 1초 동안 전체 10,000개 요청을 처리합니다.

  • 호출자가 첫 밀리초 내에 5,000개 요청을 제출하고 101번째 밀리초에 나머지 5,000개 요청을 제출하면, API Gateway는 이 1초 내에 6,000개 요청을 처리하고 나머지 요청을 조절합니다. 이는 API Gateway가 10,000rps의 속도로 첫 100밀리초가 지난 후 1,000개 요청을 처리하여 동일한 용량만큼의 버킷을 비웠기 때문입니다. 다음의 5,000개 요청 스파이크 중에서 1,000개 요청이 버킷을 채우고, 처리 대기 상태에 놓입니다. 나머지 4,000개 요청은 버킷 용량을 초과하므로 무시됩니다.

  • 호출자가 첫 밀리초 내에 5,000개 요청을 제출하고 101번째 밀리초에 1,000개 요청을 제출한 후 남은 899밀리초 동안 4,000개 요청을 균등하게 분산해 제출하면 API Gateway는 조절 없이 1초 동안 전체 10,000개 요청을 처리합니다.

일반적으로, 지정된 순간에 버킷에 b가 포함되어 있고 최대 버킷 용량이 B일 경우 버킷에 추가될 수 있는 최대 추가 토큰 수는 Δ=B-b입니다. 이 최대 추가 토큰 수는 클라이언트가 429 오류 응답을 수신하지 않고 제출할 수 있는 최대 추가 동시 요청 수에 해당합니다.

일반적으로 Δ는 시간에 따라 다릅니다. 값의 범위는 0(버킷이 가득 찬 상태 즉, b=B)부터 B(버킷이 비어 있는 상태 즉, b=0)까지입니다. 범위는 요청 처리 속도(버킷에서 토큰이 제거되는 속도)와 속도 제한 속도(버킷에 토큰이 추가되는 속도)에 따라 달라집니다.

다음 다이어그램은 최대 추가 동시 요청인 Δ의 일반적인 동작을 시간의 함수로 보여줍니다. 이 다이어그램은 버킷의 토큰이 빈 버킷에서 시작하여 r의 결합 속도로 감소한다고 가정합니다.


                특정 토큰 버킷 크기와 결합 진행 속도에서 시간의 함수로서 버스트

요청 시 리전당 계정 수준 속도 제한을 높일 수 있습니다. 계정 수준 조절 한도 증가를 요청하려면 AWS 지원 센터에 문의하세요. 자세한 내용은 Amazon API Gateway 할당량 및 중요 정보 단원을 참조하세요.

라우팅 수준 스로틀

라우팅 수준 스로틀을 설정해 API의 특정 단계 또는 개별 라우팅에 대해 계정 수준 요청 스로틀 한도를 재정의할 수 있습니다. 기본 라우팅 스로틀 한도를 계정 수준 한도보다 높게 설정하더라도 기본 라우팅 스로틀 한도는 계정 수준 속도 한도로 제한됩니다.

AWS CLI를 사용하여 라우팅 수준 조절을 구성할 수 있습니다. 다음 명령은 API의 지정된 단계 및 라우팅에 대한 사용자 지정 스로틀을 구성합니다.

aws apigatewayv2 update-stage \ --api-id a1b2c3d4 \ --stage-name dev \ --route-settings '{"GET /pets":{"ThrottlingBurstLimit":100,"ThrottlingRateLimit":2000}}'