Azure Service Bus 네임스페이스의 메시징 단위 자동 업데이트

자동 크기 조정을 사용하면 애플리케이션의 부하를 처리하기 위해 적절한 양의 리소스가 실행되도록 할 수 있습니다. 그러면 늘어난 부하를 처리하기 위해 리소스를 추가하고 유휴 상태의 리소스를 제거하여 비용을 절약할 수 있습니다. Azure Monitor의 자동 크기 조정 기능에 대한 자세한 내용은 Microsoft Azure 자동 크기 조정 개요를 참조하세요.

Service Bus 프리미엄 메시지는 각 고객의 워크로드가 따로 실행되도록 CPU 및 메모리 수준에서 리소스 격리를 제공합니다. 이 리소스 컨테이너를 메시징 단위라고 합니다. 메시징 단위에 대한 자세한 내용은 Service Bus 프리미엄 메시징을 참조하세요.

Service Bus 프리미엄 네임스페이스에 자동 크기 조정 기능을 사용하면 최소 및 최대 메시징 단위 수를 지정하고 규칙 집합에 따라 자동으로 메시징 단위를 추가하거나 제거할 수 있습니다.

예를 들어 자동 크기 조정 기능을 사용하여 Service Bus 네임스페이스에 대해 다음과 같은 크기 조정 시나리오를 구현할 수 있습니다.

  • 네임스페이스의 CPU 사용량이 75%를 초과하는 경우 Service Bus 네임스페이스에 대한 메시징 단위를 늘립니다.
  • 네임스페이스의 CPU 사용량이 75% 미만인 경우 Service Bus 네임스페이스에 대한 메시징 단위를 줄입니다.
  • 업무 시간 동안 더 많은 메시징 단위를 사용하고 업무 시간 외에는 더 적게 사용합니다.

이 문서에서는 Azure Portal 및 Azure Resource Manager 템플릿에서 Service Bus 네임스페이스(메시징 단위 업데이트)의 크기를 자동으로 조정하는 방법을 보여 줍니다.

Important

이 문서는 Azure Service Bus의 프리미엄 계층에만 적용됩니다.

Azure Portal을 사용하여 구성

이 섹션에서는 Azure Portal을 사용하여 Service Bus 네임스페이스에 대한 메시징 단위의 자동 크기 조정을 구성하는 방법을 알아봅니다.

자동 크기 조정 설정 페이지

먼저 다음 단계에 따라 Service Bus 네임스페이스에 대한 자동 크기 조정 설정 페이지로 이동합니다.

  1. Azure Portal에 로그인합니다.

  2. 검색 창에 Service Bus를 입력하고 드롭다운 목록에서 Service Bus 선택한 다음 Enter 키를 누릅니다.

  3. 네임스페이스 목록에서 프리미엄 네임스페이스를 선택합니다.

  4. 비율 크기 조정 페이지로 이동합니다.

    Service Bus Namespace - Scale page

수동 크기 조정

이 설정을 사용하면 네임스페이스에 대해 고정된 수의 메시징 단위를 설정할 수 있습니다.

  1. 자동 크기 조정 설정 페이지에서 수동 크기 조정(아직 선택되지 않은 경우)을 선택합니다.

  2. 메시징 단위 설정의 경우 드롭다운 목록에서 메시징 단위 수를 선택합니다.

  3. 도구 모음에서 저장을 선택하여 설정을 저장합니다.

    Manually scale messaging units

사용자 지정 자동 크기 조정 - 기본 조건

조건을 사용하여 메시징 단위의 자동 크기 조정을 구성할 수 있습니다. 이 크기 조정 조건은 일치하는 다른 크기 조정 조건이 없을 때 실행됩니다. 다음 방법 중 하나로 기본 조건을 설정할 수 있습니다.

  • 메트릭에 따라 스케일링(예: CPU 또는 메모리 사용량)
  • 특정 수의 메시징 단위로 크기 조정

기본 조건의 특정 날짜 또는 날짜 범위에 대해 자동 크기 조정하도록 일정을 설정할 수는 없습니다. 이 크기 조정 조건은 일정이 일치하는 다른 배율 조건이 없을 때 실행됩니다.

참고 항목

