Dela via


Skala Dapr-program med KEDA-skalor

Azure Container Apps skalar automatiskt HTTP-trafik till noll. Men om du vill skala icke-HTTP-trafik (till exempel Dapr pub/sub och bindningar) kan du använda KEDA-skalare för att skala ditt program och dess Dapr-sidovagn upp och ned, baserat på antalet väntande inkommande händelser och meddelanden.

Den här guiden visar hur du konfigurerar skalningsreglerna för ett Dapr pub/sub-program med en KEDA-meddelandeskalning. För kontext, se motsvarande exempel pub/sub-program:

I exemplen ovan använder programmet följande element:

  1. Utgivaren checkout är ett program som är avsett att köras på obestämd tid och aldrig skalas ned till noll, trots att den aldrig får någon inkommande HTTP-trafik.
  2. Dapr Azure Service Bus-puben/underkomponenten.
  3. En order-processor containerapp för prenumeranter hämtar meddelanden som tagits emot via ämnet orders och bearbetas när de tas emot.
  4. Skalningsregeln för Azure Service Bus, som ansvarar för att skala upp order-processor tjänsten och dess Dapr-sidovagn när meddelanden börjar komma fram till ämnet orders .

Diagram som visar skalningsarkitekturen för beställningsbearbetningsprogrammet.

Nu ska vi ta en titt på hur du tillämpar skalningsreglerna i ett Dapr-program.

Utgivarcontainerapp

Utgivaren checkout är en huvudlös tjänst som körs på obestämd tid och aldrig skalas ned till noll.

Som standard tilldelar Container Apps-körningen en HTTP-baserad skalningsregel till program som driver skalning baserat på antalet inkommande HTTP-begäranden. I följande exempel minReplicas anges till 1. Den här konfigurationen säkerställer att containerappen inte följer standardbeteendet för skalning till noll utan inkommande HTTP-trafik.

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

Containerapp för prenumerant

Följande order-processor prenumerantapp innehåller en anpassad skalningsregel som övervakar en resurs av typen azure-servicebus. Med den här regeln skalar appen (och dess sidovagn) upp och ned efter behov baserat på antalet väntande meddelanden i bussen.

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

Så här fungerar skalningsreglaget

Observera egenskapen messageCount i skalningsappens konfiguration i prenumerantappen:

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

Den här egenskapen anger hur många meddelanden varje instans av programmet kan bearbeta samtidigt. I det här exemplet är värdet inställt på 30, vilket anger att det ska finnas en instans av programmet som skapats för varje grupp med 30 meddelanden som väntar i ämnet.

Om till exempel 150 meddelanden väntar skalar KEDA ut appen till fem instanser. Egenskapen maxReplicas anges till 10. Även med ett stort antal meddelanden i ämnet skapar skalningsprogrammet aldrig mer än 10 instanser av det här programmet. Den här inställningen säkerställer att du inte skalar upp för mycket och ackumulerar för mycket kostnader.

Nästa steg

Läs mer om hur du använder Dapr-komponenter med Azure Container Apps.