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

自动更新 Azure 服务总线命名空间的消息传送单元。

自动缩放是指在处理应用程序负载时让适当数量的资源运行。 当负载增加时,它可以添加资源来处理增加的负载;当资源空闲时,它可以删除资源以节省资金。 请参阅 Microsoft Azure 自动缩放概述,详细了解 Azure Monitor 的自动缩放功能。

服务总线高级消息传送在 CPU 和内存级别提供资源隔离,以便每个客户工作负荷以隔离方式运行。 此资源容器称为 消息传送单元。 若要详细了解消息传送单元,请参阅服务总线高级消息传送

通过使用服务总线高级命名空间的自动缩放功能,你可以指定最大或最小的消息传送单元数,并基于一组规则自动添加或删除消息传送单元。

例如,你可以使用自动缩放功能为服务总线命名空间实现以下缩放场景。

  • 在命名空间的 CPU 使用率超过 75% 时增加服务总线命名空间的消息传送单元。
  • 在命名空间的 CPU 使用率低于 25% 时减少服务总线命名空间的消息传送单元。
  • 在营业时间内使用较多的消息传送单元,在下班时间内使用较少的消息传送单元。

本文介绍如何使用 Azure 门户和 Azure 资源管理器模板自动缩放服务总线命名空间(更新消息传送单元)。

重要

本文仅适用于 Azure 服务总线的高级层。

使用 Azure 门户进行配置

本部分介绍了如何使用 Azure 门户为服务总线命名空间配置消息传送单元的自动扩缩。

“自动缩放设置”页

首先,按照以下步骤导航到服务总线命名空间的“自动缩放设置”页。

  1. 登录 Azure 门户

  2. 在搜索栏中,键入“服务总线”,从下拉列表中选择“服务总线”,然后按“ENTER” 。

  3. 从命名空间列表中选择“高级命名空间”。

  4. 切换到“缩放”页。

    服务总线命名空间 -“缩放”页

手动缩放

此设置让你可以为命名空间设置固定的消息传送单元数。

  1. 在“自动缩放设置”页上,选择“手动缩放”(如果尚未选择) 。

  2. 对于“消息传送单元”设置,从下拉列表中选择消息传送单元数。

  3. 在工具栏上选择“保存”,保存该设置。

    手动缩放消息传送单元

自定义自动缩放 - 默认条件

可以通过使用条件来配置消息传送单元的自动缩放。 当没有其他缩放条件匹配时将执行此缩放条件。 可以通过下列方式之一设置默认条件:

  • 基于指标的缩放(例如 CPU 或内存使用率)
  • 缩放到特定的消息传送单元数

你无法将计划设置为针对默认条件在特定日期或日期范围进行自动缩放。 当没有其他缩放条件匹配计划时将执行此缩放条件。

注意

为了提高接收吞吐量,服务总线会在其缓存中保留一些消息。 仅当内存使用量超过特定高阈值(如 90%)时,服务总线才会剪裁缓存。 因此,如果实体正在发送但未接收消息,则会缓存这些消息,并反映为内存使用量增加。 无需担心这种情况,因为服务总线会根据需要剪裁缓存,最终会导致内存使用率下降。 内存不会导致任何问题,除非命名空间出现性能或任何其他问题。 建议使用 CPU 使用情况指标以通过服务总线自动缩放。

基于指标缩放

下面的过程演示了如何添加一个条件,以在 CPU 使用率大于 75% 时自动增加消息传送单元(横向扩展),并在 CPU 使用率小于 25% 时减少消息传送单元(横向缩减)。 增量的执行是从 1 到 2,2 到 4,4 到 8 以及 8 到 16 。 与此类似,减量的执行是从 16 到 8,8 到 4,4 到 2 以及 2 到 1。

  1. 在“自动缩放设置”页上,为“选择缩放资源方式”选项选择“自定义自动缩放” 。

  2. 在页面的“默认”部分,指定默认条件的“名称” 。 选择“铅笔”图标来编辑该文本。

  3. 为“缩放模式”选择“基于指标缩放” 。

  4. 选择“+ 添加规则”。

    默认 - 基于指标缩放

  5. 在“缩放规则”页上执行以下步骤:

    1. 从“指标名称”下拉列表中选择指标。 在此示例中,它是 CPU。

    2. 选择运算符和阈值。 在此示例中,运算符为“大于”,“触发缩放操作的指标阈值”为“75” 。

    3. 在“操作”部分中选择“操作” 。 在此示例中,操作设置为“增加”。

    4. 然后选择“添加”

      默认 - 如果 CPU 使用率大于 75%,则进行横向扩展

      注意

      如果在此示例中总体 CPU 使用率超过 75%,则自动缩放功能将增加命名空间的消息传送单元。 增量的执行是从 1 到 2,2 到 4,4 到 8 以及 8 到 16 。

  6. 再次选择“+ 添加规则”,然后在“缩放规则”页上执行以下步骤 :

    1. 从“指标名称”下拉列表中选择指标。 在此示例中,它是 CPU。

    2. 选择运算符和阈值。 在此示例中,运算符为“小于”,“触发缩放操作的指标阈值”为“25” 。

    3. 在“操作”部分中选择“操作” 。 在此示例中,操作设置为“减少”。

    4. 然后选择“添加”

      默认 - 如果 CPU 使用率小于 25%,则进行横向缩减

      注意

      如果在此示例中总体 CPU 使用率低于 25%,则自动缩放功能将减少命名空间的消息传送单元。 减量的执行是从 16 到 8,8 到 4,4 到 2 以及 2 到 1。

  7. 设置最大和最小及默认的消息传送单元数 。

    基于指标的默认规则

  8. 在工具栏上选择“保存”,保存自动缩放设置。