수신 처리량을 향상시키기 위해 Service Bus는 일부 메시지를 캐시에 보관합니다. Service Bus는 메모리 사용량이 특정 높은 임계값(예: 90%)을 초과하는 경우에만 캐시를 자릅니다. 따라서 엔터티가 메시지를 보내고 있지만 받지 못하는 경우 해당 메시지는 캐시되어 메모리 사용량 증가에 반영됩니다. Service Bus가 필요한 경우 캐시를 잘라서 결국 메모리 사용량이 감소하기 때문에 걱정할 필요가 없습니다. 성능 또는 네임스페이스 관련 다른 문제가 없는 한 메모리는 문제를 일으키지 않습니다. Service Bus를 사용한 자동 크기 조정에는 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. + 규칙 추가를 선택합니다.

    Default - scale based on a metric

  5. 크기 조정 규칙 페이지에서 다음 단계를 수행합니다.

    1. 메트릭 이름 드롭다운 목록에서 메트릭을 선택합니다. 이 예제에서는 CPU입니다.

    2. 연산자 및 임계값을 선택합니다. 이 예제에서는 크기 조정 작업을 트리거하는 메트릭 임계값의 경우 75보다 큽니다.

    3. 작업 섹션에서 작업을 선택합니다. 이 예제에서는 증가로 설정됩니다.

    4. 그런 다음, 추가를 선택합니다.

      Default - scale out if CPU usage is greater than 75%

      참고 항목

      이 예제에서 전체 CPU 사용량이 75%를 초과하는 경우 자동 크기 조정 기능은 네임스페이스의 메시징 단위를 증가시킵니다. 1에서 2, 2에서 4, 4에서 8, 8에서 16로 증분됩니다.

  6. + 규칙 추가를 다시 선택하고 크기 조정 규칙 페이지에서 다음 단계를 수행합니다.

    1. 메트릭 이름 드롭다운 목록에서 메트릭을 선택합니다. 이 예제에서는 CPU입니다.

    2. 연산자 및 임계값을 선택합니다. 이 예제에서는 크기 조정 작업을 트리거하는 메트릭 임계값의 경우 75보다 작습니다.

    3. 작업 섹션에서 작업을 선택합니다. 이 예제에서는 감소로 설정됩니다.

    4. 그런 다음, 추가를 선택합니다.

      Default - scale in if CPU usage is less than 25%

      참고 항목

      이 예제에서 전체 CPU 사용량이 75% 미만인 경우 자동 크기 조정 기능은 네임스페이스의 메시징 단위를 감소시킵니다. 16에서 8, 8에서 4, 4에서 2, 2에서 1로 감소됩니다.

  7. 메시징 단위의 최소최대기본 수를 설정합니다.

    Default rule based on a metric

  8. 도구 모음에서 저장을 선택하여 자동 크기 조정 설정을 저장합니다.

특정 수의 메시징 단위로 크기 조정

다음 단계에 따라 특정 수의 메시징 단위를 사용하게 네임스페이스의 크기를 조정하도록 규칙을 구성합니다. 다른 크기 조정 조건이 일치하지 않는 경우 기본 조건이 다시 적용됩니다.

  1. 자동 크기 조정 설정 페이지에서 사용자 지정 자동 크기 조정을 선택하여 리소스 크기를 조정하는 방법 선택 옵션을 선택합니다.

  2. 페이지의 기본 섹션에서 기본 조건의 이름을 지정합니다.

  3. 크기 조정 모드에 대해 특정 메시징 단위로 크기 조정을 선택합니다.

  4. 메시징 단위의 경우 기본 메시징 단위 수를 선택합니다.

    Default - scale to specific messaging units

사용자 지정 자동 크기 조정 - 추가 조건

이전 섹션은 자동 크기 조정 설정에 대한 기본 조건을 추가하는 방법을 보여줍니다. 이 섹션에서는 자동 크기 조정 설정에 더 많은 조건을 추가하는 방법을 보여줍니다. 이러한 기본값이 아닌 추가 조건의 경우 특정 요일 또는 날짜 범위에 따라 일정을 설정할 수 있습니다.

메트릭에 따라 스케일링

  1. 자동 크기 조정 설정 페이지에서 사용자 지정 자동 크기 조정을 선택하여 리소스 크기를 조정하는 방법 선택 옵션을 선택합니다.

  2. 기본 블록 아래에서 크기 조정 조건 추가를 선택합니다.

    Custom - add a scale condition link

  3. 조건의 이름을 지정합니다.

  4. 메트릭 기준 크기 조정 옵션이 선택되어 있는지 확인합니다.

  5. 전체 CPU 사용량이 75%를 초과할 때 메시징 단위를 늘리는 규칙을 추가하려면 +규칙 추가 를 선택합니다. 기본 조건 섹션의 단계를 따릅니다.

  6. 메시징 단위의 최소최대기본 수를 설정합니다.

  7. 사용자 지정 조건에 일정을 설정할 수도 있습니다(기본 조건에서는 안됨). 조건에 대한 시작 날짜 및 종료 날짜를 지정하거나 특정 요일(월요일, 화요일 등)을 선택할 수 있습니다.

    1. 시작/종료 날짜 지정을 선택하는 경우 조건이 적용되도록 표준 시간대, 시작 날짜 및 시간종료 날짜 및 시간을 선택합니다(다음 이미지와 같이).

      Minimum, maximum, and default values for number of messaging units

    2. 특정 일 반복을 선택하는 경우 조건이 적용되어야 하는 요일, 표준 시간대, 시작 시간 및 종료 시간을 선택합니다.

      Repeat specific days

