Configurare la scalabilità automatica per le app Durable Task SDK in App contenitore di Azure

Quando si ospitano app Durable Task SDK in App contenitore di Azure, è possibile configurare la scalabilità automatica in modo che la piattaforma regola automaticamente il numero di repliche in base all'orchestrazione, all'attività o al carico di lavoro dell'entità.

In questo articolo vengono illustrate le operazioni seguenti:

  • Impostare il numero minimo e massimo di repliche per l'applicazione del contenitore.
  • Aggiungere regole di scalabilità che rispondono agli elementi di lavoro di Durable Task Scheduler.
  • Implementare e verificare un esempio di scalabilità automatica utilizzando Azure CLI per sviluppatori.

Annotazioni

La scalabilità automatica è supportata per le app compilate usando gli SDK per attività permanenti e ospitate nelle app azure container. Questa funzionalità usa il azure-durabletask-scheduler scaler KEDA.

Importante

L'impostazione minReplicas su 0 abilita la scalabilità su zero, che consente di risparmiare sui costi quando sono inattivi ma introduce la latenza di avvio a freddo all'arrivo di nuovi elementi di lavoro. Impostare minReplicas su 1 o superiore se il carico di lavoro è sensibile alla latenza.

Configurare l'autoscaler

È possibile impostare la configurazione della scalabilità automatica tramite il portale di Azure, un modello di Bicep e il interfaccia della riga di comando di Azure.

  1. Nel portale di Azure passare all'app contenitore.

  2. Nel menu a sinistra selezionare Applicazione>Scala.

  3. Imposta i valori Repliche minime e Repliche massime per la revisione.

    Screenshot della configurazione del ridimensionamento minimo e massimo per le repliche nel portale di Azure.

  4. Selezionare Aggiungi per creare una nuova regola di scalabilità. Impostare Tipo su Custom e configurare i campi dello Scheduler di Attività Durevoli.

    Screenshot della configurazione correlata al pianificatore di attività durevole per il ridimensionamento nel portale di Azure.

  5. Verifica che la casella di controllo Autentica con un'identità gestita sia selezionata e scegli l'identità collegata alla tua risorsa dello scheduler e al task hub.

  6. Seleziona Salva.

Campo Descrizione Esempio
Numero minimo di repliche Numero minimo di repliche consentite per la revisione del contenitore in qualsiasi momento. 1
Numero massimo di repliche Numero massimo di repliche consentite per la revisione del contenitore in un determinato momento. 10
endpoint Endpoint del pianificatore di attività durevole a cui si connette lo scaler. https://dts-ID.centralus.durabletask.io
maxConcurrentWorkItemsCount Numero massimo di elementi di lavoro che una singola replica elabora contemporaneamente. Valori più bassi fanno sì che il scaler aggiunga repliche più presto. Iniziare con 1 per il lavoro a elevato utilizzo della CPU; aumentare per i carichi di lavoro associati a I/O. 1
taskhubName Nome dell'hub attività connesso al pianificatore. taskhub-ID
Tipo di elemento di lavoro Tipo di elemento di lavoro inviato. Le opzioni includono Orchestration, Activity, o Entity. Orchestration
Identità gestita Identità gestita assegnata dall'utente o dal sistema collegata al pianificatore e alla risorsa dell'hub attività. /subscriptions/<SUB_ID>/resourceGroups/<RG>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<IDENTITY_NAME>

Esercitazione: Distribuire un'app contenitore con scalabilità automatica

La scalabilità automatica è già stata configurata in un'app esistente? È possibile ignorare questa sezione. Per una procedura dettagliata pratica, segui i passaggi riportati di seguito per distribuire Autoscaling nell'esempio App contenitore di Azure usando la CLI di Azure Developer. L'esempio distribuisce un'app .NET Durable Task SDK che usa il modello di concatenamento delle funzioni e include un scaler KEDA preconfigurato.

Annotazioni

Anche se questo esempio usa Durable Task .NET SDK, la scalabilità automatica è indipendente dal linguaggio.

Prerequisiti

Configurazione dell'ambiente

  1. Clonare la directory Azure-Samples/Durable-Task-Scheduler.

    git clone https://github.com/Azure-Samples/Durable-Task-Scheduler.git
    
  2. Eseguire l'autenticazione con Azure usando l'interfaccia della riga di comando per sviluppatori di Azure.

    azd auth login
    

