다음을 통해 공유


Azure Functions 지속성 작업 스케줄러(미리 보기)

지속성 작업 스케줄러는 Azure에서 지속성 실행을 제공합니다. 지속성 실행은 자동 재시도 및 상태 지속성을 통해 오류 및 중단을 처리하는 실행 코드에 대한 내결함성 접근 방식입니다. 지속성 실행은 다음과 같은 시나리오에 도움이 됩니다.

  • 분산 트랜잭션
  • 다중 에이전트 조율
  • 데이터 처리
  • 인프라 관리 및 기타.

오케스트레이션 프레임워크

Azure는 내결함성을 설계할 필요 없이 모든 컴퓨팅 환경에서 실행되는 상태 저장 앱을 빌드하는 데 사용할 수 있는 두 가지 개발자 지향 오케스트레이션 프레임워크를 제공합니다. 다음 오케스트레이션 프레임워크에서 지속성 작업 스케줄러를 사용할 수 있습니다.

  • Durable Functions (듀러블 펑션)
  • 내구성 있는 작업 SDK

프로젝트에 더 적합한 오케스트레이션을 알아봅니다.

건축학

모든 지속성 작업 스케줄러 오케스트레이션 프레임워크의 경우 Azure Resource Manager를 사용하여 Microsoft.DurableTask/scheduler 유형의 스케줄러 인스턴스를 만들 수 있습니다. 각 스케줄러 리소스에는 내부적으로 다음과 같이 최적화된 고유한 전용 컴퓨팅 및 메모리 리소스가 있습니다.

  • 오케스트레이터 작업 항목, 활동 작업 항목 및 엔터티 작업 항목 배포
  • 대기 시간을 최소화하면서 대규모로 기록 저장 및 쿼리
  • 지속성 작업 스케줄러 대시보드를 통해 풍부한 모니터링 환경 제공

BYO 스토리지 공급자와 달리 지속성 작업 스케줄러 공급자는 지속성 작업 프레임워크의 특정 요구 사항에 맞게 최적화된 용도로 빌드된 백 엔드-as-a-Service입니다.

다음 다이어그램에서는 지속성 작업 스케줄러 백 엔드의 아키텍처와 연결된 앱과의 상호 작용을 보여 줍니다.

지속성 작업 스케줄러 아키텍처의 다이어그램.

운영 분리

지속성 작업 스케줄러는 Azure에서 앱과 별도의 리소스로 실행됩니다. 이러한 격리는 다음과 같은 여러 가지 이유로 중요합니다.

  • 리소스 사용 감소
    BYO 스토리지 공급자 대신 지속성 작업 스케줄러와 같은 관리형 스케줄러를 사용하면 파티션 관리 및 기타 복잡한 상태 저장소 상호 작용의 오버헤드로 인한 CPU 및 메모리 리소스 사용량이 줄어듭니다.

  • 오류 격리
    스케줄러를 앱에서 분리하면 연속 오류의 위험이 줄어들고 연결된 앱의 전반적인 안정성이 향상됩니다.

  • 독립적인 크기 조정
    더 나은 인프라 리소스 관리 및 비용 최적화를 위해 스케줄러 리소스를 앱과 독립적으로 확장할 수 있습니다. 예를 들어 여러 앱이 동일한 스케줄러 리소스를 공유할 수 있으므로 여러 팀 또는 프로젝트가 있는 조직에 유용합니다.

  • 향상된 지원 환경
    지속성 작업 스케줄러는 관리되는 서비스로, 기본 인프라와 관련된 문제에 대한 간소화된 지원 및 진단을 제공합니다.

앱 연결

앱은 gRPC 연결을 통해 스케줄러 리소스에 연결하고, TLS를 사용하여 보호되며, 앱의 ID로 인증됩니다. 엔드포인트 주소는 {scheduler-name}.{region}.durabletask.io와 유사한 형식입니다. 예: myscheduler-123.westus2.durabletask.io.

작업 항목은 푸시 모델을 사용하여 스케줄러에서 앱으로 스트리밍되어 엔드 투 엔드 대기 시간을 개선하고 폴링의 필요성을 제거합니다. 앱은 여러 작업 항목을 병렬로 처리하고 해당 오케스트레이션, 활동 또는 엔터티 작업이 완료되면 스케줄러에 응답을 다시 보낼 수 있습니다.

상태 관리

지속성 작업 스케줄러는 상태 관리를 위한 별도의 스토리지 계정 없이 내부적으로 오케스트레이션 및 엔터티의 상태를 관리합니다. 내부 상태 저장소는 Durable Functions 및 Durable Task SDK와 함께 사용하기 위해 고도로 최적화되어 내구성과 안정성을 향상시키고 대기 시간을 줄입니다.

스케줄러는 메모리 내 스토리지와 영구 내부 스토리지의 조합을 사용하여 상태를 관리합니다.

  • 메모리 내 저장소는 일시적인 상태를 관리하는 데 사용됩니다.
  • 영구 저장소는 복구 및 다중 인스턴스 쿼리 작업에 사용됩니다.

주요 기능

지속성 작업 스케줄러 오케스트레이션 프레임워크 중 하나를 구현하는 경우 몇 가지 주요 주요 사항을 활용할 수 있습니다.

지속성 작업 스케줄러 대시보드

스케줄러 리소스가 만들어지면 해당 대시보드가 기본 제공됩니다. 대시보드는 모든 오케스트레이션 및 엔터티 인스턴스에 대한 개요를 제공하며 다음을 수행할 수 있습니다.

  • 다른 기준에 따라 빠르게 필터링합니다.
  • 상태, 기간, 입력/출력 등 오케스트레이션 인스턴스에 대한 데이터를 수집합니다.
  • 인스턴스를 드릴하여 하위 오케스트레이션 및 활동에 대한 데이터를 가져옵니다.
  • 오케스트레이션 인스턴스 일시 중지, 종료 또는 다시 시작과 같은 관리 작업을 수행합니다.

