Serverless实例RCU弹性伸缩的耗时通常为秒级,极小概率下可能因为跨机弹性扩容而耗时3~5分钟。如果您对特定时段的稳定性有严格要求,您可以定时配置Serverless实例的RCU,提前增加RCU数量。本文将介绍如何对RCU的范围进行周期性配置。
使用场景
Serverless实例会根据CPU和内存的负载情况进行弹性伸缩。自动弹性扩容的条件为CPU或内存使用率达到60%~80%的阈值范围。若在特定时段对CPU或内存的性能稳定性有较高要求,可提前手动调整RCU的下限配置。
弹性扩容的方式分为本地弹性扩容和跨机弹性扩容两种。其中本地弹性扩容的耗时为秒级,跨机弹性扩容的耗时约为3~5分钟。在99.8%的场景下,本地的秒级弹性扩容可以满足Serverless的弹性扩容需求。然而,在本地资源不足的情况下,Serverless实例的弹性扩容需要跨机进行。由于跨机需要的时间较长,可能会对业务造成一定程度的影响。在特定时段内,为避免因自动弹性扩容未能及时完成而造成的影响,建议提前将RCU的上限和下限设置为相同的数值。
解决方案
使用定时任务调用ModifyDBInstanceSpec - 变更RDS实例API接口,在特定时段修改RCU的上下限,特定时段结束后恢复到默认的RCU上下限。
使用示例
如果需要在特定时段提升RCU下限,建议在该时段前10分钟,定时提升RCU下限,为可能出现的跨机情况预留一定时间,以确保特定时段内实例的稳定性。
例如,某项业务在早高峰时间08:00~09:00希望保证4~8 RCU的配置,可以在07:50分将RCU的下限提升至4,在09:00再恢复到0.5~8 RCU的默认配置。
Python示例
本示例使用APScheduler配置定时任务。
完成RAM授权、准备Python环境、配置环境变量、安装环境依赖等操作。
打开命令行窗口执行如下命令,安装APScheduler。
pip install apscheduler
下载示例代码。
访问ModifyDBInstanceSpec,进入该接口在OpenAPI门户的调试地址。
在参数配置页签,配置如下参数。
在右侧的SDK示例页签,选择Python语言,单击下载完整工程按钮,下载示例代码包。
本地解压并进入alibabacloud_sample目录。
参数
描述
取值
DBInstanceId
实例 ID。
rm-bp1t8v93k6e15****
PayType
实例当前的付费类型。
Serverless
Direction
实例变配类型。
Serverless
MaxCapacity
RCU(Rds Capacity Unit)自动扩缩范围的上限。
8.0
MinCapacity
RCU(Rds Capacity Unit)自动扩缩范围的下限。
0.5
AutoPause
是否开启Serverless实例的智能暂停和启动。
false
SwitchForce
是否开启Serverless实例的强制扩缩容。
true
说明建议下载SDK V2.0版本示例工程。
修改代码,配置定时任务。
修改sample.py,增加APScheduler定时任务的内容,使用Cron触发器以设定定时任务的执行时间。例如,
scheduler.add_job(my_scheduled_job, 'cron', hour=8, minute=0)
代表每天的08时00分00秒。若您计划每日07:50设置RCU范围为[4, 8],并在每日09:00将RCU范围恢复为[0.5, 8],示例代码如下。
Java示例
本示例使用Spring Schedule配置定时任务。
本示例需要安装Java 1.8以上开发环境。
完成RAM授权、配置环境变量等操作。
下载示例程序并在本地解压。
示例程序请参见demo.zip。
修改
ScheduleTask.java
的内容,根据实际情况配置定时任务。配置Cron表达式以设定定时任务的执行时间。其中,
cron = "秒 分 时 日 月 周"
,详情请参见Cron。例如,
@Scheduled(cron = "0 0 8 * * ? ")
代表每天的08时00分00秒。若您计划每日07:50设置RCU范围为[4, 8],并在每日09:00将RCU范围恢复为[0.5, 8],示例代码如下。部分参数的含义如下,请用实际数值进行替换。
参数
描述
示例
RegionId
实例所属地域。
cn-hangzhou
DBInstanceId
实例ID。
rm-bp1t8v93k6e15****
PayType
实例当前的付费类型。
Serverless
Direction
实例变配类型。
Serverless
MaxCapacity
RCU自动扩缩范围的上限。
8.0
MinCapacity
RCU自动扩缩范围的下限。
0.5
AutoPause
是否开启Serverless实例的智能暂停和启动。
false
SwitchForce
是否开启Serverless实例的强制扩缩容。
true