全部产品
Search
文档中心

ApsaraDB RDS:Mengonfigurasi tugas terjadwal untuk menyesuaikan jumlah RCU untuk instance RDS serverless

更新时间:Jul 06, 2025

Penskalaan Unit Kapasitas RDS (RCU) untuk instance ApsaraDB RDS for MySQL serverless biasanya selesai dalam hitungan detik. Namun, dalam beberapa kasus, penskalaan RCU dapat memerlukan waktu 3 hingga 5 menit karena peningkatan skala antar-host. Jika Anda memiliki persyaratan ketat terkait stabilitas dalam periode waktu tertentu, Anda dapat mengonfigurasi tugas terjadwal untuk menyesuaikan jumlah RCU pada instance RDS serverless Anda. Topik ini menjelaskan cara mengonfigurasi tugas tersebut.

Skenario

  • Sistem melakukan penskalaan otomatis pada instance RDS serverless berdasarkan utilisasi CPU dan penggunaan memori. Jika utilisasi CPU atau penggunaan memori berada dalam rentang 60% hingga 80%, peningkatan skala otomatis akan dipicu. Untuk memastikan stabilitas sumber daya CPU atau memori selama periode waktu tertentu, Anda harus menyesuaikan jumlah minimum RCU terlebih dahulu.

  • Dukungan tersedia untuk peningkatan skala intra-host dan inter-host. Peningkatan skala intra-host dapat diselesaikan dalam hitungan detik, sedangkan peningkatan skala inter-host memerlukan waktu 3 hingga 5 menit. Dalam 99,8% skenario, peningkatan skala intra-host memenuhi kebutuhan bisnis Anda. Jika host tempat instance RDS serverless berada tidak dapat menyediakan sumber daya yang cukup, peningkatan skala inter-host diperlukan. Karena proses ini memerlukan waktu lama, kami menyarankan Anda menetapkan jumlah maksimum dan minimum RCU dengan nilai yang sama untuk periode waktu tertentu guna mencegah dampak dari kegagalan peningkatan skala otomatis.

Solusi

Buat tugas terjadwal untuk memanggil operasi ModifyDBInstanceSpec guna memodifikasi jumlah maksimum dan minimum RCU dalam periode waktu tertentu. Setelah periode berakhir, konfigurasi akan dikembalikan ke nilai semula.

Contoh

Jika Anda ingin meningkatkan jumlah minimum RCU untuk periode waktu tertentu, buat tugas terjadwal untuk meningkatkan jumlah minimum RCU 10 menit sebelum periode dimulai. Ini memberikan waktu bagi peningkatan skala inter-host untuk selesai dan memastikan stabilitas instance selama periode tersebut.

Sebagai contoh, jika Anda ingin memesan 4 hingga 8 RCU selama jam puncak dari pukul 08:00 hingga 09:00, Anda dapat meningkatkan jumlah minimum RCU menjadi 4 pada pukul 07:50 dan mengembalikan konfigurasi ke default 0,5 hingga 8 RCU pada pukul 09:00.

Kode sampel dalam Python

