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

사용 및 프리미엄 계획에서 Azure Functions는 함수 호스트의 추가 인스턴스를 추가하여 CPU 및 메모리 리소스의 크기를 조정합니다. 인스턴스의 수는 함수를 트리거하는 이벤트의 수에 따라 결정됩니다.

소비 플랜에 있는 함수 호스트의 각 인스턴스는 일반적으로 1.5GB의 메모리와 CPU 1개로 제한됩니다. 호스트의 인스턴스는 전체 함수 앱입니다. 즉, 함수 앱 내에 있는 모든 기능은 인스턴스 내에서 리소스를 공유하고 동시에 크기 조정됩니다. 동일한 사용 계획을 공유하는 함수 앱은 독립적으로 크기를 조정합니다. 프리미엄 계획에서 계획 크기는 해당 인스턴스에서 해당 계획의 모든 앱에 대해 사용 가능한 메모리와 CPU를 결정합니다.

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

런타임 크기 조정

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

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

Scale controller monitoring events and creating instances

콜드 부팅

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

스케일링 동작 이해

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

  • 최대 인스턴스: 단일 함수 앱은 플랜에서 허용되는 최댓값까지만 스케일 아웃됩니다. 단일 인스턴스는 동시에 둘 이상의 메시지 또는 요청을 처리할 수 있지만 동시 실행 수를 제한하지 않습니다. 필요에 따라 크기를 제한하기 위해 더 작은 최대 크기를 지정할 수 있습니다.
  • 새 인스턴스율: HTTP 트리거의 경우 새 인스턴스는 최대 1초당 한 번씩 할당됩니다. HTTP가 아닌 트리거의 경우 새 인스턴스는 최대 30초마다 한 번씩 할당됩니다. 크기 조정은 프리미엄 플랜에서 실행하면 더 빠릅니다.
  • 대상 기반 스케일링: 대상 기반 스케일링은 고객을 위한 빠르고 직관적인 스케일링 모델을 제공하며 현재 Service Bus 큐 및 토픽, 스토리지 큐, Event Hubs 및 Cosmos DB 확장에 대해 지원됩니다. 대상 기반 스케일링을 검토하여 스케일링 동작을 이해해야 합니다.

스케일 아웃 제한

앱을 스케일 아웃하는 데 사용되는 최대 인스턴스 수를 제한할 수 있습니다. 이는 데이터베이스와 같은 다운스트림 구성 요소의 처리량이 제한되는 경우에 가장 일반적입니다. 기본적으로 사용 계획 함수는 최대 200개의 인스턴스까지 스케일 아웃되고 프리미엄 계획 함수는 최대 100개의 인스턴스로 스케일 아웃됩니다. 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분, 프리미엄 플랜 앱의 경우 최대 60분까지 연장할 수 있습니다. 이벤트 기반 스케일링 및 이 동작은 전용 플랜 앱에 적용되지 않습니다.

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

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

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

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

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

청구 모델

다른 계획의 요금 청구는 Azure Functions 가격 책정 페이지에 자세히 설명되어 있습니다. 사용량은 함수 앱 수준에서 집계되며 함수 코드가 실행될 때만 계산됩니다. 다음은 요금 청구 단위입니다.

  • 기가바이트-초 단위의 리소스 소비(GB-s). 함수 앱 내 모든 함수의 메모리 크기와 실행 시간 조합으로 계산됩니다.
  • 실행 횟수. 이벤트 트리거에 대한 응답으로 함수가 실행될 때마다 계산됩니다.

사용량 청구서를 이해하는 방법에 대한 유용한 쿼리와 정보는 청구 FAQ에서 찾을 수 있습니다.

다음 단계

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