你当前正在访问 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 进行微服务通信
在上述示例中,应用程序使用以下元素:
checkout
发布服务器是一种应用程序,尽管从未接收过任何传入 HTTP 流量,但它会无限期运行,并且永远不会纵向缩减为零。- Dapr Azure 服务总线 pub/sub 组件。
order-processor
订阅服务器容器应用接收通过orders
主题收到的消息,并在消息到达时进行处理。- 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
个。 此设置可确保不会过度纵向扩展并产生过多费用。