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

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

  1. 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.
  2. El componente pub/sub de Dapr de Azure Service Bus.
  3. Una aplicación contenedora de suscriptores order-processor recoge los mensajes recibidos a través del tema orders y los procesa a medida que llegan.
  4. 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 tema orders.

Diagrama que muestra la arquitectura de escalado de la aplicación de procesamiento de pedidos.

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.