Bagian ini memberikan contoh tentang cara menggunakan APScheduler untuk mengonfigurasi tugas terjadwal. Untuk informasi lebih lanjut, lihat Panduan Pengguna.

  1. Lengkapi langkah-langkah berikut:

    1. Buat pengguna RAM dan berikan izin kepada pengguna RAM.

    2. Instal Python.

    3. Konfigurasikan variabel lingkungan.

    4. Instal dependensi.

  2. Buka CLI dan jalankan perintah berikut untuk menginstal APScheduler:

    pip install apscheduler
  3. Unduh kode sampel.

    1. Pergi ke halaman Debugging dari ModifyDBInstanceSpec di OpenAPI Explorer.

    2. Di tab Parameters, konfigurasikan parameter berikut.

    3. Parameter

      Deskripsi

      Nilai

      DBInstanceId

      ID instance.

      rm-bp1t8v93k6e15****

      PayType

      Metode penagihan instance.

      Serverless

      Direction

      Tipe perubahan spesifikasi instance.

      Serverless

      MaxCapacity

      Jumlah maksimum RCU.

      8.0

      MinCapacity

      Jumlah minimum RCU.

      0.5

      AutoPause

      Menentukan apakah fitur mulai dan berhenti otomatis untuk instance RDS serverless diaktifkan.

      false

      SwitchForce

      Menentukan apakah fitur penskalaan paksa untuk instance RDS serverless diaktifkan.

      true

    4. Di tab SDK Sample Code, pilih Python untuk Bahasa dan klik Download Project untuk mengunduh paket kode sampel.

    5. Catatan

      Kami menyarankan Anda mengunduh proyek sampel SDK V2.0.

    6. Ekstrak paket di perangkat lokal Anda dan masuk ke direktori alibabacloud_sample.

  4. Modifikasi kode untuk mengonfigurasi tugas terjadwal.

    Tambahkan konten tugas terjadwal APScheduler ke file sample.py dan gunakan pemicu cron untuk mengonfigurasi waktu eksekusi tugas terjadwal. Sebagai contoh, pengaturan scheduler.add_job(my_scheduled_job, 'cron', hour=8, minute=0) menunjukkan bahwa tugas secara otomatis dijalankan pada pukul 08:00:00 setiap hari. Kode sampel berikut menunjukkan cara menyetel rentang penskalaan RCU menjadi [4, 8] pada pukul 07:50 setiap hari dan mengembalikan rentang penskalaan RCU menjadi [0,5, 8] pada pukul 09:00 setiap hari:

    sample.py

    # -*- coding: utf-8 -*-
    # File ini dibuat secara otomatis, jangan diedit. Terima kasih.
    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:
            """
            Gunakan AccessKey ID dan AccessKey secret Anda untuk menginisialisasi klien.
            @return: Client
            @throws Exception
            """
            # Jika kode proyek bocor, pasangan AccessKey mungkin bocor dan keamanan sumber daya dalam akun Anda mungkin terganggu. Contoh kode berikut hanya untuk referensi.
            # Untuk tujuan keamanan, kami menyarankan Anda menggunakan kredensial akses sementara yang disediakan oleh Security Token Service (STS). Untuk informasi lebih lanjut, lihat https://www.alibabacloud.com/help/en/sdk/developer-reference/v2-manage-php-access-credentials.
            config = open_api_models.Config(
                # Wajib. Pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dikonfigurasi.,
                access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
                # Wajib. Pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_SECRET dikonfigurasi.,
                access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
            )
            # Untuk informasi lebih lanjut tentang titik akhir, kunjungi https://api.aliyun.com/product/Rds.
            config.endpoint = f'rds.aliyuncs.com'
            return Rds20140815Client(config)
    
        # Panggil operasi API untuk memodifikasi konfigurasi instance RDS serverless.
        @staticmethod
        def modify_db_instance_spec(config: Dict[str, float]) -> None:
            """
            Modifikasi spesifikasi instance DB - fungsi tugas inti
            """
            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:
                # Tangani pengecualian dengan hati-hati dalam skenario bisnis aktual Anda. Jangan abaikan pengecualian dalam proyek Anda. Dalam contoh ini, pesan kesalahan dicetak ke layar.
                print(error.message)
                print(error.data.get("Recommend"))
                UtilClient.assert_as_string(error.message)
    
        @staticmethod
        def main(args: List[str]) -> None:
            """
    
            :rtype: object
            """
            # Inisialisasi scheduler.
            scheduler = BlockingScheduler()
    
            # Konfigurasikan parameter instance RDS serverless untuk memenuhi persyaratan pukul 8:00.
            config_8am = {
                'max_capacity': 8,
                'min_capacity': 4,
                'auto_pause': False,
                'switch_force': True
            }
    
            # Konfigurasikan parameter instance RDS serverless untuk memenuhi persyaratan pukul 9:00.
            config_9am = {
                'max_capacity': 8,
                'min_capacity': 0.5,
                'auto_pause': False,
                'switch_force': True
            }
    
            # Buat tugas terjadwal.
            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:])
    
    

Kode sampel dalam Java

Bagian ini memberikan contoh tentang cara menggunakan Spring Schedule untuk mengonfigurasi tugas terjadwal.

Catatan

Dalam contoh ini, Anda harus menginstal Java 1.8 atau versi lebih baru.

  1. Lengkapi langkah-langkah berikut:

    1. Buat pengguna RAM dan berikan izin kepada pengguna RAM.

    2. Konfigurasikan variabel lingkungan.

  2. Unduh paket sampel dan ekstrak paket ke perangkat lokal Anda.

    Untuk informasi lebih lanjut tentang paket sampel, lihat demo.zip.

  3. Modifikasi isi ScheduleTask.java dan konfigurasikan tugas terjadwal sesuai kebutuhan bisnis Anda.

    Gunakan ekspresi CRON untuk menentukan waktu eksekusi tugas terjadwal. Format ekspresi CRON adalah cron = "Detik Menit Jam Hari Bulan Minggu". Untuk informasi lebih lanjut, lihat Cron.

    Sebagai contoh, @Scheduled(cron = "0 0 8 * * ? ") merepresentasikan pukul 08:00:00 setiap hari. Kode sampel berikut menunjukkan cara menyetel rentang penskalaan RCU menjadi [4, 8] pada pukul 07:50 setiap hari dan mengembalikan rentang penskalaan RCU menjadi [0,5, 8] pada pukul 09:00 setiap hari:

    ScheduleTask.java

    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);
        }
    }

    Tabel berikut menjelaskan beberapa parameter. Anda dapat mengubah nilai parameter berdasarkan kebutuhan bisnis Anda.

    Parameter

    Deskripsi

    Contoh

    RegionId

    ID wilayah instance.

    cn-hangzhou

    DBInstanceId

    ID instance.

    rm-bp1t8v93k6e15****

    PayType

    Metode penagihan instance.

    Serverless

    Direction

    Tipe perubahan spesifikasi instance.

    Serverless

    MaxCapacity

    Jumlah maksimum RCU.

    8.0

    MinCapacity

    Jumlah minimum RCU.

    0.5

    AutoPause

    Menentukan apakah fitur mulai dan berhenti otomatis untuk instance RDS serverless diaktifkan.

    false

    SwitchForce

    Menentukan apakah fitur penskalaan paksa untuk instance RDS serverless diaktifkan.

    true