你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 KEDA 缩放程序缩放 Dapr 应用程序

Azure 容器应用自动将 HTTP 流量缩放到零。 不过,要缩放非 HTTP 流量(如 Dapr pub/sub 和绑定),可以使用 KEDA 缩放程序,根据待处理入站事件和消息的数量来纵向扩展和缩减应用程序及其 Dapr 挎斗。

本指南演示如何使用 KEDA 消息缩放程序配置 Dapr pub/sub 应用程序的缩放规则。 有关上下文,请参阅相应的示例 pub/sub 应用程序:

  • C# 中使用 pub/sub 进行微服务通信
  • JavaScript 中使用 pub/sub 进行微服务通信
  • Python 中使用 pub/sub 进行微服务通信

在上述示例中,应用程序使用以下元素:

  1. checkout 发布服务器是一种应用程序,尽管从未接收过任何传入 HTTP 流量,但它会无限期运行,并且永远不会纵向缩减为零。
  2. Dapr Azure 服务总线 pub/sub 组件。
  3. order-processor 订阅服务器容器应用接收通过 orders 主题收到的消息,并在消息到达时进行处理。
  4. Azure 服务总线的缩放规则,负责在消息开始到达 orders 主题时纵向扩展 order-processor 服务及其 Dapr 挎斗。

显示订单处理应用程序的缩放体系结构的关系图。

让我们看看如何在 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 类型的资源。 有了这条规则,应用(及其挎斗)可根据总线中待处理消息的数量按需纵向扩展和缩减。

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

缩放程序的工作原理

请注意订阅服务器应用中缩放程序配置上的 messageCount 属性:

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

此属性告知缩放程序每个应用程序实例可以同时处理多少条消息。 在此示例中,该值设置为 30,表示应为主题中等待的每组 30 条消息创建一个应用程序实例。

例如,如果 150 条消息正在等待,KEDA 会将应用横向扩展到 5 个实例。 maxReplicas 属性设置为 10。 即使主题中存在大量消息,缩放程序创建的此应用程序实例也不会超过 10 个。 此设置可确保不会过度纵向扩展并产生过多费用。

后续步骤

详细了解如何将 Dapr 组件与 Azure 容器应用配合使用。