Todos los productos
Search
Centro de documentos

ApsaraDB RDS:Schedule the configuration of RCUs for a serverless instance

Última actualización: Sep 03, 2026

ApsaraDB RDS for MySQL serverless escala automáticamente las unidades de capacidad de RDS (RCU) según el uso de CPU y memoria. En el 99.8 % de los casos, los aumentos de escala se completan en segundos (dentro del mismo host). Sin embargo, cuando el host actual no puede proporcionar suficientes recursos, se requiere un aumento de escala entre hosts. Este proceso tarda entre 3 y 5 minutos, y podría afectar sus cargas de trabajo. Para evitar que esto impacte un periodo de alta demanda conocido, utilice una tarea programada para elevar el valor mínimo de RCU antes de que el tráfico alcance su punto máximo.

Funcionamiento

El escalado automático activa un aumento de escala cuando el uso de CPU o de memoria alcanza entre el 60 % y el 80 %. Existen dos tipos de aumentos de escala:

Tipo de aumento de escala

Duración

Impacto en la conexión

Frecuencia

Dentro del mismo host

Segundos

Ninguna

99.8 % de los casos

Entre hosts

3–5 minutos

Puede afectar sus cargas de trabajo

Cuando el host no puede proporcionar suficientes recursos

Establecer MinCapacity y MaxCapacity con el mismo valor fija la instancia en una capacidad específica durante un periodo de tiempo. Esto elimina el riesgo de aumentos de escala durante dicho periodo.

La tarea programada invoca la API ModifyDBInstanceSpec para aumentar MinCapacity antes de que comience un periodo de alta demanda y restaura los valores originales al finalizar.

Casos de uso

  • Proteger un periodo pico conocido: Reserve un rango fijo de RCU durante un periodo de alta demanda predecible (por ejemplo, un proceso por lotes o el horario laboral pico) para eliminar el riesgo de aumentos de escala entre hosts.

Escenario de ejemplo

Reserve de 4 a 8 RCU durante una hora pico de 08:00 a 09:00. Dado que un aumento de escala entre hosts puede tardar hasta 5 minutos, eleve el mínimo 10 minutos antes, a las 07:50. Restaure el rango predeterminado (0.5–8 RCU) a las 09:00.

image

Los dos trabajos programados utilizan los siguientes parámetros:

Hora

**MinCapacity**

**MaxCapacity**

Efecto

07:50

4

8

Eleva el mínimo 10 minutos antes del pico; activa un aumento de escala entre hosts si es necesario

09:00

0.5

8

Restaura el rango predeterminado después del periodo pico

Requisitos previos

Antes de empezar, asegúrese de contar con lo siguiente:

Schedule the task in Python

Este ejemplo utiliza APScheduler con un BlockingScheduler y activadores cron.

Configuración inicial

  1. Install Python y install the Alibaba Cloud SDK dependencies.

  2. Instale APScheduler:

    pip install apscheduler
  3. Descargue el proyecto de muestra del SDK para ModifyDBInstanceSpec:

    1. Abra la página de ModifyDBInstanceSpec en OpenAPI Explorer.

    2. En la pestaña Parameters, establezca los siguientes valores:

      Parámetro

      Valor

      DBInstanceId

      rm-bp1t8v93k6e15****

      PayType

      Serverless

      Direction

      Serverless

      MaxCapacity

      8.0

      MinCapacity

      0.5

      AutoPause

      false

      SwitchForce

      true

    3. En la pestaña SDK Sample Code, seleccione Python en la lista desplegable Languages y haga clic en Download Project. > Note: Descargue el proyecto de muestra del SDK V2.0.

    4. Descomprima el paquete y abra el directorio _alibabacloud_sample_.

Configurar la tarea programada

Agregue el contenido de la tarea programada de APScheduler al archivo sample.py y utilice un activador cron para configurar la hora de ejecución. El activador cron hour=7, minute=50 se ejecuta a las 07:50 todos los días; hour=9, minute=0 se ejecuta a las 09:00.

# -*- coding: utf-8 -*-
# This file is auto-generated, don't edit it. Thanks.
import os
import sys
from typing import List, Dict
from alibabacloud_rds20140815.client import Client as Rds20140815Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_rds20140815 import models as rds_20140815_models
from alibabacloud_tea_util import models as util_models
from alibabacloud_tea_console.client import Client as ConsoleClient
from alibabacloud_tea_util.client import Client as UtilClient
from apscheduler.schedulers.blocking import BlockingScheduler