Distribuire la soluzione usando l'interfaccia della riga di comando per sviluppatori di Azure

  1. Accedere alla directory AutoscalingInACA di esempio.

    cd /path/to/Durable-Task-Scheduler/samples/scenarios/AutoscalingInACA
    
  2. Inizializzare l'ambiente dell'interfaccia della riga di comando per sviluppatori Azure (è necessaria solo la prima volta):

    azd init
    
  3. Effettuare il provisioning delle risorse e distribuire l'applicazione:

    azd up
    
  4. Quando richiesto nel terminale, specificare i parametri seguenti.

    Parametro Descrizione
    Nome dell'ambiente Prefisso per il gruppo di risorse creato per contenere tutte le risorse Azure.
    Località di Azure La posizione di Azure per le tue risorse.
    Sottoscrizione di Azure La sottoscrizione Azure per le tue risorse.

    Questo processo può richiedere del tempo. Al termine del comando azd up, l'output dell'interfaccia a riga di comando visualizza due collegamenti al portale di Azure per controllare il progresso della distribuzione. L'output illustra anche come azd up:

    • Crea e configura tutte le risorse Azure necessarie tramite i file di Bicep forniti nella directory ./infra usando azd provision. Dopo il provisioning tramite Azure Developer CLI, è possibile accedere a queste risorse tramite il portale di Azure. I file che effettuano il provisioning delle risorse Azure includono:
      • main.parameters.json
      • main.bicep
      • Una directory delle risorse app organizzata in base alle funzionalità
      • Libreria di riferimento core che contiene i moduli Bicep usati dai modelli azd
    • Distribuisce il codice usando azd deploy

    Output previsto

    Packaging services (azd package)
    
    (✓) Done: Packaging service client
    - Image Hash: {IMAGE_HASH}
    - Target Image: {TARGET_IMAGE}
    
    
    (✓) Done: Packaging service worker
    - Image Hash: {IMAGE_HASH}
    - Target Image: {TARGET_IMAGE}
    
    
    Provisioning Azure resources (azd provision)
    Provisioning Azure resources can take some time.
    
    Subscription: SUBSCRIPTION_NAME (SUBSCRIPTION_ID)
    Location: West US 2
    
     You can view detailed progress in the Azure portal:
     https://portal.azure.com/#view/HubsExtension/DeploymentDetailsBlade/~/overview/id/%2Fsubscriptions%SUBSCRIPTION_ID%2Fproviders%2FMicrosoft.Resources%2Fdeployments%2FCONTAINER_APP_ENVIRONMENT
    
     (✓) Done: Resource group: GENERATED_RESOURCE_GROUP (1.385s)
     (✓) Done: Virtual Network: VNET_ID (862ms)
     (✓) Done: Container Apps Environment: GENERATED_CONTAINER_APP_ENVIRONMENT (54.125s)
     (✓) Done: Container Registry: GENERATED_REGISTRY (1m27.747s)
     (✓) Done: Container App: SAMPLE_CLIENT_APP (21.39s)
     (✓) Done: Container App: SAMPLE_WORKER_APP (24.136s)   
    
    Deploying services (azd deploy)
    
     (✓) Done: Deploying service client
     - Endpoint: https://SAMPLE_CLIENT_APP.westus2.azurecontainerapps.io/
    
     (✓) Done: Deploying service worker
     - Endpoint: https://SAMPLE_WORKER_APP.westus2.azurecontainerapps.io/
    
    
    SUCCESS: Your up workflow to provision and deploy to Azure completed in 10 minutes 34 seconds.   
    

Confermare la corretta distribuzione

Nel portale di Azure verificare che le orchestrazioni siano in esecuzione correttamente.

  1. Copiare il nome del gruppo di risorse dall'output del terminale.

  2. Accedere al portale di Azure e cercare il nome del gruppo di risorse.

  3. Nella pagina delle informazioni generali del gruppo di risorse, fare clic sulla risorsa relativa all'app contenitore cliente.

  4. Selezionare Monitoraggio>Flusso di log.

  5. Verificare che il contenitore client registri le attività di concatenamento delle funzioni.

    Screenshot del flusso di log del container client nel portale di Azure.

  6. Tornare alla pagina del gruppo di risorse per selezionare il worker contenitore.

  7. Selezionare Monitoraggio>Flusso di log.

  8. Verificare che il contenitore del ruolo di lavoro registri le attività di concatenamento delle funzioni.

    Screenshot del flusso di log del contenitore del nodo di lavoro nel portale di Azure.

Informazioni sul scaler personalizzato

Questo esempio include un azure.yaml file di configurazione. Quando hai eseguito azd up, hai distribuito l'intera soluzione di esempio in Azure, incluso uno scalatore personalizzato per le applicazioni container che si ridimensionano automaticamente in base al carico di lavoro dello Scheduler di Attività Durable.

Scaler personalizzato:

  • monitora il numero di orchestrazioni in sospeso nell'hub attività.
  • Aumenta il numero di repliche dei lavoratori con l'aumentare del carico di lavoro.
  • Riduce le prestazioni quando il carico diminuisce.
  • Fornisce un utilizzo efficiente delle risorse associando la capacità alla domanda.

Verificare la configurazione del scaler

Verificare che la scalabilità automatica funzioni correttamente nella soluzione distribuita.

  1. Nel portale di Azure passare all'app di lavoro.

  2. Dal menu a sinistra, selezionare Applicazione>Revisioni e repliche.

  3. Selezionare la scheda Repliche per verificare se l'applicazione stia scalando.

    Screenshot della pagina Revisioni e repliche che mostra le repliche ridimensionate nel Azure portal.

  4. Nel menu a sinistra, selezionare Applicazione>Scala.

  5. Selezionare il nome della regola di scalabilità per visualizzare le impostazioni del ridimensionatore.