通过自动缩放,可以有适当的资源量来处理应用程序中的负载。 它允许你添加资源来处理负载增加,并通过删除处于空闲状态的资源来节省资金。 请参阅 Azure 中的自动缩放概述 ,详细了解 Azure Monitor 的自动缩放功能。
服务总线高级消息传送在 CPU 和内存级别提供资源隔离,以便每个客户工作负荷以隔离方式运行。 此资源容器称为 消息传送单元。 若要了解有关消息传送单元的详细信息,请参阅 服务总线高级消息传送。
通过使用服务总线高级命名空间的自动缩放功能,可以指定最小和最大 消息传送单元 数,并根据一组规则自动添加或删除消息传送单元。
例如,可以使用自动缩放功能为服务总线命名空间实现以下缩放方案。
- 当命名空间的 CPU 使用率超过 75%时,增加服务总线命名空间的消息传送单位。
- 当命名空间的 CPU 使用率低于 25%时,减少服务总线命名空间的消息传送单位。
- 在工作时间使用更多的消息传送单元,在非工作时间使用更少。
本文介绍如何使用 Azure 门户和 Azure 资源管理器模板自动缩放服务总线命名空间(更新 消息传送单元)。
重要
本文仅适用于 Azure 服务总线 的高级 层。
使用 Azure 门户进行配置
本部分介绍如何使用 Azure 门户为服务总线命名空间配置消息传送单元的自动缩放。
“自动缩放设置”页
首先,按照以下步骤导航到服务总线命名空间的 “自动缩放设置 ”页。
登录到 Azure 门户。
在搜索栏中,键入 服务总线,从下拉列表中选择 服务总线 ,然后按 Enter。
从命名空间列表中选择 高级命名空间 。
切换到 "缩放" 页。
手动缩放
此设置允许为命名空间设置固定数量的消息传送单元。
在 “自动缩放设置 ”页上,选择“ 手动缩放 ”(如果尚未选择)。
对于 消息传送单元 设置,请从下拉列表中选择消息单位数。
在工具栏上选择 “保存” 以保存设置。
自定义自动缩放 - 默认条件
可以使用条件配置消息传送单元的自动缩放。 当其他任何缩放条件都不匹配时,将执行此缩放条件。 可通过以下方式之一设置默认条件:
- 根据指标(如 CPU 或内存使用情况)进行缩放
- 缩放到特定数量的消息传送单元
您无法在默认条件下,将计划设置为在特定日期或日期范围内自动缩放。 当所有其他具有时间表的缩放条件均不匹配时,将执行此缩放条件。
重要
设置自动缩放时,内存和 CPU 都是关键资源。 建议为两者建立纵向扩展和缩减规则。
注释
为了提高接收吞吐量,服务总线在其缓存中保留一些消息。 仅当内存使用量超过特定的高阈值(如 80%)时,服务总线才会剪裁缓存。 因此,如果实体正在发送消息但不接收消息,则会缓存这些消息,并反映在内存使用量增加中。 通常,这意味着没有什么可担心的,因为服务总线会根据需要剪裁缓存,这最终会导致内存使用率下降。 但是,由于内存使用率可能会迅速增加,因此建议纵向扩展 60% 内存使用量,以防止消息处理中断。
基于指标进行缩放
以下过程演示如何添加条件:当 CPU 使用率大于 75% 时,自动增加消息传送单元(横向扩展);当 CPU 使用率小于 25% 时,减少消息传送单元(缩小)。 增量按照顺序从 1 到 2、2 到 4、4 到 8 和 8 到 16 进行。 同样,减量从 16 到 8、8 到 4、4 到 2 和 2 到 1。
在“自动缩放设置”页上,为“选择如何缩放资源”选项选择“自定义自动缩放”。
在页面的 “默认 ”部分中,指定默认条件 的名称 。 选择 铅笔 图标以编辑文本。
选择基于指标缩放为缩放模式。
选择 “+ 添加规则”。
在 “缩放规则 ”页上,执行以下步骤:
从 “指标名称 ”下拉列表中选择指标。 在此示例中,它是 CPU。
选择运算符和阈值。 在此示例中,指标阈值为大于75用于触发缩放操作。
在操作部分选择操作。 在此示例中,它设置为 “增加”。
然后选择“ 添加”
注释
如果整体 CPU 使用率超过 75%,则自动缩放功能会增加命名空间的消息传送单元。 增量是从 1 到 2、2 到 4、4 到 8 和 8 到 16。
再次选择 “+ 添加规则 ”,然后在 “缩放规则 ”页上执行以下步骤:
从 “指标名称 ”下拉列表中选择指标。 在此示例中,它是 CPU。
选择运算符和阈值。 在此示例中,小于25 的指标阈值将触发缩放操作。
在操作部分选择一个操作。 在此示例中,它设置为 “减少”。
然后选择“ 添加”
注释
如果整个 CPU 使用率低于此示例中的 25%,则自动缩放功能会减少命名空间的消息传送单元。 减量从 16 到 8、8 到 4、4 到 2 和 2 到 1。
设置消息传送单元 的最小 和 最大 和 默认 数目。
选择工具栏上的 “保存 ”以保存自动缩放设置。
缩放到特定数量的消息传送单元
按照以下步骤配置规则以缩放命名空间以使用特定数量的消息传送单元。 同样,当其他缩放条件都不匹配时,将应用默认条件。
在“自动缩放设置”页上,为“选择如何缩放资源”选项选择“自定义自动缩放”。
在页面的 “默认 ”部分中,指定默认条件 的名称 。
选择“缩放到特定消息传送单元”作为缩放模式。
对于 消息传送单元,请选择默认消息传送单元的数量。
自定义自动缩放 - 附加条件
上一部分介绍如何为自动缩放设置添加默认条件。 本部分介绍如何向自动缩放设置添加更多条件。 对于这些额外的非默认条件,可以根据一周的特定日期或日期范围设置计划。
基于指标进行缩放
在“自动缩放设置”页上,为“选择如何缩放资源”选项选择“自定义自动缩放”。
选择“添加缩放条件”,该选项位于默认块下。
指定条件 的名称 。
确认已选择基于指标的缩放选项。
选择 “+ 添加规则 ”以在总 CPU 使用率超过 75%时添加规则以增加消息传送单位。 按照 默认条件 部分中的步骤执行。
设置消息传送单元 的最小 和 最大 和 默认 数目。
还可以在自定义条件上设置 计划 (但不设置默认条件)。 可以指定条件的开始日期和结束日期(或)选择一周的特定日期(星期一、星期二等)。
如果选择“指定开始/结束日期”,请选择时区、开始日期和时间和结束日期和时间(如下图所示),使条件生效。
如果选择“ 重复特定日期”,请选择应应用条件的一周、时区、开始时间和结束时间。
扩展为特定数量的消息单元
在“自动缩放设置”页上,为“选择如何缩放资源”选项选择“自定义自动缩放”。
在默认块下选择添加缩放条件。
指定条件 的名称 。
为缩放模式选择“缩放到特定消息传送单元”选项。
从下拉列表中选择 消息传送单位 数。
对于 计划,请指定条件的开始日期和结束日期,或选择一周中的特定日期(如星期一、星期二等)和时间。
- 如果选择“指定开始/结束日期”,请选择条件生效的时区、开始日期和时间和结束日期和时间。
- 如果选择“ 重复特定日期”,请选择应应用条件的一周、时区、开始时间和结束时间。
若要详细了解自动缩放设置的工作原理,特别是如何选取配置文件或条件并评估多个规则,请参阅 “了解自动缩放设置”。
注释
- 您用于决定自动缩放的指标可能已有 5-10 分钟之久。 处理尖峰工作负载时,建议增加资源的时间较短,而减少资源的时间较长。 由于服务总线高级版是按小时收费的,即使快速缩减规模也不会降低该小时的成本。 相反,建议在缩减规模之前,提供足够的时间以确保减少的工作负荷是稳定的,这样可以确保有足够的消息传送单元来处理波动的工作负荷。
纵向缩减时,将阈值设置为小于纵向扩展阈值的一半。 例如,如果纵向扩展阈值为 80%,请将纵向缩减阈值设置为 30-35%(低于 40%),以防止连续纵向扩展和缩减。这可以防止自动缩放在纵向扩展和缩减之间连续切换。
- 如果由于容量不足(没有可用的消息传送单元)导致故障,请向我们提出支持请求。 容量履行受环境的约束,并尽最大努力进行。
运行历史记录
切换到“缩放”页上的“运行历史记录”选项卡,以查看绘制自动缩放引擎观察到的消息传送单元数的图表。 如果图表为空,则表示未配置或已禁用自动缩放,或者处于冷却期。
Notifications
切换到“缩放”页上的“通知”选项卡,以便:
允许向管理员、共同管理员和任何其他管理员发送通知电子邮件。
启用向 webhooks 公开的 HTTP 或 HTTPS 接口发送通知电子邮件。
使用资源管理器模板进行配置
可以使用以下示例资源管理器模板创建包含队列的服务总线命名空间,并配置命名空间的自动缩放设置。 在此示例中,指定了两个缩放条件。
- 默认缩放条件:当平均 CPU 使用率超过 75% 时增加消息传送单位,并在平均 CPU 使用率低于 25%时减少消息传送单位。
- 在周末将两个消息传送单元分配给命名空间。
Template
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"serviceBusNamespaceName": {
"type": "String",
"metadata": {
"description": "Name of the Service Bus namespace"
}
},
"serviceBusQueueName": {
"type": "String",
"metadata": {
"description": "Name of the Queue"
}
},
"autoScaleSettingName": {
"type": "String",
"metadata": {
"description": "Name of the auto scale setting."
}
},
"location": {
"defaultValue": "[resourceGroup().location]",
"type": "String",
"metadata": {
"description": "Location for all resources."
}
}
},
"resources": [{
"type": "Microsoft.ServiceBus/namespaces",
"apiVersion": "2021-11-01",
"name": "[parameters('serviceBusNamespaceName')]",
"location": "[parameters('location')]",
"sku": {
"name": "Premium"
},
"properties": {}
},
{
"type": "Microsoft.ServiceBus/namespaces/queues",
"apiVersion": "2021-11-01",
"name": "[format('{0}/{1}', parameters('serviceBusNamespaceName'), parameters('serviceBusQueueName'))]",
"dependsOn": [
"[resourceId('Microsoft.ServiceBus/namespaces', parameters('serviceBusNamespaceName'))]"
],
"properties": {
"lockDuration": "PT5M",
"maxSizeInMegabytes": 1024,
"requiresDuplicateDetection": false,
"requiresSession": false,
"defaultMessageTimeToLive": "P10675199DT2H48M5.4775807S",
"deadLetteringOnMessageExpiration": false,
"duplicateDetectionHistoryTimeWindow": "PT10M",
"maxDeliveryCount": 10,
"autoDeleteOnIdle": "P10675199DT2H48M5.4775807S",
"enablePartitioning": false,
"enableExpress": false
}
},
{
"type": "Microsoft.Insights/autoscaleSettings",
"apiVersion": "2021-05-01-preview",
"name": "[parameters('autoScaleSettingName')]",
"location": "China East",
"dependsOn": [
"[resourceId('Microsoft.ServiceBus/namespaces', parameters('serviceBusNamespaceName'))]"
],
"tags": {},
"properties": {
"name": "[parameters('autoScaleSettingName')]",
"enabled": true,
"predictiveAutoscalePolicy": {
"scaleMode": "Disabled",
"scaleLookAheadTime": null
},
"targetResourceUri": "[resourceId('Microsoft.ServiceBus/namespaces', parameters('serviceBusNamespaceName'))]",
"profiles": [{
"name": "Increase messaging units to 2 on weekends",
"capacity": {
"minimum": "2",
"maximum": "2",
"default": "2"
},
"rules": [],
"recurrence": {
"frequency": "Week",
"schedule": {
"timeZone": "Eastern Standard Time",
"days": [
"Saturday",
"Sunday"
],
"hours": [
6
],
"minutes": [
0
]
}
}
},
{
"name": "{\"name\":\"Scale Out at 75% CPU and Scale In at 25% CPU\",\"for\":\"Increase messaging units to 4 on weekends\"}",
"capacity": {
"minimum": "1",
"maximum": "8",
"default": "2"
},
"rules": [{
"scaleAction": {
"direction": "Increase",
"type": "ServiceAllowedNextValue",
"value": "1",
"cooldown": "PT5M"
},
"metricTrigger": {
"metricName": "NamespaceCpuUsage",
"metricNamespace": "microsoft.servicebus/namespaces",
"metricResourceUri": "[resourceId('Microsoft.ServiceBus/namespaces', parameters('serviceBusNamespaceName'))]",
"operator": "GreaterThan",
"statistic": "Average",
"threshold": 75,
"timeAggregation": "Average",
"timeGrain": "PT1M",
"timeWindow": "PT10M",
"Dimensions": [],
"dividePerInstance": false
}
},
{
"scaleAction": {
"direction": "Decrease",
"type": "ServiceAllowedNextValue",
"value": "1",
"cooldown": "PT5M"
},
"metricTrigger": {
"metricName": "NamespaceCpuUsage",
"metricNamespace": "microsoft.servicebus/namespaces",
"metricResourceUri": "[resourceId('Microsoft.ServiceBus/namespaces', parameters('serviceBusNamespaceName'))]",
"operator": "LessThan",
"statistic": "Average",
"threshold": 25,
"timeAggregation": "Average",
"timeGrain": "PT1M",
"timeWindow": "PT10M",
"Dimensions": [],
"dividePerInstance": false
}
}
],
"recurrence": {
"frequency": "Week",
"schedule": {
"timeZone": "Eastern Standard Time",
"days": [
"Saturday",
"Sunday"
],
"hours": [
18
],
"minutes": [
0
]
}
}
}
],
"notifications": [],
"targetResourceLocation": "China East"
}
}
]
}
还可以从 Azure 门户为自动缩放设置资源生成 JSON 示例。 在 Azure 门户中配置自动缩放设置后,请在“缩放”页的命令栏上选择 JSON。
然后,如前面的示例所示,将 JSON 包含在资源管理模板的 resources 节中。
其他注意事项
将自定义自动缩放选项用于默认条件或配置文件时,消息传送单元会逐渐增加(1 - 2 -> 4 ->> 8 -> 16)或减少(16 - 8> -> 4 -> 2 -> 1)。
创建其他条件时,消息传送单元可能不会逐渐增加或减少。 假设,你定义了两个配置文件,如下示例所示。 在 06:00 UTC,消息传送单位设置为 16,在 21:00 UTC 时,它们将减少到 1。
{
"Profiles": [
{
"Name": "standardProfile",
"Capacity": {
"Minimum": "16",
"Maximum": "16",
"Default": "16"
},
"Rules": [],
"Recurrence": {
"Frequency": "Week",
"Schedule": {
"TimeZone": "UTC",
"Days": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"
],
"Hours": [6],
"Minutes": [0]
}
}
},
{
"Name": "outOfHoursProfile",
"Capacity": {
"Minimum": "1",
"Maximum": "1",
"Default": "1"
},
"Rules": [],
"Recurrence": {
"Frequency": "Week",
"Schedule": {
"TimeZone": "UTC",
"Days": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"Hours": [21],
"Minutes": [0]
}
}
}
]
}
建议创建规则,以便消息传送单元逐渐增加或减少。
后续步骤
若要了解消息传送单元,请参阅 高级消息传送