Condividi tramite


Ridimensionare le applicazioni Dapr con scaler KEDA

App Azure Container ridimensiona automaticamente il traffico HTTP a zero. Tuttavia, per ridimensionare il traffico non HTTP (ad esempio dapr pub/sub e associazioni), è possibile usare i scaler 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 un scaler 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 checkout server di pubblicazione è un'applicazione che deve essere eseguita in modo illimitato e non ridurre mai fino a zero, nonostante non riceva mai traffico HTTP in ingresso.
  2. Componente dapr bus di servizio di Azure pub/sub.
  3. Un'app order-processor contenitore sottoscrittore preleva i messaggi ricevuti tramite l'argomento orders ed elaborati man mano che arrivano.
  4. Regola di scalabilità per bus di servizio di Azure, responsabile della scalabilità verticale del order-processor servizio e del relativo sidecar Dapr quando i messaggi iniziano ad arrivare all'argomentoorders.

Diagram showing the scaling architecture of the order processing application.

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

App contenitore del server di pubblicazione

Il checkout server di pubblicazione è un servizio headless che viene eseguito per un periodo illimitato e non viene mai ridotto 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 viene 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 seguente order-processor 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'
              metadata: {
                topicName: 'orders'
                subscriptionName: 'membership-orders'
                messageCount: '30'
              }
              auth: [
                {
                  secretRef: 'sb-root-connectionstring'
                  triggerParameter: 'connection'
                }
              ]
            }
          }
        ]
      }
    }
  }
}

Funzionamento del scaler

Si noti la proprietà nella messageCount configurazione del ridimensionatore nell'app sottoscrittore:

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

Questa proprietà indica al scaler 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 maxReplicas proprietà è impostata su 10, vale a dire anche con un numero elevato di messaggi nell'argomento, il ridimensionatore non crea mai più di 10 istanze di questa applicazione. Questa impostazione garantisce che non si aumentano troppo e si accumulano troppi costi.

Passaggi successivi

Altre informazioni sull'uso dei componenti dapr con App Azure Container.