使用 KEDA 調整工具調整 Dapr 應用程式

Azure 容器應用程式會自動將 HTTP 流量調整為零。 不過,若要調整非 HTTP 流量 (例如 Dapr pub/sub 和資料繫結),您可以使用 KEDA 調整工具,根據擱置的輸入事件和訊息數目來相應增加和減少您的應用程式及其 Dapr Sidecar。

本指南示範如何使用 KEDA 傳訊調整工具來設定 Dapr pub/sub 應用程式的調整規則。 如需內容,請參閱對應的範例 pub/sub 應用程式:

在上述範例中,應用程式會使用下列元素:

  1. checkout 發行者是一個旨在無限期執行且永遠不會縮減為零的應用程式,儘管從未收到任何傳入的 HTTP 流量。
  2. Dapr Azure 服務匯流排 pub/sub 元件。
  3. order-processor 訂閱者容器應用程式會透過 orders 主題接收訊息,並在訊息送達時進行處理。
  4. Azure 服務匯流排的調整規則,負責在訊息開始到達 order-processor 主題時相應增加 orders 服務及其 Dapr Sidecar。

Diagram showing the scaling architecture of the order processing application.

讓我們看看如何在 Dapr 應用程式中套用調整規則。

發行者容器應用程式

checkout 發行者是無限期執行的無周邊服務,永遠不會縮減為零。

根據預設,容器應用程式執行階段會將 HTTP 型調整規則指派給應用程式,這會根據傳入的 HTTP 要求數目來驅動調整。 在下列範例中,minReplicas 會設定為 1。 此組態可確保容器應用程式不會遵循在沒有傳入 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
      }
    }
  }
}

訂閱者容器應用程式

下列 order-processor 訂閱者應用程式包含自訂調整規則,可監視類型為 azure-servicebus 的資源。 使用此規則時,應用程式 (及其 Sidecar) 會視需要在匯流排中相應增加和減少擱置中的訊息數目。

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'
              metadata: {
                topicName: 'orders'
                subscriptionName: 'membership-orders'
                messageCount: '30'
              }
              auth: [
                {
                  secretRef: 'sb-root-connectionstring'
                  triggerParameter: 'connection'
                }
              ]
            }
          }
        ]
      }
    }
  }
}

調整工具的運作方式

請注意訂閱者應用程式中調整工具設定上的 messageCount 屬性:

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

這個屬性會告知調整工具每個應用程式的執行個體可以同時處理的訊息數目。 在此範例中,值會設定為 30,表示應該為主題中等待的每組 30 個訊息建立一個應用程式執行個體。

例如,如果有 150 則訊息正在等待,KEDA 會將應用程式相應放大為五個執行個體。 maxReplicas 屬性會設定為 10,這表示即使主題中有大量的訊息,調整工具也不會建立此應用程式 10 個以上的實例。 此設定可確保您不會相應增加太多,並產生過多成本。

下一步

深入了解如何搭配 Azure 容器應用程式使用 Dapr 元件。