EAS サービスが数十または数百のレプリカに拡張される場合、完全なローリングアップデートはバッチ制御や一時停止メカニズムを提供しないため、デプロイのリスクが大きくなります。更新計画機能は、手動バッチ (パーティション) と自動バッチ (バッチ更新) という 2 つの更新モードをサポートすることでこの問題に対応し、大規模デプロイのペースを制御し、問題が発生した場合に迅速にロールバックできるようにします。
基本概念
複数の更新モード: 手動バッチ (パーティション) と 自動バッチ (バッチ更新) の 2 つのモードがサポートされています。
特性
[手動バッチ] (パーティション)
[自動バッチ] (バッチ更新)
制御
完全に手動で、各バッチを手動で進めます
設定後、システムが自動的にバッチを進めます
運用負荷
高い
低い
柔軟性
最高
中程度
最適な用途
重要なオンラインサービスのカナリアリリース
大規模サービスの定期的な更新
更新プロセスの完全な制御: 更新中のどの時点でも、一時停止、ロールバック、またはバッチ戦略の変更が可能です。計画を削除すると、デフォルトの完全置換戦略に戻ります。
リアルタイムのステータス可視性: サービス詳細ページの オートスケーリング タブにある 計画の更新 セクションには、リアルタイムステータス、進行状況、バッチカウントダウン、その他の主要な情報が表示されます。
クイックスタート
次の例では、10 個のレプリカを持つサービスで手動バッチを使用して更新計画を作成し、サービス更新を完了する手順を説明します。
前提条件:更新計画機能の有効化
更新計画機能は、新しいサービスの作成時にのみ有効にできます。既存のサービスを更新して有効にすることはできません。
サービスを作成するときは、JSON 設定の features フィールドに "eas.aliyun.com/enable-rollout": "true" を追加します。この設定がない場合、更新計画機能は利用できません。例:
{
"metadata": {
"instance": 10
},
"features": {
"eas.aliyun.com/enable-rollout": "true"
}
}ステップ 1:更新計画の作成
対象のサービスをクリックして、EAS サービス詳細ページを開きます。
オートスケーリングg タブをクリックし、計画の更新 セクションで 更新スケジュールの作成 をクリックします。
右側からスライドインするパネルで、手動バッチを選択し、インスタンス数の更新を
2/10に設定します。OK をクリックします。
更新計画が作成されると、計画の更新 セクションにステータスが[保留中]と表示されます。(現在は有効化待ちです。設定のみ保存されており、「サービスの更新」で変更を送信すると、計画に従って実行されます。)
ステップ 2:更新のトリガー
サービス詳細ページで更新をクリックして、新しいサービス設定を送信します。
システムは計画に従って更新を開始します。最初に 2 つのレプリカを更新し、その後一時停止して待機します。[更新計画] セクションに現在の進行状況 (2/10) が表示されます。
ステップ 3:検証と次のバッチへの移行
ビジネスメトリクス (レイテンシー、エラー率など) を確認します。問題が見つからない場合は、プランを変更し、ターゲットレプリカ数を 10 に設定します。システムは、更新が完了するまで残りの 8 つのレプリカを更新します。
問題が見つかった場合は、更新計画を変更してターゲットレプリカ数を 0 に設定します。更新されたすべてのレプリカが以前のバージョンにロールバックされます。
ステータスリファレンス
更新計画は 2 段階のステータスモデルを使用します。上位レベルは**フェーズ**で、下位レベルは**ステージ**です (ステージは、フェーズがアクティブの場合にのみ存在します)。
未設定:更新計画が存在しません。サービスを更新すると、完全置換がトリガーされます。
保留中:計画は作成済みで、サービス更新によって有効化されるのを待機しています。
アクティブ:更新がトリガーされ、システムがレプリカをバッチで置き換えています。アクティブフェーズには 3 つのステージがあります:
現在のバッチ実行中: バッチが進行中です。更新済みのインスタンス数がターゲット数に近づいています。
現在のバッチ一時停止中: ユーザーによって実行が一時停止されました。進行が停止しています。
現在のバッチ完了: バッチのターゲット数に到達しました。システムは、手動で次に進められる (手動バッチ) か、カウントダウンが終了する (自動バッチ) のを待機します。
完了:現在のラウンドの更新が完了しました。
サービスを再度更新すると、計画が再トリガーされ、ステータスが [アクティブ] に変わります。
計画を変更すると、ステータスが [保留中] に変わり、次のサービス更新を待ちます。
次の表は、各ステータスで使用可能な操作を示しています:
操作 | 未設定 | 保留中 | アクティブ | 完了 | ||
現在のバッチ実行中 | 現在のバッチ一時停止中 | 現在のバッチ完了 | ||||
計画の作成 | ✓ | |||||
計画の変更 | ✓ | ✓ | ✓ | ✓ | ✓ | |
計画の削除 | ✓ | ✓ | ✓ | ✓ | ✓ | |
一時停止 | ✓ | |||||
再開 | ✓ | |||||
サービスの更新 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
使用上の注意
アクティブ状態の計画を変更する場合: 新しいパラメータは直ちに有効になります。計画が現在一時停止されている場合、変更を適用すると自動的に再開されます。
完了状態の計画を変更する場合: 設定は保存されますが、自動的に更新はトリガーされません。新しい計画を適用するには、サービスを再度更新してください。
アクティブ状態の計画を削除する場合: 残りのレプリカは完全置換戦略を使用して更新が続行されます。ロールバックは発生しません。
更新計画が存在する状態でスケーリングする場合: 計画の設定は変更されず、実行時の実際のレプリカ数に基づいて適用されます。
手動バッチで最初のバッチ数を 0 に設定する場合: これは有効な値です。サービス更新は直ちにトリガーされますが、更新開始直後に一時停止し、手動で処理を進めるのを待機します。
自動バッチでバッチサイズ ≥ 合計レプリカ数を設定する場合: すべてのレプリカが単一のバッチで更新され、これは完全置換と同様の動作になります。
JSON 構成
サービス JSON 設定の metadata.rolling_strategy フィールドでパラメーターを設定して、更新計画を構成します。
設定全体の構造
{
"metadata": {
"rolling_strategy": {
"max_surge": "25%",
"max_unavailable": "20%",
"partition": 5,
"paused": false,
"batch_update": {
"interval": "5m",
"batch_size": 2
}
}
}
}フィールドリファレンス
フィールド | 型 | 説明 | デフォルト値 |
| 数値またはパーセンテージ | 更新中に許可される追加レプリカの最大数 | 0 |
| 数値またはパーセンテージ | 更新中に利用不可になる可能性があるレプリカの最大数 | 20% |
| 数値またはパーセンテージ | 手動バッチ: 現在のバッチで更新するレプリカ数 | — |
| ブール値 | 更新を一時停止するかどうかを指定します。この設定は両方のモードに適用されます。 | false |
| 期間文字列 (例: | 自動バッチ: あるバッチの完了後、次のバッチを開始するまでの待機時間 | — |
| 数値またはパーセンテージ | 自動バッチ: 1 バッチあたりに更新するレプリカ数 |
|
構成例
手動バッチ:カナリアリリース
{
"metadata": {
"instance": 10,
"rolling_strategy": {
"partition": 2,
"max_unavailable": 1
}
}
}レプリカは合計 10 個です。最初の 2 個が更新され、残りの 8 個は、手動で計画を次に進めるまで古いバージョンを維持します。
自動バッチ:大規模サービス
{
"metadata": {
"instance": 100,
"rolling_strategy": {
"batch_update": {
"interval": "10m",
"batch_size": 5
}
}
}
}レプリカは合計 100 個です。システムが 10 分ごとに 5 個のレプリカを自動的に更新します。
緊急一時停止
{
"metadata": {
"rolling_strategy": {
"paused": true
}
}
}クイックロールバック
{
"metadata": {
"rolling_strategy": {
"partition": 0
}
}
}partition を 0 に設定すると、更新されたすべてのレプリカが以前のバージョンにロールバックされます。これは、手動バッチ処理モードと自動バッチ処理モードの両方で機能します。
よくある質問
Q: 迅速にロールバックするにはどうすればよいですか?
更新中に問題が発見された場合 (例:V2 から V3 への更新時) は、次の手順で迅速にロールバックできます:
更新計画を 手動バッチ に切り替え、ターゲットレプリカ数を 0 に設定します。更新されたすべてのレプリカが以前のバージョン (V2) にロールバックされます。
サービス設定を更新します (V4 や他の安定したバージョンなど)。
必要に応じて更新計画を変更して、ロールアウトを続行します。
更新がすでに完了し、すべてのレプリカが新しいバージョン (V3) を実行している場合、更新計画を使用してロールバックすることはできません。サービスバージョンリストに移動し、ロールバックする特定のバージョンを選択してください。
Q: 手動バッチと自動バッチのパラメータを同時に設定できますか?
いいえ。partition パラメーター (手動バッチ処理) が優先されます。partition が設定されている場合、システムはすべての自動バッチ処理パラメーターを無視します。
Q: 進行中の更新を一時停止するにはどうすればよいですか?
paused: true に設定します。これは、手動バッチ処理と自動バッチ処理の両方で機能します。
Q: 自動バッチのバッチサイズを設定しない場合はどうなりますか?
システムは max_unavailable の値をバッチサイズとして使用します。
Q: 自動バッチのバッチ間隔を設定しない場合はどうなりますか?
バッチサイズは引き続き適用されますが、システムは自動的に次のバッチに進みません。各バッチが完了すると更新は一時停止し、次のバッチに進むには手動での再開操作が必要になります。