대시보드에 대한 액세스는 ID 및 역할 기반 액세스 제어를 통해 보호됩니다.

자세한 내용은 지속성 작업 스케줄러 대시보드를 사용하여 오케스트레이션 디버그 및 관리를 참조하세요.

여러 작업 허브

상태는 작업 허브에서 지속적으로 유지됩니다. 작업 허브:

  • 오케스트레이션 및 엔터티 인스턴스에 대한 논리적 컨테이너입니다.
  • 상태 저장소를 분할하는 방법을 제공합니다.

하나의 스케줄러 인스턴스를 사용하면 여러 앱에서 사용할 수 있는 여러 작업 허브를 만들 수 있습니다. 각 작업 허브는 자체 모니터링 대시보드를 가져옵니다. 작업 허브에 액세스하려면 호출자의 ID에 필요한 RBAC(역할 기반 액세스 제어) 권한이 있어야 합니다.

여러 작업 허브를 만들면 독립적으로 관리할 수 있는 여러 워크로드가 격리됩니다. 예를 들어, 다음을 할 수 있습니다:

  • 각 환경(개발, 테스트, prod)에 대한 작업 허브를 만듭니다.
  • 조직 내의 여러 팀에 대한 작업 허브를 만듭니다.
  • 여러 앱에서 동일한 스케줄러 인스턴스를 공유합니다.

스케줄러 공유는 여러 팀에 오케스트레이션이 필요한 시나리오가 있는 경우 비용을 최적화하는 좋은 방법입니다. 하나의 스케줄러 인스턴스에서 무제한 작업 허브를 만들 수 있지만 동일한 리소스를 공유합니다. 한 작업 허브가 많이 로드되면 다른 작업 허브의 성능에 영향을 줄 수 있습니다.

로컬 개발을 위한 에뮬레이터

지속성 작업 스케줄러 에뮬레이터는 Docker 컨테이너에서 로컬로 실행되는 스케줄러 백 엔드의 경량 버전입니다. 이를 통해 다음을 수행할 수 있습니다.

  • Azure에 배포할 필요 없이 Durable Function 앱을 개발하고 테스트합니다.
  • Azure에서와 마찬가지로 오케스트레이션 및 엔터티를 모니터링하고 관리합니다.

기본적으로 에뮬레이터는 라는 default단일 작업 허브를 노출 합니다. 여러 작업 허브를 노출하려면 에뮬레이터를 시작하고 작업 허브 이름의 쉼표로 구분된 목록을 사용하여 환경 변수를 지정 DTS_TASK_HUB_NAMES 합니다. 예를 들어, 두 작업 허브 taskhub1taskhub2를 사용하도록 설정하려면 다음 명령을 실행할 수 있습니다.

docker run -d -p 8080:8080 -e DTS_TASK_HUB_NAMES=taskhub1,taskhub2 mcr.microsoft.com/dts/dts-emulator:latest

비고

에뮬레이터는 로컬 메모리에 오케스트레이션 및 엔터티 상태를 내부적으로 저장하므로 프로덕션 사용에 적합하지 않습니다.

다음 명령을 실행하여 사용 가능한 모든 에뮬레이터 버전을 볼 수 있습니다.

curl -s https://mcr.microsoft.com/v2/dts/dts-emulator/tags/list

오토퍼지 데이터 보존 정책

효율적인 스토리지 사용을 위해 오래된 오케스트레이션 데이터를 주기적으로 제거해야 합니다. 지속성 작업 스케줄러의 자동 정리 기능은 오케스트레이션 인스턴스 정리를 자동으로 관리하는 간소화되고 구성 가능한 솔루션을 제공합니다. Durable Task Scheduler에서 자동 정리 보존 정책 설정에 대해 자세히 알아보세요.

제한 사항 및 고려 사항

  • 사용 가능한 지역:

    지속성 작업 스케줄러 리소스는 현재 Azure 지역의 하위 집합에서 만들 수 있습니다. 다음 명령을 실행하여 지원되는 지역 목록을 가져올 수 있습니다.

    az provider show --namespace Microsoft.DurableTask --query "resourceTypes[?resourceType=='schedulers'].locations | [0]" --out table
    

    지속성 함수 앱과 지속성 작업 스케줄러 리소스에 동일한 지역을 사용하여 성능 및 특정 네트워크 관련 기능을 최적화하는 것이 좋습니다.

  • Scheduler 할당량:

    현재 구독 당 지역당 최대 5개의 스케줄러를 만들 수 있습니다.

  • 최대 페이로드 크기:

    지속성 작업 스케줄러에는 다음 JSON 직렬화된 데이터 형식에 대한 최대 페이로드 크기 제한이 있습니다.

    데이터 형식 최대 크기
    오케스트레이터 입력 및 출력 1MB
    작업 입력 및 출력 1MB
    외부 이벤트 데이터 1MB
    오케스트레이션 사용자 지정 상태 1MB
    개체 상태 1MB
  • 기능 동등성:

    다음과 같은 일부 기능은 지속성 작업 스케줄러 백 엔드에서 아직 사용할 수 없습니다.

    비고

    지속성 작업 스케줄러 백 엔드가 일반 공급에 접근함에 따라 기능 가용성이 변경될 수 있습니다. 문제를 보고하거나 새 기능을 요청하려면 지속성 작업 스케줄러 GitHub 리포지토리에 문제를 제출합니다.

다음 단계