특정 수의 메시징 단위로 크기 조정

  1. 자동 크기 조정 설정 페이지에서 사용자 지정 자동 크기 조정을 선택하여 리소스 크기를 조정하는 방법 선택 옵션을 선택합니다.

  2. 기본 블록 아래에서 크기 조정 조건 추가를 선택합니다.

    Custom - add a scale condition link

  3. 조건의 이름을 지정합니다.

  4. 크기 조정 모드에 대해 특정 메시징 단위로 크기 조정 옵션을 선택합니다.

  5. 드롭다운 목록에서 메시징 단위 수를 선택합니다.

  6. 일정의 경우 조건에 대한 시작 날짜 및 종료 날짜를 지정하거나 특정 요일(월요일, 화요일 등) 및 시간을 선택할 수 있습니다.

    1. 시작/종료 날짜 지정을 선택하는 경우 조건이 적용되도록 표준 시간대, 시작 날짜 및 시간종료 날짜 및 시간을 선택합니다.

    scale to specific messaging units - start and end dates

    1. 특정 일 반복을 선택하는 경우 조건이 적용되어야 하는 요일, 표준 시간대, 시작 시간 및 종료 시간을 선택합니다.

    scale to specific messaging units - repeat specific days

    자동 크기 조정 설정의 작동 방식, 특히 프로필 또는 조건을 선택하고 여러 규칙을 평가하는 방법에 대한 자세한 내용은 자동 크기 조정 설정 이해를 참조하세요.

    참고 항목

    • 자동 크기 조정에 대한 결정을 내리기 위해 검토하는 메트릭은 5~10분이 지났을 수 있습니다. 급증하는 워크로드를 처리할 때는 스케일 업 기간은 짧고 스케일 다운 기간은 길어(> 10분) 급증하는 워크로드를 처리하기에 충분한 메시징 단위가 있는지 확인하는 것이 좋습니다.

    • 용량 부족(사용 가능한 메시징 단위 없음)으로 인해 오류가 발생하는 경우 지원 티켓을 제출하세요.

실행 기록

크기 조정 페이지의 실행 기록 탭으로 전환하여 자동 크기 조정 엔진에서 관찰한 메시징 단위 수를 표시하는 차트를 확인합니다. 차트가 비어 있으면 자동 크기 조정이 구성되지 않았거나 구성되지 않았지만 사용하지 않도록 설정되었거나 쿨 다운 기간에 있는 것을 의미합니다.

Screenshot showing **Run history** on the **Scale** page.

알림

크기 조정 페이지의 알림 탭으로 전환하여 다음을 수행합니다.

  • 관리자, 공동 관리자 및 추가 관리자에게 알림 메일 보내기를 사용하도록 설정합니다.

  • 웹후크에서 노출하는 HTTP 또는 HTTPS 엔드포인트로 알림 메일 보내기를 사용하도록 설정합니다.

    Screenshot showing the **Notify** tab of the **Scale** page.

Resource Manager 템플릿을 사용하여 구성

다음 샘플 Resource Manager 템플릿을 사용하여 큐가 있는 Service Bus 네임스페이스를 만들고 네임스페이스에 대한 자동 크기 조정 설정을 구성할 수 있습니다. 이 예제에서는 두 개의 배율 조건이 지정됩니다.

  • 기본 크기 조정 조건: 평균 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 Portal에서 자동 크기 조정 설정 리소스에 대한 JSON 예제를 생성할 수도 있습니다. Azure Portal에서 자동 크기 조정 설정을 구성한 후 크기 조정 페이지의 명령 모음에서 JSON을 선택합니다.

Image showing the selection of the JSON button on the command bar of the **Scale** page in the Azure portal.

그런 다음, 앞의 예제와 같이 Resource Manager 템플릿의 resources 섹션에 JSON을 포함합니다.

추가 고려 사항

기본 조건 또는 프로필과 함께 사용자 지정 자동 스케일링 옵션을 사용하는 경우 메시징 단위가 점진적으로 증가(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]
				}
			}
		}
	]
}

메시징 단위를 점진적으로 늘리거나 줄이는 규칙을 만드는 것이 좋습니다.

다음 단계

메시징 단위에 대한 자세한 내용은 프리미엄 메시징을 참조하세요.