Sdílet prostřednictvím


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

Ve výše uvedených ukázkách aplikace používá následující prvky:

  1. 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.
  2. Komponenta Dapr Azure Service Bus pub/sub.
  3. order-processor Aplikace kontejneru odběratele přijímá zprávy přijaté prostřednictvím orders tématu a zpracovává je při jejich doručení.
  4. 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čnou orders doručovat zprávy.

Diagram znázorňující architekturu škálování aplikace pro zpracování objednávek

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 30hodnotu 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.