Condividi tramite


Ridimensionare le applicazioni Dapr con strumento di scalabilità KEDA

App contenitore di Azure ridimensiona automaticamente il traffico HTTP a zero. Tuttavia, per ridimensionare il traffico non HTTP, ad esempio Dapr pub/sub e binding, è possibile usare gli strumenti di scalabilità KEDA per ridimensionare l'applicazione e il relativo sidecar Dapr, in base al numero di eventi e messaggi in ingresso in sospeso.

Questa guida illustra come configurare le regole di scalabilità di un'applicazione pub/sub Dapr con uno strumento di scalabilità di messaggistica KEDA. Per il contesto, fare riferimento alle applicazioni pub/sub di esempio corrispondenti:

Negli esempi precedenti l'applicazione usa gli elementi seguenti:

  1. Il server di pubblicazione checkout è un'applicazione destinata all'esecuzione illimitata e mai ridotta a zero, nonostante non riceva mai traffico HTTP in ingresso.
  2. Componente pub/sub del bus di servizio di Azure Dapr.
  3. Un'app contenitore sottoscrittore order-processor raccoglie i messaggi ricevuti tramite l'argomento orders e li elabora man mano che arrivano.
  4. Regola di scalabilità per il bus di servizio di Azure, responsabile del ridimensionamento del servizio order-processor e del relativo sidecar Dapr quando i messaggi iniziano ad arrivare all'argomento orders.

Diagramma che mostra l'architettura di ridimensionamento dell'applicazione di elaborazione degli ordini.

Di seguito viene illustrato come applicare le regole di ridimensionamento in un'applicazione Dapr.

App contenitore dell'editore

Il server di pubblicazione checkout è un servizio headless che viene eseguito per un periodo illimitato e non riduce mai il numero di istanze a zero.

Per impostazione predefinita, il runtime di App contenitore assegna una regola di scalabilità basata su HTTP alle applicazioni, che determina il ridimensionamento in base al numero di richieste HTTP in ingresso. Nell'esempio seguente minReplicas è impostato su 1. Questa configurazione garantisce che l'app contenitore non segua il comportamento predefinito del ridimensionamento a zero senza traffico HTTP in ingresso.

resource checkout 'Microsoft.App/containerApps@2022-03-01' = {
  name: 'ca-checkout-${resourceToken}'
  location: location
  identity: {
    type: 'SystemAssigned'
  }
  properties: {
    //...
    template: {
      //...
      // Scale the minReplicas to 1
      scale: {
        minReplicas: 1
        maxReplicas: 1
      }
    }
  }
}

App contenitore sottoscrittore

L'app sottoscrittore order-processor seguente include una regola di scalabilità personalizzata che monitora una risorsa di tipo azure-servicebus. Con questa regola, l'app (e il relativo sidecar) aumenta e riduce le prestazioni in base al numero di messaggi in sospeso nel bus.

resource orders 'Microsoft.App/containerApps@2022-03-01' = {
  name: 'ca-orders-${resourceToken}'
  location: location
  tags: union(tags, {
      'azd-service-name': 'orders'
    })
  identity: {
    type: 'SystemAssigned'
  }
  properties: {
    managedEnvironmentId: containerAppsEnvironment.id
    configuration: {
      //...
      // Enable Dapr on the container app
      dapr: {
        enabled: true
        appId: 'orders'
        appProtocol: 'http'
        appPort: 5001
      }
      //...
    }
    template: {
      //...
      // Set the scale property on the order-processor resource
      scale: {
        minReplicas: 0
        maxReplicas: 10
        rules: [
          {
            name: 'topic-based-scaling'
            custom: {
              type: 'azure-servicebus'
              identity: 'system'
              metadata: {
                topicName: 'orders'
                subscriptionName: 'membership-orders'
                messageCount: '30'
              }
            }
          }
        ]
      }
    }
  }
}

Funzionamento dello strumento di scalabilità

Si noti la proprietà messageCount nella configurazione dello strumento di scalabilità nell'app sottoscrittore:

{
  //...
  properties: {
    //...
    template: {
      //...
      scale: {
        //...
        rules: [
          //...
          custom: {
            //...
            metadata: {
              //...
              messageCount: '30'
            }
          }
        ]
      }
    }
  }
}

Questa proprietà indica allo strumento di scalabilità il numero di messaggi che ogni istanza dell'applicazione può elaborare contemporaneamente. In questo esempio, il valore è impostato su 30, a indicare che deve essere presente un'istanza dell'applicazione creata per ogni gruppo di 30 messaggi in attesa nell'argomento.

Ad esempio, se sono in attesa 150 messaggi, KEDA ridimensiona l'app su cinque istanze. La proprietà maxReplicas è impostata su 10. Anche con un numero elevato di messaggi nell'argomento, il ridimensionatore non crea mai più di 10 istanze di questa applicazione. Questa impostazione garantisce un dimensionamento e costi non eccessivi.

Passaggi successivi

Altre informazioni sull'uso dei componenti Dapr con App contenitore di Azure.