최대 인스턴스 사용

Cloud Functions 인스턴스의 최대 수를 설정하여 함수의 확장 동작을 제어할 수 있습니다.

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

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

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

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

최대 인스턴스 한도 설정

최대 인스턴스 한도는 gcloud 명령줄 도구 또는 Google Cloud Console을 사용하여 설정할 수 있습니다.

Console

새 함수의 최대 인스턴스 한도를 설정하는 방법은 다음과 같습니다.

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

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

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

  4. 런타임, 빌드, 연결 설정을 클릭합니다.

  5. 자동 확장 섹션의 최대 인스턴스 필드에 원하는 값을 입력합니다. 권장 기본값은 3000입니다.

gcloud

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

gcloud functions deploy FUNCTION_NAME --max-instances MAX_INSTANCE_LIMIT

다음을 바꿉니다.

  • FUNCTION_NAME: 함수 이름입니다.

  • MAX_INSTANCE_LIMIT: 최대 인스턴스 한도로 설정할 숫자입니다. 예: 3000

최대 인스턴스 한도가 설정됩니다.

최대 인스턴스 한도 삭제

최대 인스턴스 한도는 gcloud 명령줄 도구 또는 Google Cloud Console을 사용하여 삭제할 수 있습니다.

Console

최대 인스턴스 한도를 삭제하는 방법은 다음과 같습니다.

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

  2. 기존 함수를 클릭하여 세부정보 페이지로 이동합니다.

  3. 수정을 클릭합니다.

  4. 런타임, 빌드, 연결 설정을 클릭합니다.

  5. 자동 확장 섹션의 최대 인스턴스 필드에 0을 입력하거나 이 필드를 비워 둡니다.

gcloud

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

gcloud functions deploy FUNCTION_NAME --clear-max-instances

최대 인스턴스 한도가 삭제됩니다.

한도 및 권장사항

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

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

--max-instances 한도가 지정되지 않은 경우 Cloud Functions는 처리량을 초과하여 수요에 맞게 확장하도록 설계되었습니다. 즉, 이러한 한도를 구성하지 않는 한 함수에서 가질 수 있는 동시 인스턴스 수는 사실상 무제한입니다.

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

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

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

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

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

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

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

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

트래픽 급증 처리

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

배포

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

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

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

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

유휴 인스턴스 및 콜드 스타트 최소화

콜드 스타트의 영향을 최소화하기 위해 Cloud Functions는 종종 함수의 유휴 인스턴스에 대한 예약을 유지합니다. 이러한 인스턴스는 갑작스러운 트래픽 급증이 발생할 경우 요청을 처리할 준비가 되어 있습니다.

예를 들어 인스턴스가 요청 처리를 완료한 후에 인바운드 요청을 처리해야 할 경우에 대비하여 일정 기간 동안 유휴 상태로 유지될 수 있습니다. 유휴 인스턴스는 다른 요청을 처리해야 하는 경우에 대비하여 리소스를 유지할 수 있습니다(예: 열린 데이터베이스 연결). 이러한 유휴 인스턴스는 함수의 특정 버전에 대한 최대 인스턴스의 전체 한도에 포함됩니다. 이러한 유휴 인스턴스에 대해서는 요금이 청구되지 않습니다.

최대 인스턴스 한도 삭제

최대 인스턴스를 0으로 설정하면 기존의 최대 인스턴스 한도가 삭제됩니다. 0 값을 설정해도 함수가 일시중지되지는 않습니다.