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:
- Microservice-Kommunikation mit pub/sub in C#-
- Microservice-Kommunikation mithilfe von pub/sub in JavaScript
- Microservice-Kommunikation mit pub/sub in Python
In den obigen Beispielen verwendet die Anwendung die folgenden Elemente:
- 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. - Die Dapr Azure Service Bus Pub/Sub-Komponente.
- Eine
order-processor
Abonnentencontainer-App erfasst Nachrichten, die über das Themaorders
empfangen und verarbeitet werden, sobald sie eingehen. - 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 Themaorders
ankommen.
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.