최대 인스턴스 구성

Cloud Functions 인스턴스의 최대 수를 설정하여 함수의 확장 동작을 제어할 수 있습니다. 최대 인스턴스를 설정하면 비용이 관리되고 다운스트림 리소스에 트래픽이 과부하되지 않습니다.

Cloud Functions는 함수의 새 인스턴스를 만들어 확장합니다. 이러한 각 인스턴스는 한번에 하나의 요청만 처리할 수 있으므로 요청 볼륨이 급증하면 인스턴스가 많이 만들어질 수 있습니다.

자동 확장은 대부분의 경우 유용하지만 경우에 따라 특정 시점에 존재할 수 있는 총 인스턴스 수를 제한해야 할 수 있습니다. 예를 들면 함수가 열려 있는 연결을 일정한 개수만 처리할 수 있는 데이터베이스와 상호작용하는 경우가 있습니다.

Cloud Functions(2세대)는 추가 확장 메커니즘으로 동시 실행을 제공합니다. 동시 실행에 구성된 함수는 단일 인스턴스에서 여러 요청을 동시에 실행할 수 있습니다. 동시 실행 인스턴스와 여러 인스턴스를 모두 사용하여 성능을 최적화하도록 함수를 구성할 수 있습니다. 동시 실행 구성에 대한 자세한 내용은 Cloud Functions 동시 실행을 참조하세요.

최대 인스턴스 한도 설정 및 삭제

배포 중에 함수에 대한 최대 인스턴스 수를 설정할 수 있습니다. 함수마다 고유한 최대 인스턴스 설정이 있습니다. 함수는 서로 독립적으로 확장됩니다.

최대 인스턴스 한도 설정

Google Cloud CLI 또는 Google Cloud Console을 사용하여 최대 인스턴스 한도를 설정할 수 있습니다. 제한을 지정하지 않으면 Cloud Functions는 기본값을 설정합니다.

  • Cloud Functions(1세대) 함수의 경우 3,000
  • Cloud Functions(2세대) 함수의 경우 100

최대 인스턴스 한도를 설정하려면 다음 안내를 따르세요.

콘솔

  1. Cloud Functions 개요 페이지로 이동합니다.

  2. 함수 만들기를 클릭합니다.

  3. 함수의 필수 필드를 작성합니다.

  4. 페이지 끝에서 런타임, 빌드... 섹션을 확장하고 런타임 탭을 클릭합니다.

  5. 자동 확장 섹션의 최대 인스턴스 수 필드에서 값을 입력하거나 기본값을 사용합니다.

gcloud

최대 인스턴스 한도를 설정하려면 --max-instances 플래그와 함께 deploy 명령어를 실행합니다.

gcloud functions deploy FUNCTION_NAME --max-instances MAX_INSTANCE_LIMIT

다음을 바꿉니다.

  • FUNCTION_NAME: 함수 이름입니다.

  • MAX_INSTANCE_LIMIT: 최대 인스턴스 한도로 설정할 숫자입니다(예: 3, 000).

최대 인스턴스 한도 삭제

gcloud 명령줄 도구 또는 Google Cloud Console을 사용하여 Cloud Functions(1세대) 함수의 최대 인스턴스 한도를 삭제할 수 있습니다. Cloud Functions(2세대) 함수에는 정의된 최대 인스턴스 한도가 필요합니다.

콘솔

Cloud Functions(1세대) 함수의 최대 인스턴스 한도를 삭제하려면 다음 안내를 따르세요.

  1. Cloud Functions 개요 페이지로 이동합니다.

  2. 기존 함수를 클릭하여 세부정보 페이지로 이동합니다. 세부정보 탭에서 함수의 현재 최대 인스턴스 한도를 확인할 수 있습니다.

  3. 수정을 클릭합니다.

  4. 페이지 끝에서 런타임, 빌드... 섹션을 확장하고 런타임 탭을 클릭합니다.

  5. 자동 확장 섹션의 최대 인스턴스 수 필드에 0을 입력합니다.

gcloud

Cloud Functions(1세대) 함수의 최대 인스턴스 한도를 삭제하려면 --clear-max-instances 플래그와 함께 deploy 명령어를 실행합니다.

gcloud functions deploy FUNCTION_NAME --clear-max-instances

한도 및 권장사항

이 섹션에서는 최대 인스턴스 사용에 대한 가이드라인을 제공합니다.

최대 인스턴스 값 선택

최대 인스턴스 설정에 대한 최적의 값은 호출 실행 시간, 예상되는 평균 및 최대 호출 빈도, 호출 실패에 대한 애플리케이션의 허용 등 함수의 특성에 따라 달라집니다. 일반적으로 최대 인스턴스 값 3으로 시작하여 호출 실패를 모니터링하고 필요에 따라 최대 인스턴스 값을 증가시키는 것이 좋습니다.

