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:
- Mikrotjänstkommunikation med pub/sub i C#
- Mikrotjänstkommunikation med pub/sub i JavaScript
- Mikrotjänstkommunikation med pub/sub i Python
I exemplen ovan använder programmet följande element:
- 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. - Dapr Azure Service Bus-puben/underkomponenten.
- En
order-processor
containerapp för prenumeranter hämtar meddelanden som tagits emot via ämnetorders
och bearbetas när de tas emot. - 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 ämnetorders
.
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.