처리량 향상을 위해 API 요청 조절 - Amazon API Gateway

처리량 향상을 위해 API 요청 조절

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

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

API 개발자는 계정의 모든 API에 대한 전체 성능 향상을 위해 개별 API 단계 또는 메서드에 대한 한도를 설정할 수 있습니다. 또는 사용량 계획을 활성화하여 클라이언트 요청 제출을 지정된 요청 속도 및 할당량 이내로 제한할 수 있습니다. 그러면 리전의 계정 수준 조절 한도에서 크게 벗어나지 않도록 전체 요청 제출이 제한됩니다.

API Gateway에 조절 한도 설정을 적용하는 방법

단계 설정에서, 그리고 선택에 따라 사용량 계획에서 API의 한도 설정을 구성하기 전에, 조절 한도 설정이 어떻게 적용되는지 Amazon API Gateway를 이해하면 유용합니다.

Amazon API Gateway에서 조절 관련 설정의 기본 유형은 두 가지입니다.

  • 서버 측 조절 한도는 모든 클라이언트에게 적용됩니다. 이 한도 설정은 API 및 사용자의 계정이 너무 많은 요청 때문에 가득 차지 않도록 방지하기 위해 존재합니다.

  • 클라이언트 단위 조절 한도는 사용량 정책으로 연결된 API 키를 클라이언트 식별자로 사용하는 클라이언트에게 적용됩니다.

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의 특정 단계 또는 개별 메서드에 대해 계정 수준 요청 조절 한도를 재정의할 수 있습니다. 기본 메서드 조절 한도를 계정 수준 한도보다 높게 설정하더라도 기본 메서드 조절 한도는 리전별 계정 수준 속도 한도로 제한됩니다.

단계에서 기본 메서드 조절 설정을 사용하여 API Gateway 콘솔에서 기본 메서드 조절 한도를 설정할 수 있습니다. 콘솔을 사용하는 방법은 단계 설정 업데이트 단원을 참조하세요.

API 참조를 호출하여 기본 메서드 조절 한도를 설정할 수도 있습니다.

사용량 계획에서 API 수준 및 단계 수준의 조절 구성

사용량 계획사용량 계획 생성에서 사용량 계획 생성에 보이는 대로 API 또는 단계 수준에서 모든 메서드에 대한 기본 메서드 단위 조절 한도를 설정할 수 있습니다.

사용량 계획에서 메서드 수준 조절 구성

메서드 수준에서 추가 조절 한도는 사용량 계획에서 사용량 계획 생성에 보이는 대로 설정할 수 있습니다. API Gateway 콘솔에서는 메서드 조절 구성(Configure Method Throttling) 설정에서 Resource=<resource>, Method=<method>를 지정하여 설정합니다. 예를 들어, PetStore 예시에서 Resource=/pets, Method=GET을 지정할 수 있습니다.