Freigeben über


Skalieren von Dapr-Anwendungen mit KEDA-Skalierungsmodulen

Azure Container Apps skaliert automatisch den HTTP-Datenverkehr auf Null. Um jedoch Nicht-HTTP-Datenverkehr (z. B. Dapr pub/sub und Bindungen) zu skalieren, können Sie KEDA-Skalierungsmodule verwenden, um Ihre Anwendung und deren Dapr-Sidecar basierend auf der Anzahl der ausstehenden eingehenden Ereignisse und Nachrichten zu skalieren.

In diesem Leitfaden wird veranschaulicht, wie Sie die Skalierungsregeln einer Dapr pub/sub-Anwendung mit einem KEDA-Messaging-Skalierungsmodul konfigurieren. Im Kontext finden Sie unter den entsprechenden Beispiel-Pub/Sub-Anwendungen:

In den obigen Beispielen verwendet die Anwendung die folgenden Elemente:

  1. Der checkout Herausgeber ist eine Anwendung, die unbegrenzt ausgeführt werden soll und niemals auf Null skaliert werden soll, obwohl nie eingehender HTTP-Datenverkehr empfangen wird.
  2. Die Dapr Azure Service Bus Pub/Sub-Komponente.
  3. Eine order-processor Abonnentencontainer-App erfasst Nachrichten, die über das Thema orders empfangen und verarbeitet werden, sobald sie eingehen.
  4. Die Skalierungsregel für Azure Service Bus, die für die Skalierung des order-processor-Diensts und des Dapr-Sidecars verantwortlich ist, wenn Nachrichten zum Thema orders ankommen.

Diagramm mit der Skalierungsarchitektur der Auftragsverarbeitungsanwendung.

Sehen wir uns an, wie die Skalierungsregeln in einer Dapr-Anwendung angewendet werden.

Publisher-Container-App

Der checkout Herausgeber ist ein monitorloser Dienst, der unbegrenzt ausgeführt wird und niemals auf Null skaliert wird.

Standardmäßig weist die Container Apps-Laufzeitumgebung den Anwendungen eine HTTP-basierte Skalierungsregel zu, die die Skalierung auf der Grundlage der Anzahl eingehender HTTP-Anfragen steuert. Im folgenden Beispiel wird minReplicas auf 1 festgelegt. Diese Konfiguration stellt sicher, dass die Container-App nicht dem Standardverhalten der Skalierung auf Null ohne eingehenden HTTP-Datenverkehr folgt.

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

Abonnentencontainer-App

Die folgende order-processor Abonnenten-App enthält eine benutzerdefinierte Skalierungsregel, die eine Ressource vom Typ azure-servicebus überwacht. Mit dieser Regel wird die App (und ihr Sidecar) je nach Bedarf auf der Anzahl der ausstehenden Nachrichten im Bus nach oben und unten skaliert.

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'
              }
            }
          }
        ]
      }
    }
  }
}

Funktionsweise des Skalierungsmoduls

Beachten Sie die messageCount Eigenschaft für die Konfiguration des Skalierungsmoduls in der Abonnenten-App:

{
  //...
  properties: {
    //...
    template: {
      //...
      scale: {
        //...
        rules: [
          //...
          custom: {
            //...
            metadata: {
              //...
              messageCount: '30'
            }
          }
        ]
      }
    }
  }
}

Diese Eigenschaft teilt dem Skalierungsmodul mit, wie viele Nachrichten jede Instanz der Anwendung gleichzeitig verarbeiten kann. In diesem Beispiel wird der Wert auf 30 festgelegt, der angibt, dass für jede Gruppe von 30 Nachrichten, die im Thema warten, eine Instanz der Anwendung erstellt werden soll.

Wenn beispielsweise 150 Nachrichten warten, skaliert KEDA die App auf 5 Instanzen. Die maxReplicas-Eigenschaft ist auf 10 festgelegt. Selbst bei einer großen Anzahl von Nachrichten im Thema erstellt das Skalierungsmodul nie mehr als 10 Instanzen dieser Anwendung. Diese Einstellung stellt sicher, dass Sie nicht zu viel skalieren und zu viele Kosten anfallen.

Nächste Schritte

Erfahren Sie mehr darüber, wie Dapr in Azure Container Apps integriert wird.