과도한 수직 확장으로부터 보호

최대 인스턴스 한도가 지정되지 않은 경우 Cloud Functions(1세대)는 처리량을 제한하는 것보다 수요에 맞게 확장하는 것을 선호합니다. 즉, 이러한 한도를 구성하지 않는 한 1세대 함수에서 가질 수 있는 동시 인스턴스 수는 사실상 무제한입니다. Cloud Functions(2세대)는 최대 인스턴스 한도가 없는 함수를 지원하지 않습니다.

처리량이 제한되거나 확장 불가능한 다운스트림 서비스에 요청을 보내는 모든 함수에 --max-instances 한도를 할당하는 것이 좋습니다. 최대 인스턴스 한도는 전체적인 시스템 안정성을 개선하고 비정상적으로 높은 요청 수준을 방지하는 데 도움이 됩니다.

모든 인스턴스가 사용 중일 때 처리 요청

일반적인 상황에서는 수신 트래픽 로드를 처리하기 위해 새 인스턴스를 만들어 함수를 확장합니다. 하지만 최대 인스턴스 한도가 설정되어 있으면 수신 트래픽 로드를 처리하기에 인스턴스가 부족한 경우가 발생할 수 있습니다.

이 시나리오에서 Cloud Functions는 새 인바운드 요청을 최대 30초 동안 제공하려고 시도합니다.

  • 인스턴스가 이 기간에 요청 처리를 완료하면 새 인바운드 요청을 처리하기 시작할 수 있습니다.
  • 사용 가능한 인스턴스가 없으면 요청이 실패합니다.

오버로드된 HTTP 함수로 전송된 요청은 다음 응답 코드와 함께 실패합니다.

  • 429 Too Many Requests - 최대 인스턴스 값이 구성된 경우
  • 500 Internal Server Error - 최대 인스턴스 값이 구성되지 않은 경우(1세대 함수만)

이벤트 기반 기능으로 지정된 이벤트는 용량을 사용할 수 있을 때까지 자동으로 저장됩니다.

Cloud Functions 확장 기능을 초과하는 최대 인스턴스 한도

최대 인스턴스 한도를 지정할 때 상한을 지정합니다. 한도를 크게 설정한다고 해서 함수가 지정한 인스턴스 수로 확장되는 것은 아니며, 다만 특정 시점에 공존할 수 있는 인스턴스의 수가 한도를 초과하지 않아야 함을 의미합니다.

또한 최대 인스턴스 한도 설정은 Cloud Functions가 트래픽 수요를 충족하는 데 사용하는 확장 방식에 영향을 줄 수 있습니다. 일반적으로 Cloud Functions는 확장하거나 잠재적으로 한도를 초과하지 않고 지정된 한도를 우선적으로 준수합니다.

트래픽 급증 처리

빠르게 트래픽이 증가하는 등 경우에 따라 Cloud Functions가 잠시 동안 지정된 최대 인스턴스 한도보다 더 많은 인스턴스를 만들 수 있습니다. 함수가 이 일시적인 동작을 감당할 수 없으면 안전성이 보장되는 여유를 고려하여 최대 인스턴스를 함수가 감당할 수 있는 값보다 낮게 설정해야 할 수 있습니다.

배포

함수의 새 버전을 배포하면 Cloud Functions가 이전 버전에서 새 버전으로 트래픽을 마이그레이션합니다. 각 버전의 함수에 개별적으로 최대 인스턴스 한도가 설정되기 때문에 배포 후 일정 기간 동안에 지정된 한도를 일시적으로 초과할 수도 있습니다.

예를 들어 함수의 최대 인스턴스 한도가 5이면 일반적인 상황에서 함수는 요청을 처리할 때 인스턴스를 최대 5개로 확장하며 배포된 새 버전 함수의 자체 최대 인스턴스 한도도 5입니다.

이전 버전의 함수에서 이미 처리 중인 요청은 새 버전의 함수를 배포할 때 중단되지 않습니다. 대신 이와 같은 요청은 계속 진행되며, 새 인바운드 요청은 새로 배포된 함수 버전에서 처리합니다.

따라서 이전 예시의 함수는 새 버전을 배포한 이후 기간 동안 최대 총 10개의 인스턴스(각 함수 버전에 5개)를 가질 수 있습니다. 이전 함수의 인스턴스를 종료하는 데 필요한 시간은 인스턴스가 활성 요청 처리를 완료하는 데 필요한 시간에 따라 달라집니다. 이 시간은 적절한 최대 인스턴스 한도를 선택할 때 고려할 추가 요소입니다.

최대 인스턴스 한도 삭제

Cloud Functions(1세대) 함수의 최대 인스턴스를 0으로 설정하면 함수의 기존 최대 인스턴스 한도가 삭제되지만 함수는 일시중지되지 않습니다.