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

快速入门:在 Azure Spring Apps 标准消耗和专用计划中为应用程序设置自动缩放

注意

基本、标准和企业计划将从 2025 年 3 月中旬开始弃用,停用期为 3 年。 建议转换到 Azure 容器应用。 有关详细信息,请参阅 Azure Spring Apps 停用公告

标准消耗和专用计划将于 2024 年 9 月 30 日开始弃用,并在六个月后完全关闭。 建议转换到 Azure 容器应用。 有关详细信息,请参阅将 Azure Spring Apps 标准消耗和专用计划迁移到 Azure 容器应用

本文适用于:✅ 标准消耗和专用计划(预览版)❎ 基本计划/标准计划 ❎ 企业计划

本文介绍如何在 Azure Spring Apps 标准消耗和专用计划中为应用程序设置自动缩放规则。 该计划使用 Azure 容器应用环境来托管 Spring 应用程序,并提供以下管理和支持:

  • 通过一组声明性缩放规则管理自动水平缩放。
  • 支持 Azure 容器应用支持的所有缩放规则。

有关详细信息,请参阅 Azure 容器应用文档

先决条件

缩放定义

缩放由限制和规则的组合定义。

  • 限制是 Spring 允许的最小和最大实例数。

    缩放限制 默认值 最小值 最大值
    每个部署的最小实例数 1 0 30
    每个部署的最大实例数 10 1 30

    默认情况下,Spring 应用程序的最小实例计数设置为 1,以确保部署始终运行。 如果要缩小到零,可以将最小实例计数设置为零。

  • 规则是自动缩放在添加或删除实例时所遵循的条件。 缩放规则包括 HTTP、TCP 和自定义规则,如在 Azure 容器应用程序中设置缩放规则缩放规则部分所述。

    如果定义多个缩放规则,则自动缩放在满足任何规则的第一个条件时开始。

  • 轮询间隔冷却期是自动缩放期间发生的两个时间跨度。

    • 轮询间隔定义规则定义的实时数据的每个轮询操作之间的时间跨度。 默认情况下,轮询间隔设置为 30 秒。
    • 仅当缩放为零时,冷却期才适用,例如,在上次自动缩放检查消息队列且消息队列为空后等待 5 分钟。

设置自动缩放设置

可以使用 Azure 门户或 Azure CLI 为应用程序设置自动缩放设置。

使用以下步骤定义自动缩放设置和规则。

  1. 登录到 Azure 门户。
  2. 在“Azure 服务”下选择“Azure Spring Apps”。
  3. 在“名称”列中,选择要自动缩放的 Azure Spring Apps 实例。
  4. 在 Azure Spring Apps 实例的概述页上,选择导航窗格中的“应用”。
  5. 选择要自动缩放的应用程序。
  6. 在所选应用的概述页上,选择导航窗格中的“横向扩展”。
  7. 在“横向扩展(预览版)”页上,选择要自动缩放的部署。
  8. 设置部署的实例限制。
  9. 选择“添加”以添加缩放规则。

Azure 门户预览版屏幕截图,显示 Azure Spring Apps 实例中应用的“横向扩展”页。

自定义缩放规则

有关定义自定义规则的信息,请参阅 Keda 缩放程序。 以下部分演示了在 MySQL 和 Cron 上设置缩放规则的两个示例。

在 MySQL 数据库上设置自动缩放规则

以下 CLI 命令演示如何根据 Keda MySQL 缩放程序自动缩放 Spring 应用程序。 首先,创建机密以存储 SQL 连接字符串。 此机密用于缩放规则身份验证。 然后,设置一个规则,该规则根据表的行计数缩放应用。

注意

Microsoft 建议使用最安全的可用身份验证流。 本过程中介绍的身份验证流程(例如数据库、缓存、消息传送或 AI 服务)需要非常高的信任度,并携带其他流中不存在的风险。 仅当更安全的选项(例如无密码连接或无密钥连接的托管标识)不可行时,才使用此流。 对于本地计算机操作,首选无密码连接或无密钥连接的用户标识。

az spring app update \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-service-instance-name> \
    --name <app-name> \
    --secrets mysqlconnectionstring="<username>:<pwd>@tcp(<server name>:3306)/<database name>" 

az spring app scale \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-service-instance-name> \
    --name <app-name> \
    --scale-rule-type mysql \
    --scale-rule-name <your rule name> \
    --scale-rule-auth "connectionString=mysqlconnectionstring" \
    --scale-rule-metadata queryValue=4 query="SELECT count(*) FROM mytable" \
    --min-replicas 0 \
    --max-replicas 3

根据 Linux cron 创建规则

以下命令演示如何根据 Keda Cron 缩放程序设置规则。 副本在 cron 时间间隔内缩放到所需的数值。

az spring app scale \
    --resource-group <resource-group-name> \
    --service <Azure-Spring-Apps-service-instance-name> \
    --name <app-name> \
    --scale-rule-type cron \
    --scale-rule-name testscalerule \
    --scale-rule-metadata timezone="Asia/Shanghai" \
                          start="10 * * * *" \
                          end="15 * * * *" \
                          desiredReplicas="3" \
    --min-replicas 0 \
    --max-replicas 3

缩放事件

可以从基础容器应用的系统日志中找到缩放事件,并使用 KEDA 筛选 EventSource,如以下示例所示:

ContainerAppSystemLogs_CL 
| where ContainerAppName_s == 'YourAppName' and EventSource_s == 'KEDA'

清理资源

当不再需要在本文中创建的资源时,请务必将其删除。 若要删除资源,只需删除包含它们的资源组即可。 可使用 Azure 门户删除资源组。 或者,若要使用 Azure CLI 删除资源组,请使用以下命令:

echo "Enter the Resource Group name:" &&
read resourceGroupName &&
az group delete --name $resourceGroupName &&
echo "Press [ENTER] to continue ..."

后续步骤