Škálování aplikací Dapr pomocí škálovačů KEDA
Azure Container Apps automaticky škáluje provoz HTTP na nulu. Pokud ale chcete škálovat provoz mimo PROTOKOL HTTP (například pub/sub a vazby Dapr ), můžete škálovací nástroje KEDA použít ke škálování aplikace a jeho sajdkára Dapr směrem nahoru a dolů na základě počtu čekajících příchozích událostí a zpráv.
Tato příručka ukazuje, jak nakonfigurovat pravidla škálování pub/sub aplikace Dapr pomocí nástroje pro škálování zasílání zpráv KEDA. Kontext najdete v odpovídajících ukázkových pub/dílčích aplikacích:
- Komunikace mikroslužeb pomocí pub/sub v jazyce C#
- Komunikace mikroslužeb pomocí pub/sub v JavaScriptu
- Komunikace mikroslužeb pomocí pub/sub v Pythonu
Ve výše uvedených ukázkách aplikace používá následující prvky:
- Vydavatel
checkout
je aplikace, která má běžet neomezeně dlouho a nikdy vertikálně snížit kapacitu na nulu, navzdory tomu, že nikdy nepřijímají žádný příchozí provoz HTTP. - Komponenta Dapr Azure Service Bus pub/sub.
order-processor
Aplikace kontejneru odběratele přijímá zprávy přijaté prostřednictvímorders
tématu a zpracovává je při jejich doručení.- Pravidlo škálování pro Službu Azure Service Bus, které je zodpovědné za vertikální navýšení
order-processor
kapacity služby a jejího sajdkáru Dapr, když se do tématu začnouorders
doručovat zprávy.
Pojďme se podívat, jak použít pravidla škálování v aplikaci Dapr.
Aplikace kontejneru vydavatele
Vydavatel checkout
je bezobslužná služba, která běží neomezeně dlouho a nikdy se nespustí na nulu.
Modul runtime Container Apps ve výchozím nastavení přiřadí aplikacím pravidlo škálování založené na protokolu HTTP, které řídí škálování na základě počtu příchozích požadavků HTTP. V následujícím příkladu minReplicas
je nastavena na 1
. Tato konfigurace zajišťuje, že aplikace kontejneru nebude dodržovat výchozí chování škálování na nulu bez příchozího provozu HTTP.
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
}
}
}
}
Aplikace kontejneru odběratele
Následující order-processor
aplikace odběratele obsahuje vlastní pravidlo škálování, které monitoruje prostředek typu azure-servicebus
. S tímto pravidlem se aplikace (a jeho sajdkárna) podle potřeby škáluje nahoru a dolů na základě počtu čekajících zpráv ve sběrnici.
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'
}
}
}
]
}
}
}
}
Jak škálovač funguje
messageCount
Všimněte si vlastnosti v konfiguraci škálovače v aplikaci odběratele:
{
//...
properties: {
//...
template: {
//...
scale: {
//...
rules: [
//...
custom: {
//...
metadata: {
//...
messageCount: '30'
}
}
]
}
}
}
}
Tato vlastnost říká škálovači, kolik zpráv může každá instance aplikace zpracovat současně. V tomto příkladu je hodnota nastavena na 30
hodnotu označující, že by měla existovat jedna instance aplikace vytvořená pro každou skupinu 30 zpráv čekajících v tématu.
Pokud například čeká 150 zpráv, KEDA škáluje aplikaci na pět instancí. Vlastnost maxReplicas
je nastavena na hodnotu 10
. I v případě velkého počtu zpráv v tématu škálovací nástroj nikdy nevytáčí více než 10
instance této aplikace. Toto nastavení zajišťuje, že vertikálně navyšujete kapacitu příliš a nabíháte příliš mnoho nákladů.
Další kroky
Přečtěte si další informace o používání komponent Dapr v Azure Container Apps.