Escalado de aplicaciones Dapr con escaladores KEDA
Azure Container Apps escala automáticamente el tráfico HTTP a cero. Sin embargo, para escalar el tráfico no HTTP (como Dapr pub/sub y enlaces), puede usar escaladores KEDA para escalar la aplicación y su sidecar de Dapr hacia arriba y hacia abajo, en función del número de eventos y mensajes entrantes pendientes.
En esta guía se muestra cómo configurar las reglas de escalado de una aplicación pub/sub de Dapr con un escalador de mensajería KEDA. Para obtener contexto, consulte las aplicaciones pub/sub de ejemplo correspondientes:
- Comunicación de microservicios mediante pub/sub en C#
- Comunicación de microservicios mediante pub/sub en JavaScript
- Comunicación de microservicios mediante pub/sub en Python
En los ejemplos anteriores, la aplicación usa los siguientes elementos:
- El publicador
checkout
es una aplicación que está pensada para ejecutarse indefinidamente y nunca reducir verticalmente a cero, a pesar de que nunca recibe tráfico HTTP entrante. - El componente pub/sub de Dapr de Azure Service Bus.
- Una aplicación contenedora de suscriptores
order-processor
recoge los mensajes recibidos a través del temaorders
y los procesa a medida que llegan. - La regla de escalado de Azure Service Bus, que es responsable de escalar verticalmente el servicio
order-processor
y su sidecar de Dapr cuando los mensajes comienzan a llegar al temaorders
.
Echemos un vistazo a cómo aplicar las reglas de escalado en una aplicación Dapr.
Aplicación contenedora del publicador
El publicador checkout
es un servicio sin encabezado que se ejecuta indefinidamente y nunca se reduce verticalmente a cero.
De forma predeterminada, el runtime de Container Apps asigna una regla de escalado basada en HTTP a las aplicaciones, que controla el escalado en función del número de solicitudes HTTP entrantes. En el siguiente ejemplo, minReplicas
se establece en 1
. Esta configuración garantiza que la aplicación contenedora no siga el comportamiento predeterminado de escalado a cero sin tráfico HTTP entrante.
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
}
}
}
}
Aplicación contenedora de suscriptores
La siguiente aplicación de suscriptor order-processor
incluye una regla de escalado personalizada que supervisa un recurso de tipo azure-servicebus
. Con esta regla, la aplicación (y su sidecar) se escala y reduce verticalmente según sea necesario en función del número de mensajes pendientes en 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'
}
}
}
]
}
}
}
}
Funcionamiento del escalador
Observe la propiedad messageCount
en la configuración del escalador en la aplicación de suscriptor:
{
//...
properties: {
//...
template: {
//...
scale: {
//...
rules: [
//...
custom: {
//...
metadata: {
//...
messageCount: '30'
}
}
]
}
}
}
}
Esta propiedad indica al escalador cuántos mensajes puede procesar cada instancia de la aplicación al mismo tiempo. En este ejemplo, el valor se establece en 30
, lo que indica que debe haber una instancia de la aplicación creada para cada grupo de 30 mensajes que esperan en el tema.
Por ejemplo, si hay 150 mensajes en espera, KEDA escala la aplicación a cinco instancias. La propiedad maxReplicas
se establece en 10
. Incluso con un gran número de mensajes en el tema, el escalador nunca crea más de 10
instancias de esta aplicación. Esta configuración garantiza que no se escale verticalmente demasiado y se acumulen demasiados costos.
Pasos siguientes
Obtenga más información sobre el uso de componentes de Dapr con Azure Container Apps.