다음을 통해 공유


Azure Functions에서 이벤트 기반 크기 조정

사용량, Flex 사용 및 프리미엄 계획에서 Azure Functions는 함수를 트리거하는 이벤트 수에 따라 인스턴스를 더 추가하여 리소스 크기를 조정합니다.

함수 앱의 크기 조정 방식은 호스팅 계획에 따라 달라집니다.

  • 사용 계획: 사용 계획에 있는 함수 호스트의 각 인스턴스는 일반적으로 1.5GB의 메모리와 CPU 1개로 제한됩니다. 호스트의 인스턴스는 전체 함수 앱을 지원합니다. 따라서 인스턴스의 함수 앱 공유 리소스 내의 모든 함수는 동시에 크기가 조정됩니다. 함수 앱이 동일한 사용 계획을 공유하는 경우 독립적으로 크기가 조정됩니다.

  • Flex 사용 계획: 이 계획은 각 함수가 자체 그룹에서 크기 조정되는 HTTP, Blob 및 Durable Functions 트리거 함수를 제외하고 독립적으로 크기 조정되는 결정적 함수별 크기 조정 전략을 사용합니다. 자세한 내용은 함수별 크기 조정을 참조하세요. 그런 다음, 이러한 인스턴스는 요청의 동시성에 따라 크기가 조정됩니다.

  • 프리미엄 플랜: 프리미엄 플랜의 특정 크기는 해당 인스턴스에서 해당 계획의 모든 앱에 사용 가능한 메모리 및 CPU를 결정합니다. 계획은 계획에 포함된 앱의 크기 조정 요구 사항에 따라 인스턴스를 스케일 아웃하고 필요에 따라 계획 내에서 앱 크기를 조정합니다.

함수 코드 파일은 함수의 주 스토리지 계정에 있는 Azure Files 공유에 저장됩니다. 함수 앱의 주 스토리지 계정을 삭제하면 함수 코드 파일이 삭제되고 복구할 수 없습니다.

런타임 크기 조정

Azure Functions는 크기 조정 컨트롤러라는 구성 요소를 사용하여 이벤트의 비율을 모니터링하고 규모를 확장하거나 감축할 것인지 결정합니다. 크기 조정 컨트롤러는 각 트리거 유형에 대해 추론을 사용합니다. 예를 들어 Azure Queue Storage 트리거를 사용하는 경우 대상 기반 스케일링을 사용합니다.

Azure Functions 확장 단위는 함수 앱입니다. 함수 앱을 확장하는 경우 Azure Functions 호스트의 여러 인스턴스를 실행하기 위해 더 많은 리소스가 할당됩니다. 반대로, 컴퓨팅 수요가 감소하면 크기 조정 컨트롤러에서 함수 호스트 인스턴스를 제거합니다. 함수 앱 내에서 실행 중인 함수가 없으면 인스턴스 수는 결국 "스케일 인"됩니다.

이벤트를 모니터링하고 인스턴스를 만드는 크기 조정 컨트롤러

콜드 부팅

함수 앱이 몇 분 동안 유휴 상태가 되면 플랫폼은 앱이 실행되는 인스턴스 수를 0으로 크기 조정하도록 결정할 수 있습니다. 다음 요청에는 0에서 1로 크기를 조정하는 추가 대기 시간이 있습니다. 이 대기 시간을 콜드 부팅이라고 합니다. 함수 앱에 필요한 종속성의 수가 콜드 부팅 시간에 영향을 줄 수 있습니다. 콜드 부팅은 응답을 반환해야 하는 HTTP 트리거와 같이 동기 작업에 대한 더 많은 문제입니다. 콜드 부팅이 함수에 영향을 미치는 경우 사용 이외의 계획을 사용하는 것이 좋습니다. 다른 계획은 콜드 부팅을 완화하거나 제거하기 위해 다음과 같은 전략을 제공합니다.

  • 프리미엄 계획: 미리 준비된 인스턴스와 항상 준비된 인스턴스를 둘 다 지원하며 인스턴스는 하나 이상 지원합니다.

  • Flex 사용 계획: 인스턴스 크기 조정 기준으로 정의할 수 있는 항상 준비된 인스턴스 수를 선택적으로 지원합니다.

  • 전용 계획: 계획 자체는 동적으로 확장되지 않지만 Always On 설정을 사용하도록 설정하여 앱을 지속적으로 실행할 수 있습니다.

