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:
- Microservicecommunicatie met pub/sub in C#
- Microservicecommunicatie met pub/sub in JavaScript
- Microservicecommunicatie met pub/sub in Python
In de bovenstaande voorbeelden gebruikt de toepassing de volgende elementen:
- 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. - Het Dapr Azure Service Bus pub/subonderdeel.
- Een
order-processor
abonneecontainer-app haalt berichten op die zijn ontvangen via hetorders
onderwerp en wordt verwerkt zodra deze binnenkomen. - 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 hetorders
onderwerp beginnen te komen.
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-servicebus
wordt 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.