Служба автоматического масштабирования приложений Azure не удается выполнить масштабирование в


Мой сервис приложений не удалось масштабировать после масштабирования. Похоже, это закономерность, которую я пытался устранить в течение нескольких месяцев.

Я пробовал следующее, Но ни один не сработал:

Мое условие масштабирования основано на процессоре и памяти. Однако я никогда не видел, чтобы процессор превышал 12%, поэтому я предполагаю, что это на самом деле масштабирование на основе памяти.

  1. Установите условие масштабирования в память более 90% в течение 5 минут в среднем с 10 мин. перезарядка и масштаб в состоянии для памяти менее 70% в среднем за 5 минут. Это, кажется, не имеет смысла, так как если моя загрузка памяти уже на 90%, у меня действительно есть основные утечки памяти и уже должно быть масштабировано.

  2. Установите условие масштабирования в память более 80% в течение 60 минут в среднем с 10 мин. перезарядка и масштабирование в состоянии памяти менее 60% в среднем за 5 минут. Это имеет больше смысла, поскольку я видел, как использование памяти вспыхивало в течение нескольких часов только для того, чтобы упасть.

Введите описание изображения здесь

Ожидаемое поведение: автоматическое масштабирование службы приложений уменьшит количество экземпляров через 5 минут, когда использование памяти упадет ниже 60%.

Вопрос:

Каков идеальный порог по Метрике для плавного масштабирования, если мой базовый процессор остается примерно на уровне 6%, а память-на уровне 53%? То есть, каковы наилучшие минимальные значения для масштабирования и наилучшие максимальные значения для масштабирования, не беспокоясь о таких анти-паттернах, как хлопанье крыльями? Больше порог 20% разницы имеет для меня больше смысла.

Альтернативное решение:

Учитывая количество устранения неполадок, связанных с тем, что продается так просто, как" кнопочное масштабирование", делает его почти не стоящим головной боли неопределенности конфигурации (вы даже не можете использовать метрики IIS, такие как подсчет подключений, без пользовательского сценария powershell!). Я рассматриваю возможность отключения автоматического масштабирования из-за его непредсказуемости и просто продолжаю запускать 2 экземпляра для автоматической загрузки балансировка и масштабирование вручную.

Конфигурация Автомасштабирования:

{
    "location": "East US 2",
    "tags": {
        "$type": "Microsoft.WindowsAzure.Management.Common.Storage.CasePreservedDictionary, Microsoft.WindowsAzure.Management.Common.Storage"
    },
    "properties": {
        "name": "CPU and Memory Autoscale",
        "enabled": true,
        "targetResourceUri": "/redacted",
        "profiles": [
            {
                "name": "Auto created scale condition",
                "capacity": {
                    "minimum": "1",
                    "maximum": "10",
                    "default": "1"
                },
                "rules": [
                    {
                        "scaleAction": {
                            "direction": "Increase",
                            "type": "ChangeCount",
                            "value": "1",
                            "cooldown": "PT10M"
                        },
                        "metricTrigger": {
                            "metricName": "MemoryPercentage",
                            "metricNamespace": "",
                            "metricResourceUri": "/redacted",
                            "operator": "GreaterThanOrEqual",
                            "statistic": "Average",
                            "threshold": 80,
                            "timeAggregation": "Average",
                            "timeGrain": "PT1M",
                            "timeWindow": "PT1H"
                        }
                    },
                    {
                        "scaleAction": {
                            "direction": "Decrease",
                            "type": "ChangeCount",
                            "value": "1",
                            "cooldown": "PT5M"
                        },
                        "metricTrigger": {
                            "metricName": "MemoryPercentage",
                            "metricNamespace": "",
                            "metricResourceUri": "/redacted",
                            "operator": "LessThanOrEqual",
                            "statistic": "Average",
                            "threshold": 60,
                            "timeAggregation": "Average",
                            "timeGrain": "PT1M",
                            "timeWindow": "PT10M"
                        }
                    },
                    {
                        "scaleAction": {
                            "direction": "Increase",
                            "type": "ChangeCount",
                            "value": "1",
                            "cooldown": "PT5M"
                        },
                        "metricTrigger": {
                            "metricName": "CpuPercentage",
                            "metricNamespace": "",
                            "metricResourceUri": "/redacted",
                            "operator": "GreaterThanOrEqual",
                            "statistic": "Average",
                            "threshold": 60,
                            "timeAggregation": "Average",
                            "timeGrain": "PT1M",
                            "timeWindow": "PT1H"
                        }
                    },
                    {
                        "scaleAction": {
                            "direction": "Decrease",
                            "type": "ChangeCount",
                            "value": "1",
                            "cooldown": "PT5M"
                        },
                        "metricTrigger": {
                            "metricName": "CpuPercentage",
                            "metricNamespace": "",
                            "metricResourceUri": "/redacted",
                            "operator": "LessThanOrEqual",
                            "statistic": "Average",
                            "threshold": 40,
                            "timeAggregation": "Average",
                            "timeGrain": "PT1M",
                            "timeWindow": "PT10M"
                        }
                    }
                ]
            }
        ],
        "notifications": [
            {
                "operation": "Scale",
                "email": {
                    "sendToSubscriptionAdministrator": false,
                    "sendToSubscriptionCoAdministrators": false,
                    "customEmails": [
                        "redacted"
                    ]
                },
                "webhooks": []
            }
        ],
        "targetResourceLocation": "East US 2"
    },
    "id": "/redacted",
    "name": "CPU and Memory Autoscale",
    "type": "Microsoft.Insights/autoscaleSettings"
}
3 2