class Sample:
    def __init__(self):
        pass

    @staticmethod
    def create_client() -> Rds20140815Client:
        """
        Use your AccessKey ID and AccessKey secret to initialize a client.
        @return: Client
        @throws Exception
        """
        # If the project code is leaked, the AccessKey pair may be leaked and the security of resources within your account may be compromised. The following sample code is provided only for reference.
        # For security purposes, use temporary access credentials provided by Security Token Service (STS). For more information, see https://www.alibabacloud.com/help/en/sdk/developer-reference/v2-manage-php-access-credentials.
        config = open_api_models.Config(
            # Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is configured.
            access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            # Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is configured.
            access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        )
        # For more information about endpoints, visit https://api.alibabacloud.com/product/Rds.
        config.endpoint = f'rds.aliyuncs.com'
        return Rds20140815Client(config)

    # Call the ModifyDBInstanceSpec API to update the serverless RDS instance configuration.
    @staticmethod
    def modify_db_instance_spec(config: Dict[str, float]) -> None:
        """
        Modify DB instance spec - the core task function
        """
        client = Sample.create_client()
        serverless_configuration = rds_20140815_models.ModifyDBInstanceSpecRequestServerlessConfiguration(
            max_capacity=config['max_capacity'],
            min_capacity=config['min_capacity'],
            auto_pause=config['auto_pause'],
            switch_force=config['switch_force']
        )
        modify_dbinstance_spec_request = rds_20140815_models.ModifyDBInstanceSpecRequest(
            dbinstance_id='rm-bp1t8v93k6e15****',
            direction='Serverless',
            pay_type='Serverless',
            serverless_configuration=serverless_configuration
        )
        runtime = util_models.RuntimeOptions(
            read_timeout=50000,
            connect_timeout=50000
        )
        try:
            resp = client.modify_dbinstance_spec_with_options(modify_dbinstance_spec_request, runtime)
            ConsoleClient.log(UtilClient.to_jsonstring(resp))
        except Exception as error:
            # Handle exceptions with caution in your actual business scenario. Do not ignore exceptions in your project. In this example, error messages are printed to the screen.
            print(error.message)
            print(error.data.get("Recommend"))
            UtilClient.assert_as_string(error.message)

    @staticmethod
    def main(args: List[str]) -> None:
        # Initialize the scheduler.
        scheduler = BlockingScheduler()

        # RCU range for 08:00-09:00 peak: min=4, max=8.
        # Scheduled at 07:50 to allow inter-host scale-up to complete before peak starts.
        config_8am = {
            'max_capacity': 8,
            'min_capacity': 4,
            'auto_pause': False,
            'switch_force': True
        }

        # Default RCU range restored after peak: min=0.5, max=8.
        config_9am = {
            'max_capacity': 8,
            'min_capacity': 0.5,
            'auto_pause': False,
            'switch_force': True
        }

        # Create scheduled tasks using cron triggers.
        scheduler.add_job(Sample.modify_db_instance_spec, 'cron', hour=7, minute=50, args=[config_8am])
        scheduler.add_job(Sample.modify_db_instance_spec, 'cron', hour=9, minute=0, args=[config_9am])

        try:
            scheduler.start()
        except (KeyboardInterrupt, SystemExit):
            pass

if __name__ == '__main__':
    Sample.main(sys.argv[1:])

Reemplace rm-bp1t8v93k6e15**** con el ID real de su instancia. Los valores de hour y minute en scheduler.add_job siguen el formato de 24 horas; ajústelos para que coincidan con su periodo de alta demanda.

Schedule the task in Java

Este ejemplo utiliza Spring Schedule. Se requiere Java 1.8 o posterior.

Configuración inicial

  1. Complete los pasos de RAM user and environment variable prerequisites.

  2. Descargue el paquete de muestra demo.zip y descomprímalo en su computadora local.

Configurar la tarea programada

Abra ScheduleTask.java y actualice las expresiones cron y los parámetros para que coincidan con su periodo de alta demanda. El formato cron es "Second Minute Hour Day Month Week". Por ejemplo, @Scheduled(cron = "0 0 8 * * ? ") se ejecuta a las 08:00:00 todos los días.

El siguiente código establece el rango de RCU en [4, 8] a las 07:50 y restaura [0.5, 8] a las 09:00:

package com.example.demo;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class ScheduleTask {

    @Scheduled(cron = "0 50 7 * * ? ")
    public void scheduleTask8am() {
        ModifySpecParams params = new ModifySpecParams();
        params.setRegionId("cn-hangzhou");
        params.setDBInstanceId("rm-bp1t8v93k6e15****");
        params.setDirection("Serverless");
        params.setPayType("Serverless");
        params.setAutoPause(false);
        params.setSwitchForce(true);
        params.setMaxCapacity(8);
        params.setMinCapacity(4);
        ModifyDBInstanceSpec.modify(params);
    }

    @Scheduled(cron = "0 0 9 * * ? ")
    public void scheduleTask9am() {
        ModifySpecParams params = new ModifySpecParams();
        params.setRegionId("cn-hangzhou");
        params.setDBInstanceId("rm-bp1t8v93k6e15****");
        params.setDirection("Serverless");
        params.setPayType("Serverless");
        params.setAutoPause(false);
        params.setSwitchForce(true);
        params.setMaxCapacity(8);
        params.setMinCapacity(0.5);
        ModifyDBInstanceSpec.modify(params);
    }
}

Ajuste los siguientes parámetros para que coincidan con su entorno y requisitos:

Parámetro

Descripción

Ejemplo

RegionId

ID de región de la instancia

cn-hangzhou

DBInstanceId

ID de la instancia

rm-bp1t8v93k6e15****

PayType

Método de facturación

Serverless

Direction

Tipo de cambio de especificación

Serverless

MaxCapacity

Número máximo de RCU

8.0

MinCapacity

Número mínimo de RCU

0.5

AutoPause

Si se debe habilitar el inicio y detención automáticos

false

SwitchForce

Si se debe habilitar el escalado forzado

true

Para consultar la sintaxis de expresiones cron, consulte la referencia de la anotación @Scheduled de Spring).

Pasos siguientes