缩放到特定的消息传送单元数

请执行以下步骤,将该规则配置为缩放命名空间以使用特定数量的消息传送单元。 同样,如果其他任何缩放条件都不匹配,则会应用默认条件。

  1. 在“自动缩放设置”页上,为“选择缩放资源方式”选项选择“自定义自动缩放” 。

  2. 在页面的“默认”部分,指定默认条件的“名称” 。

  3. 为“缩放模式”选择“缩放到特定消息传送单元数” 。

  4. 对于“消息传送单元数”,选择默认消息传送单元数。

    默认值 - 缩放到特定消息传送单元

自定义自动缩放 - 其他条件

上一部分说明了如何为自动缩放设置添加默认条件。 该部分说明如何将更多条件添加到自动缩放设置。 对于这些额外的非默认条件,可以基于特定的一周中的某天或某个日期范围设置计划。

基于指标缩放

  1. 在“自动缩放设置”页上,为“选择缩放资源方式”选项选择“自定义自动缩放” 。

  2. 选择“默认”块下的“添加缩放条件” 。

    自定义 - 添加缩放条件链接

  3. 为条件指定名称。

  4. 确认已选择“基于指标的缩放”选项。

  5. 选择“+ 添加规则”,添加一个规则,以在总体 CPU 使用率超过 75% 时增加消息传送单元。 执行默认条件部分中的步骤。

  6. 设置最大和最小及默认的消息传送单元数 。

  7. 可以针对自定义条件(而不是默认条件)设置计划。 可以为条件指定开始日期和结束日期(或)选择一周中的特定日期(星期一、星期二等)。

    1. 如果选择“指定开始/结束日期”,则选择“时区”、“开始日期和时间”和“结束日期和时间”(如下图所示)以使条件生效 。

      消息传送单元数的最小值、最大值和默认值

    2. 如果选择“重复特定日期”,则选择应用该条件的星期、时区、开始时间和结束时间。

      重复特定日期

缩放到特定的消息传送单元数

  1. 在“自动缩放设置”页上,为“选择缩放资源方式”选项选择“自定义自动缩放” 。

  2. 选择“默认”块下的“添加缩放条件” 。

    自定义 - 添加缩放条件链接

  3. 为条件指定名称。

  4. 为“缩放模式”选择“缩放到特定消息传送单元数”选项 。

  5. 从下拉列表中选择“消息传送单元”数。

  6. 对于计划,为条件指定开始日期和结束日期(或)选择一周中的特定日期(星期一、星期二等)和时间。

    1. 如果选择“指定开始/结束日期”,则选择“时区”、“开始日期和时间”和“结束日期和时间”以使条件生效 。

    缩放到特定消息传送单元 - 开始和结束日期

    1. 如果选择“重复特定日期”,则选择应用该条件的星期、时区、开始时间和结束时间。

    缩放到特定消息传送单元 - 重复特定日期

    若要详细了解自动缩放设置的工作原理,尤其是它如何选择配置文件或条件并评估多个规则的详细信息,请参阅了解自动缩放设置。

    注意

    • 针对自动缩放做出的决定的指标可能为 5-10 分钟。 当你处理高峰工作负载时,建议纵向扩展的持续时间短一点,纵向缩减的持续时间长一点(> 10 分钟),以确保有足够的消息传送单元来处理高峰工作负载。

    • 如果出现由于缺少容量而导致的故障(没有可用的消息传送单元),请向我们提出支持票证。

运行历史记录

切换到“缩放”页上的“运行历史记录”选项卡,查看绘制自动缩放引擎观察到的消息传送单元数的图表。 如果图表为空,则表示未配置自动缩放、已配置但已禁用自动缩放,或者自动缩放处于冷却期。

显示“缩放”页上“运行历史记录”的屏幕截图********。

通知

切换到“缩放”页上的“通知”选项卡,以执行以下操作:

  • 启用向管理员、共同管理员和任何其他管理员发送通知电子邮件的功能。

  • 启用向 Webhook 公开的 HTTP 或 HTTPS 终结点发送通知电子邮件的功能。

    显示“缩放”页的“通知”选项卡的屏幕截图********。

使用资源管理器模板进行配置

可以使用以下示例资源管理器模板创建具有队列的服务总线命名空间,并为命名空间配置自动缩放设置。 在此示例中,指定了两个缩放条件。

  • 默认缩放条件:当平均 CPU 使用率高于 75% 时增加消息传送单元,当平均 CPU 使用率低于 25% 时减少消息传送单元。
  • 在周末将两个消息传送单元分配给命名空间。

模板

{
	"$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": "East US",
			"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": "East US"
			}
		}
	]
}

还可以从 Azure 门户为自动缩放设置资源生成 JSON 示例。 在 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]
				}
			}
		}
	]
}

我们建议创建相应规则,使消息传送单元逐渐增加或减少。

后续步骤

若要了解消息传送单元,请参阅高级消息传送