스케일링 동작 이해

스케일링은 여러 요인에 따라 다르고, 앱은 선택한 트리거 및 언어에 따라 달라질 수 있습니다. 유의해야 할 몇 가지 확장 동작은 다음과 같습니다.

  • 최대 인스턴스: 단일 함수 앱은 플랜에서 허용되는 최댓값까지만 스케일 아웃됩니다. 그러나 단일 인스턴스는 한 번에 둘 이상의 메시지 또는 요청을 처리할 수 있습니다. 필요에 따라 크기를 제한하기 위해 더 작은 최대 크기를 지정할 수 있습니다.
  • 새 인스턴스율: HTTP 트리거의 경우 새 인스턴스는 최대 1초당 한 번씩 할당됩니다. HTTP가 아닌 트리거의 경우 새 인스턴스는 최대 30초마다 한 번씩 할당됩니다. 크기 조정은 프리미엄 플랜에서 실행하면 더 빠릅니다.
  • 대상 기반 크기 조정: 대상 기반 크기 조정은 고객을 위한 빠르고 직관적인 크기 조정 모델을 제공하며 현재 Service Bus 큐 및 토픽, 스토리지 큐, Event Hubs, Apache Kafka 및 Azure Cosmos DB 확장에 대해 지원됩니다. 대상 기반 크기 조정을 검토하여 크기 조정 동작을 이해해야 합니다.
  • 함수별 크기 조정: 몇 가지 주목할 만한 예외를 제외하고, Flex 사용 계획에서 실행되는 함수는 독립 인스턴스에서 크기가 조정됩니다. 예외에는 HTTP 트리거 및 Blob Storage(Event Grid) 트리거가 포함됩니다. 이러한 각 트리거 유형은 동일한 인스턴스에서 그룹으로 함께 크기가 조정됩니다. 마찬가지로 모든 Durable Functions 트리거도 인스턴스를 공유하고 함께 크기가 조정됩니다. 자세한 내용은 함수별 크기 조정을 참조하세요.
  • 최대 모니터링 트리거: 현재 크기 조정 컨트롤러는 최대 100개까지 트리거를 모니터링하여 크기 조정을 결정할 수 있습니다. 앱에 100개가 넘는 이벤트 기반 트리거가 있는 경우, 실행되는 처음 100개 트리거만을 기준으로 크기 조정을 결정합니다. 자세한 내용은 확장 가능한 앱의 모범 사례 및 패턴을 참조하세요.

스케일 아웃 제한

앱에서 스케일 아웃에 사용할 수 있는 최대 인스턴스 수를 제한할 수 있습니다. 이는 데이터베이스와 같은 다운스트림 구성 요소의 처리량이 제한된 경우에 가장 일반적입니다. 다양한 호스팅 계획을 실행할 때 최대 크기 조정 제한은 크기 조정 제한을 참조하세요.

Flex 사용 계획

기본적으로 Flex 사용 계획에서 실행되는 앱에는 100 전체 인스턴스 제한이 있습니다. 현재 가장 낮은 최대 인스턴스 수 값은 40이고, 지원되는 최대 인스턴스 수 값은 1000입니다. az functionapp create 명령을 사용하여 Flex 사용 계획에서 함수 앱을 만드는 경우 --maximum-instance-count 매개 변수를 사용하여 앱의 최대 인스턴스 수를 설정합니다.

Flex 사용량 앱의 최대 인스턴스 수를 최대 1,000개로 변경할 수 있지만, 이 수치에 도달하기 전에 앱이 할당량 한도에 도달합니다. 자세한 내용은 지역 구독 메모리 할당량을 검토하세요.

이 예제에서는 최대 인스턴스 수가 200인 앱을 만듭니다.

az functionapp create --resource-group <RESOURCE_GROUP> --name <APP_NAME> --storage <STORAGE_ACCOUNT_NAME> --runtime <LANGUAGE_RUNTIME> --runtime-version <RUNTIME_VERSION> --flexconsumption-location <REGION> --maximum-instance-count 200

