Ridimensionare le applicazioni Dapr con strumento di scalabilità KEDA
App contenitore di Azure ridimensiona automaticamente il traffico HTTP a zero. Tuttavia, per ridimensionare il traffico non HTTP, ad esempio Dapr pub/sub e binding, è possibile usare gli strumenti di scalabilità 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 uno strumento di scalabilità di messaggistica KEDA. Per il contesto, fare riferimento alle applicazioni pub/sub di esempio corrispondenti:
- Comunicazione di microservizi tramite pub/sub in C#
- Comunicazione di microservizi tramite pub/sub in JavaScript
- Comunicazione di microservizi tramite pub/sub in Python
Negli esempi precedenti l'applicazione usa gli elementi seguenti:
- Il server di pubblicazione
checkout
è un'applicazione destinata all'esecuzione illimitata e mai ridotta a zero, nonostante non riceva mai traffico HTTP in ingresso. - Componente pub/sub del bus di servizio di Azure Dapr.
- Un'app contenitore sottoscrittore
order-processor
raccoglie i messaggi ricevuti tramite l'argomentoorders
e li elabora man mano che arrivano. - Regola di scalabilità per il bus di servizio di Azure, responsabile del ridimensionamento del servizio
order-processor
e del relativo sidecar Dapr quando i messaggi iniziano ad arrivare all'argomentoorders
.
Di seguito viene illustrato come applicare le regole di ridimensionamento in un'applicazione Dapr.
App contenitore dell'editore
Il server di pubblicazione checkout
è un servizio headless che viene eseguito per un periodo illimitato e non riduce mai il numero di istanze 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 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 order-processor
seguente 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'
identity: 'system'
metadata: {
topicName: 'orders'
subscriptionName: 'membership-orders'
messageCount: '30'
}
}
}
]
}
}
}
}
Funzionamento dello strumento di scalabilità
Si noti la proprietà messageCount
nella configurazione dello strumento di scalabilità nell'app sottoscrittore:
{
//...
properties: {
//...
template: {
//...
scale: {
//...
rules: [
//...
custom: {
//...
metadata: {
//...
messageCount: '30'
}
}
]
}
}
}
}
Questa proprietà indica allo strumento di scalabilità 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 proprietà maxReplicas
è impostata su 10
. Anche con un numero elevato di messaggi nell'argomento, il ridimensionatore non crea mai più di 10
istanze di questa applicazione. Questa impostazione garantisce un dimensionamento e costi non eccessivi.
Passaggi successivi
Altre informazioni sull'uso dei componenti Dapr con App contenitore di Azure.