本文介绍弹性伸缩的工作流程、伸缩模式的配置和弹性伸缩示意图。

本文以伸缩组内的ECS实例为例,介绍弹性伸缩的工作原理。如果您选择伸缩组内的ECI实例,该类型的伸缩组除了不支持关联RDS数据库外,其他内容与ECS类型的伸缩组一致。关于ECS实例和ECI实例的更多信息,请参见什么是云服务器ECS什么是弹性容器实例

工作流程

弹性伸缩增加ECS实例的工作流程如下所示:

工作原理

如果某Web应用使用ECS实例处理业务请求,系统架构分为三层(如上图右侧虚线框所示)。其中,最上层的负载均衡负责将客户端的请求转发给伸缩组内的ECS实例,中间层的伸缩组内的ECS实例负责处理客户端请求,最下层的RDS数据库负责存储来自ECS实例的业务数据。

您可以通过弹性伸缩调整中间层的ECS实例数量,从而自动调整处理业务请求的能力。具体流程说明如下所示:

  1. 弹性伸缩在符合各伸缩模式的触发条件时自动触发伸缩活动,伸缩模式如下表所示。关于伸缩模式的配置方式,请参见伸缩模式的配置

    下表中的所有伸缩模式都可以组合配置,即多模式并行方式。例如,在每天中午12:00开始,业务需求明显增加时,您可以设置定时任务,在每天12:00创建20台ECS实例以应对业务高峰。但创建的ECS实例台数不一定能满足业务需求, 则您可以选择其他伸缩模式,如动态模式、自定义模式等,与定时模式组合起来使用。

    伸缩模式 说明 相关控制台文档 相关API文档
    固定数量模式
    • 如果您在伸缩组设置了最小实例数,当伸缩组的ECS实例数量低于最小实例数时,伸缩组会自动添加ECS实例,使得伸缩组内的ECS实例数量等于最小实例数。
    • 如果您在伸缩组设置了最大实例数,当伸缩组的ECS实例数量超过最大实例数时,伸缩组会自动移出ECS实例,使得伸缩组内的ECS实例数量等于最大实例数。
    • 如果您创建伸缩组时设置期望实例数,伸缩组会自动将ECS实例数量维持在期望实例数。
    配置伸缩组 CreateScalingGroup
    健康模式 如果您在伸缩组开启健康检查功能,伸缩组会定期检查ECS实例的运行状态,如果发现一台ECS实例未处于运行中状态,则判定该ECS实例为不健康实例并移出。 配置伸缩组 CreateScalingGroup
    定时模式 您可以创建定时任务,在指定时间执行指定伸缩规则。 配置定时任务 CreateScheduledTask
    自定义模式 您可以手动进行弹性伸缩,包括手动执行伸缩规则,或者手动添加、移出或者删除已有的ECS实例。
    动态模式 您可以基于云监控性能指标(例如CPU使用率)创建报警任务,当伸缩组的指标数据满足您指定的报警条件(例如伸缩组内所有ECS实例的CPU平均值大于60%)时,触发报警并执行您指定的伸缩规则。 配置报警任务 CreateAlarm
  2. 系统自动通过ExecuteScalingRule接口触发伸缩活动,并在该接口中指定需要执行的伸缩规则唯一标识符,例如示例值为ari:acs:ess:cn-hangzhou:140692647406****:scalingrule/asr-bp1dvirgwkoowxk7****
    • 如果您通过弹性伸缩控制台操作,您可以创建伸缩规则后,在伸缩规则列表下找到对应的伸缩规则,单击伸缩规则ID/名称列下的伸缩规则ID(例如asr-bp14u7kzh8442w9z****),在弹出的页面即可查询到该标识符的值。关于如何创建伸缩规则的具体操作,请参见配置伸缩规则
    • 如果您通过API方式进行操作,关于如何获取伸缩组下的伸缩规则唯一标识符(ScalingRuleAri),您可以调用DescribeScalingRules接口,在返回数据中即可查询到该标识符的值。
  3. 根据上述步骤传入的伸缩规则唯一标识符(或ScalingRuleAri)获取伸缩规则、伸缩组、伸缩配置的相关信息,并创建伸缩活动。
    1. 通过伸缩规则唯一标识符(或ScalingRuleAri)查询伸缩规则以及相应的伸缩组信息,计算出需要增加的ECS实例数量,并获得需要配置的负载均衡和RDS信息。
    2. 通过伸缩组查询到相应的伸缩配置信息,即获得了需要创建的ECS实例的配置信息(CPU、内存、带宽等)。
    3. 根据需要增加的ECS实例数量、实例配置信息、需要配置的负载均衡实例和RDS实例创建伸缩活动。
  4. 在伸缩活动中,自动创建实例并配置负载均衡和RDS。
    1. 按照实例配置信息创建指定数量的ECS实例。
    2. 将创建好的ECS实例的内网IP添加到指定的RDS实例的访问白名单当中,并将创建好的ECS实例添加到指定的负载均衡实例当中。
  5. 伸缩活动完成后,启动伸缩组的冷却功能。

    待冷却时间完成后,该伸缩组才能接收新的执行伸缩规则请求。