이 예제에서는 az functionapp scale config set 명령을 사용하여 기존 앱의 최대 인스턴스 수를 150으로 변경합니다.

az functionapp scale config set --resource-group <RESOURCE_GROUP> --name <APP_NAME> --maximum-instance-count 150

사용량/프리미엄 계획

사용량 또는 탄력적 프리미엄 계획에서는 functionAppScaleLimit 사이트 구성 설정의 값을 수정하여 앱의 최대 한도를 낮출 수 있습니다. functionAppScaleLimit는 무제한으로 0 또는 null로 설정하거나, 1과 앱의 최댓값 사이의 값으로 설정할 수 있습니다.

az resource update --resource-type Microsoft.Web/sites -g <RESOURCE_GROUP> -n <FUNCTION_APP-NAME>/config/web --set properties.functionAppScaleLimit=<SCALE_LIMIT>

규모 감축 동작

이벤트 기반 스케일링은 함수에 대한 수요가 감소하면 용량을 자동으로 줄입니다. 현재 함수 실행의 인스턴스를 드레이닝하여 이 작업을 수행한 다음, 해당 인스턴스를 제거합니다. 이 동작은 드레이닝 모드로 로그됩니다. 현재 실행 중인 함수의 유예 기간은 소비 플랜 앱의 경우 최대 10분, Flex 사용량과 프리미엄 플랜 앱의 경우 최대 60분까지 연장할 수 있습니다. 이벤트 기반 스케일링 및 이 동작은 전용 플랜 앱에 적용되지 않습니다.

규모 감축 동작에는 다음과 같은 고려 사항이 적용됩니다.

  • 사용 계획에 따라 Windows에서 실행되는 앱의 경우 2021년 5월 이후에 만든 앱만 기본적으로 드레이닝 모드 동작을 사용하도록 설정되어 있습니다.
  • Service Bus 트리거를 사용하여 함수를 정상적으로 종료하려면 버전 4.2.0 이상 버전의 Service Bus 확장을 사용합니다.

함수별 크기 조정

Flex Consumption 플랜에만 적용됩니다.

Flex 사용 계획은 함수별 크기 조정 동작을 구현한다는 점에서 고유합니다. HTTP 트리거, Blob(Event Grid) 트리거 및 Durable Functions를 제외한 함수별 크기 조정에서는 앱의 다른 모든 함수 트리거 유형이 독립적인 인스턴스에서 크기가 조정됩니다. 자체 공유 인스턴스가 있는 모든 Blob(Event Grid) 및 모든 Durable Functions 트리거와 마찬가지로 앱의 HTTP 트리거는 모두 동일한 인스턴스에서 그룹으로 함께 확장됩니다.

다음 함수가 포함된 Flex 사용 계획을 호스트하는 함수 앱을 고려합니다.

function1 function2 function3 function4 function5 function6 function7
HTTP 트리거 HTTP 트리거 오케스트레이션 트리거(지속성) 작업 트리거(지속성) Service Bus 트리거 Service Bus 트리거 Event Hubs 트리거

이 예에서는 다음이 적용됩니다.

확장성 있는 앱의 모범 사례 및 패턴

함수 앱에는 호스트 구성, 런타임 공간 및 리소스 효율성을 비롯하여 크기 조정 방법에 영향을 주는 여러 측면이 있습니다. 자세한 내용은 성능 고려 사항 문서의 확장성 섹션을 참조하세요. 또한 함수 앱의 확장에 따라 연결이 어떻게 작동하는지도 알고 있어야 합니다. 자세한 내용은 Azure Functions에서 연결을 관리하는 방법을 참조하세요.

앱에 이벤트 기반 트리거를 사용하는 함수가 100개 넘게 있는 경우, 앱을 하나 이상의 앱으로 나누고 각 앱에 이벤트 기반 함수가 100개 미만이 되도록 하는 것이 좋습니다.

Python 및 Node.js의 크기 조정에 대한 자세한 내용은 Azure Functions Python 개발자 가이드 - 크기 조정 및 동시성Azure Functions Node.js 개발자 가이드 - 크기 조정 및 동시성을 참조하세요.

다음 단계

자세한 내용은 다음 문서를 참조하세요.