Compartir a través de


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

En los ejemplos anteriores, la aplicación usa los siguientes elementos:

  1. El checkout publicador es una aplicación diseñada para ejecutarse indefinidamente y nunca reducir verticalmente a cero, a pesar de que nunca recibe tráfico HTTP entrante.
  2. Componente pub/sub de Dapr de Azure Service Bus.
  3. Una order-processor aplicación contenedora de suscriptores recoge los mensajes recibidos a través del orders tema y se procesa a medida que llegan.
  4. La regla de escalado de Azure Service Bus, que es responsable de escalar verticalmente el order-processor servicio y su sidecar de Dapr cuando los mensajes comienzan a llegar al orders tema.

Diagram showing the scaling architecture of the order processing application.

Echemos un vistazo a cómo aplicar las reglas de escalado en una aplicación Dapr.

Aplicación contenedora del publicador

El checkout publicador es un servicio sin encabezado que se ejecuta indefinidamente y nunca se reduce verticalmente a cero.

De forma predeterminada, el entorno de ejecución 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 ejemplo siguiente, 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 order-processor aplicación de suscriptor 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'
              metadata: {
                topicName: 'orders'
                subscriptionName: 'membership-orders'
                messageCount: '30'
              }
              auth: [
                {
                  secretRef: 'sb-root-connectionstring'
                  triggerParameter: 'connection'
                }
              ]
            }
          }
        ]
      }
    }
  }
}

Funcionamiento del escalador

Observe la messageCount propiedad 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 30en , lo que indica que debe haber una instancia de la aplicación creada para cada grupo de 30 mensajes en espera en el tema.

Por ejemplo, si hay 150 mensajes en espera, KEDA escala la aplicación a cinco instancias. La maxReplicas propiedad se establece 10en , lo que significa que incluso con un gran número de mensajes en el tema, el escalador nunca crea más que 10 instancias de esta aplicación. Esta configuración garantiza que no se escala demasiado y se acumula demasiado costo.

Pasos siguientes

Obtenga más información sobre el uso de componentes de Dapr con Azure Container Apps.