ほとんどの場合、サーバーレスApsaraDB RDS for MySQLインスタンスのRDS容量単位 (RCU) スケーリングは数秒以内に完了します。 いくつかのケースでは、RCUスケーリングは、ホスト間スケールアップのために完了するのに3〜5分を必要とし得る。 特定の期間内の安定性に関する厳しい要件がある場合は、スケジュールされたタスクを設定して、サーバーレスRDSインスタンスのRCUの数を調整できます。 このトピックでは、スケジュールされたタスクを設定してRCUの数を調整する方法について説明します。
シナリオ
システムは、CPU使用率とメモリ使用量に基づいて、サーバーレスRDSインスタンスで自動スケーリングを実行します。 CPU使用率またはメモリ使用率が60% 〜80% の範囲内にある場合、自動スケールアップがトリガーされます。 特定の期間内のCPUまたはメモリリソースの安定性に対する要件が高い場合は、事前にRCUの最小数を調整する必要があります。
ホスト内スケールアップとホスト間スケールアップがサポートされています。 ホスト内のスケールアップは数秒以内に完了でき、ホスト間のスケールアップは3〜5分以内に完了できます。 99.8% のシナリオでは、ホスト内のスケールアップがビジネス要件を満たすことができます。 サーバーレスRDSインスタンスが存在するホストが十分なリソースを提供できない場合は、ホスト間でRCUをスケールアップする必要があります。 ホスト間のスケールアップを完了するには長い時間が必要で、ワークロードに影響を与える可能性があります。 自動スケールアップの失敗による影響を防ぐために、特定の期間、RCUの最大数と最小数を同じ値に設定することを推奨します。
ソリューション
ModifyDBInstanceSpec操作を呼び出して、特定の期間内のRCUの最大数と最小数を変更するスケジュール済みタスクを作成します。 期間が経過した後、変更はロールバックされます。
例
特定の期間のRCUの最小数を増やす場合は、スケジュールされたタスクを作成して、その期間の10分前にRCUの最小数を増やすことをお勧めします。 ホスト間スケールアップが必要な場合は、ホスト間スケールアップを完了させ、一定期間内のインスタンスの安定性を確保します。
たとえば、08:00から09:00までのピーク時に4〜8個のRCUを予約する場合、07:50にRCUの最小数を4に増やし、09:00に0.5〜8個のRCUのデフォルト設定に復元できます。
Pythonのサンプルコード
このセクションでは、APSchedulerを使用してスケジュールタスクを構成する方法の例を示します。 詳細については、「ユーザーガイド」をご参照ください。
次の操作を完了します。
CLIを開き、次のコマンドを実行してAPSchedulerをインストールします。
pip install apscheduler
サンプルコードをダウンロードします。
のデバッグページに移動します。 OpenAPI ExplorerのModifyDBInstanceSpec。
[パラメーター] タブで、次のパラメーターを設定します。
[SDKサンプルコード] タブで、[Python] (言語用) を選択し、[プロジェクトのダウンロード] をクリックしてサンプルコードパッケージをダウンロードします。
オンプレミスデバイスでパッケージを解凍し、alibabacloud_sampleディレクトリに移動します。
パラメーター
説明
値
DBInstanceId
インスタンス ID 。
rm-bp1t8v93k6e15 ****
PayType
インスタンスの課金方法です。
Serverless
方向
インスタンスの仕様変更タイプ。
Serverless
MaxCapacity
RCUの最大数。
8.0
MinCapacity
RCUの最小数。
0.5
自動一時停止
サーバーレスRDSインスタンスの自動起動および停止機能を有効にするかどうかを指定します。
false
SwitchForce
サーバーレスRDSインスタンスの強制スケーリング機能を有効にするかどうかを指定します。
true
説明SDK V2.0のサンプルプロジェクトをダウンロードすることを推奨します。
スケジュールされたタスクを設定するコードを変更します。
APSchedulerスケジュールタスクの内容をsample.pyファイルに追加し、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以降をインストールする必要があります。
次の操作を完了します。
サンプルパッケージをダウンロードし、オンプレミスデバイスに解凍します。
サンプルパッケージの詳細については、「demo.zip」をご参照ください。
ScheduleTask.java
の内容を変更し、ビジネス要件に基づいてスケジュールタスクを設定します。CRON式を設定して、スケジュールされたタスクの実行時間を指定します。
cron = "2分時間日月週"
はCRON式である。 詳細については、「Cron」をご参照ください。たとえば、
@ Scheduled(cron = "0 0 8 * * *? ")
は毎日08:00:00を表します。 次のサンプルコードは、毎日07:50にRCUスケーリング範囲を [4,8] に設定し、毎日09:00にRCUスケーリング範囲を [0.5, 8] に復元する方法を示しています。下表に一部のパラメーターを示します。 ビジネス要件に基づいてパラメーターの値を変更できます。
パラメーター
説明
例
RegionId
インスタンスのリージョン ID です。
cn-hangzhou
DBInstanceId
インスタンス ID 。
rm-bp1t8v93k6e15 ****
PayType
インスタンスの課金方法です。
Serverless
方向
インスタンスの仕様変更タイプ。
Serverless
MaxCapacity
RCUの最大数。
8.0
MinCapacity
RCUの最小数。
0.5
自動一時停止
サーバーレスRDSインスタンスの自動起動および停止機能を有効にするかどうかを指定します。
false
SwitchForce
サーバーレスRDSインスタンスの強制スケーリング機能を有効にするかどうかを指定します。
true