3 ответа:

У меня точно такая же проблема, и я пришел к выводу, что автоматическое масштабирование до одного экземпляра, как мы хотим, в настоящее время невозможно.

Мой текущий обходной путь состоит в масштабировании до 1 экземпляра со вторым профилем, который повторяется каждый день между 23: 55 и 00: 00.

Просто чтобы повторить проблему. У меня есть следующий сценарий. Она в основном идентична вашей.

  • базовый уровень памяти службы приложений составляет 50%
  • масштабировать 1 экземпляр, когда avg (память) > 80%
  • масштабирование в 1 случае, когда avg (память)

Масштабирование от 1 экземпляра до 2 экземпляров будет работать правильно, когда средний процент памяти превысит 80%. Но масштабирование до 1 экземпляра никогда не будет работать, потому что базовый уровень памяти слишком высок.

Прочитав рекомендации, я понимаю, что при масштабировании он будет оценивать результирующий процент памяти и проверять, не срабатывает ли правило масштабирования.

Так что если среднее процент памяти падает до 50% для двух случаев срабатывает правило масштабирования, и оно оценивает результирующее использование памяти как 2 * 50% / 1 = 100% , что, конечно, вызовет правило масштабирования, и таким образом оно не будет масштабироваться.

Однако он должен работать при масштабировании от 3 до 2 экземпляров: 3 * 50% / 2 = 75%, что меньше, чем 80% правила масштабирования.

Для метрики CpuPercentage у вас есть действие масштабирования вверх, когда оно выходит за пределы 60, и действие масштабирования вниз, когда оно опускается ниже 40, и разница между ними очень мала. Это может вызвать поведение, описываемое как хлопанье, и это приведет к тому, что масштаб AutoScale в действии не сработает. Аналогичная проблема связана с настроенным правилом MemoryPercent.

Вы должны иметь разницу по крайней мере 40 между вашим масштабом вверх и масштабом в трехмерных плоскостях, чтобы избежать хлопания. Больше подробности по хлопанью находятся в https://docs.microsoft.com/en-us/azure/monitoring-and-diagnostics/insights-autoscale-best-practices#choose-the-thresholds-carefully-for-all-metric-types (поиск слова Flapping)

У меня здесь та же проблема. Моему приложению нужен только один экземпляр, и у меня есть конфигурация автоматического масштабирования, такая как:

Масштабирование
При br-empresa (Average) CpuPercentage > 85 количество экземпляров увеличивается на 1
Или Br-Empresa (средняя) MemoryPercentage > 85 увеличить количество экземпляров на 1

Масштаб в
Когда br-empresa (Average) CpuPercentage И Br-Empresa (Средняя) MemoryPercentage

И базовый уровень для памяти составляет 60%.

Логика масштабирования работает довольно хорошо. Но приложение никогда не масштабируется, даже если объем памяти падает до 60%. (60% * 2) / 1 = 120%

Для метрик памяти или процессора фактическая оценка хлопания не имеет смысла.