Delen via


Dapr-toepassingen schalen met KEDA-schaalders

Azure Container Apps schaalt automatisch HTTP-verkeer naar nul. Als u echter niet-HTTP-verkeer (zoals Dapr pub/sub- en bindingen) wilt schalen, kunt u KEDA-schaalders gebruiken om uw toepassing en de bijbehorende Dapr-sidecar omhoog en omlaag te schalen, op basis van het aantal inkomende gebeurtenissen en berichten dat in behandeling is.

Deze handleiding laat zien hoe u de schaalregels van een Dapr pub/sub-toepassing configureert met een KEDA Messaging Scaler. Raadpleeg de bijbehorende voorbeeld-pub-/subtoepassingen voor context:

In de bovenstaande voorbeelden gebruikt de toepassing de volgende elementen:

  1. De checkout uitgever is een toepassing die voor onbepaalde tijd moet worden uitgevoerd en nooit naar nul moet worden geschaald, ondanks dat er nooit binnenkomend HTTP-verkeer wordt ontvangen.
  2. Het Dapr Azure Service Bus pub/subonderdeel.
  3. Een order-processor abonneecontainer-app haalt berichten op die zijn ontvangen via het orders onderwerp en wordt verwerkt zodra deze binnenkomen.
  4. De schaalregel voor Azure Service Bus, die verantwoordelijk is voor het omhoog schalen van de service en de order-processor bijbehorende Dapr-sidecar wanneer berichten aan het orders onderwerp beginnen te komen.

Diagram met de schaalarchitectuur van de toepassing voor orderverwerking.

Laten we eens kijken hoe u de schaalregels in een Dapr-toepassing kunt toepassen.

Publisher-container-app

De checkout uitgever is een headless service die voor onbepaalde tijd wordt uitgevoerd en nooit naar nul wordt geschaald.

Standaard wijst de Container Apps-runtime een HTTP-schaalregel toe aan toepassingen, die schalen aanstuurt op basis van het aantal binnenkomende HTTP-aanvragen. In het volgende voorbeeld minReplicas is ingesteld op 1. Deze configuratie zorgt ervoor dat de container-app niet het standaardgedrag van schalen naar nul volgt zonder binnenkomend HTTP-verkeer.

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
      }
    }
  }
}

Container-app voor abonnees

De volgende order-processor abonnee-app bevat een aangepaste schaalregel waarmee een resource van het type azure-servicebuswordt bewaakt. Met deze regel wordt de app (en de bijbehorende sidecar) naar behoefte omhoog en omlaag geschaald op basis van het aantal in behandeling zijnde berichten in de 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'
              }
            }
          }
        ]
      }
    }
  }
}

Hoe de schaalschaal werkt

Let op de messageCount eigenschap in de configuratie van de schaalfunctie in de abonnee-app:

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

Met deze eigenschap wordt aangegeven hoeveel berichten elk exemplaar van de toepassing tegelijkertijd kan verwerken. In dit voorbeeld is de waarde ingesteld op 30, waarmee wordt aangegeven dat er één exemplaar van de toepassing moet zijn dat voor elke groep van 30 berichten in het onderwerp wacht.

Als er bijvoorbeeld 150 berichten wachten, schaalt KEDA de app uit naar vijf exemplaren. De eigenschap maxReplicas is ingesteld op 10. Zelfs met een groot aantal berichten in het onderwerp maakt de schaalder nooit meer dan 10 exemplaren van deze toepassing. Deze instelling zorgt ervoor dat u niet te veel omhoog schaalt en te veel kosten maakt.

Volgende stappen

Meer informatie over het gebruik van Dapr-onderdelen met Azure Container Apps.