伸缩模式的配置

弹性伸缩会自动根据配置适时触发伸缩活动,增加或移出伸缩组内的ECS实例。如果您需要弹性伸缩通过某个伸缩模式触发伸缩活动,您可以选择如下对应的配置方式来实现。

伸缩模式 配置方式 说明
固定数量模式 伸缩组+实例配置来源 该模式的伸缩效果由伸缩组以下配置项决定:
  • 最小实例数
  • 最大实例数
  • (可选)期望实例数
健康模式 伸缩组+实例配置来源 该模式需要开启伸缩组中实例的健康检查配置项。
定时模式 伸缩组+实例配置来源+伸缩规则+定时任务 该模式的伸缩效果由定时任务决定。
动态模式 伸缩组+实例配置来源+伸缩规则+报警任务 该模式的伸缩效果由报警任务决定。
自定义模式 任意伸缩模式的配置方式 在任意伸缩模式下,您可以手动添加、移出或者删除已有的ECS实例。如果您配置了伸缩规则,您还可以手动执行伸缩规则。
多模式并行 组合各伸缩模式的配置方式

根据选用的伸缩模式不同,生效的配置项也不同。并且各伸缩模式是互相独立的,各伸缩模式的伸缩效果没有优先级区分,即伸缩组先触发哪个伸缩模式就先执行哪个伸缩模式对应的伸缩配置项。

例如,为了满足业务新需求,您同时选用了定时模式和动态模式,需要同时配置定时任务和报警任务。如果伸缩组在某个时间先触发定时任务配置项,则先执行定时任务,再执行报警任务。

各配置方式具体说明如下:

序号 配置方式 说明
伸缩组+实例配置来源 您需要先创建伸缩组,再为伸缩组配置实例配置来源,然后启用实例配置来源和伸缩组。完成以上操作后,弹性伸缩才可以自动进行弹性扩张和收缩。该配置方式是必选的基础配置方式,是最小的配置单元。
伸缩组+实例配置来源+伸缩规则+定时任务 在基础配置方式上(即①),您需要创建伸缩规则,再创建定时任务。弹性伸缩通过定时任务来自动执行伸缩规则。
伸缩组+实例配置来源+伸缩规则+报警任务 在基础配置方式上(即①),您需要创建伸缩规则,再创建报警任务。弹性伸缩通过报警任务来自动执行伸缩规则。

弹性伸缩示意图

弹性伸缩支持为伸缩组关联负载均衡和RDS实例。当您从终端(例如移动端或PC端)发起请求时,负载均衡负责将您的请求转发给伸缩组内的某台ECS实例,ECS实例接收并处理请求,并将应用数据保存在云数据库RDS实例上。

弹性伸缩根据业务需求和配置方式自动调整伸缩组内的ECS实例数量,以下为您分别提供扩容、缩容和弹性自愈(即健康检查)场景下弹性伸缩的示意图。

图 1. 弹性扩容示意图
弹性扩张示意图
图 2. 弹性缩容示意图
弹性收缩示意图
图 3. 弹性自愈示意图
弹性自愈示意图