すべてのプロダクト
Search
ドキュメントセンター

Microservices Engine:グレースフル起動

最終更新日:Nov 09, 2025

リリース、スケールアウト、再起動は、どのオンラインアプリケーションでも避けられません。Microservices Engine (MSE) のグレースフル起動機能は、これらの操作中にアプリケーションを保護します。グレースフル起動機能には、遅延サービス登録、低トラフィックプリフェッチ、サービス readiness プローブという 3 つの主要な機能が含まれています。このトピックでは、MSE でグレースフル起動機能を使用する方法について説明します。

機能の概要

遅延登録

マイクロサービスプロバイダーインスタンスは、アプリケーションの起動中にサービスレジストリに登録されます。登録後、コンシューマーアプリケーションはプロバイダーをサブスクライブして呼び出すことができます。Spring フレームワーク上に構築された Java アプリケーションの場合、登録は通常、Spring コンテキストがリフレッシュされた後に行われます。プロバイダーが非同期初期化ロジックを完了する前に登録すると、コンシューマーからの呼び出しが失敗する可能性があります。たとえば、ビッグデータサービスは、リクエストを処理する前に Object Storage Service (OSS) から数百メガバイトのデータをプルする必要がある場合があります。アプリケーションが起動直後に登録されると、リソースがまだ準備できていないため、着信トラフィックによってエラーが発生する可能性があります。遅延登録機能を使用すると、遅延を設定してサービス登録を延期できます。これにより、アプリケーションがサービスレジストリに登録してトラフィックを受け入れる前に、完全に初期化されることが保証されます。これにより、準備ができていないプロバイダーをコンシューマーが呼び出すときに発生する可能性のある呼び出しの失敗を防ぐことができます。

低トラフィックプリフェッチ

新しく起動したインスタンスは、多くの場合「コールド」状態にあります。この状態では、インスタンスは接続プールの遅延読み込み、キャッシュウォーミング、ホットスポットコードのジャストインタイム (JIT) コンパイルなどの操作を実行する必要があります。その結果、これらの新しいインスタンスは、しばらく実行されているインスタンスよりもはるかに少ないリクエストしか処理できません。介入しないと、新しいインスタンスがオンラインになると、システムの全体的な平均応答時間 (RT) が増加する可能性があります。深刻な場合、サービスがハングし、多くのリクエストがタイムアウトまたは失敗する原因となります。

次の図は、リソースの読み込みが必要なインスタンスについて、リソースの読み込み前と読み込み後のリクエスト呼び出し時間を比較したものです。リソースの読み込み中に多くのリクエストがインスタンスに到着すると、それらはすべてブロックされる可能性があります:

image

低トラフィックプリフェッチは、コンシューマーアプリケーション公開された直後に新しいサービスインスタンスに送信するトラフィックの量を制御します。これにより、コールド状態の Java アプリケーションの限られたリクエスト処理能力がシステム全体の RT を増加させるのを防ぎます。また、新しいインスタンスがトラフィックの急増によって圧倒されるのを防ぎます。インスタンスへのトラフィックは、事前に定義されたルールに従って時間とともに徐々に増加します。設定されたランプアップ期間が終了すると、プリフェッチプロセスが終了し、インスタンスは通常どおりトラフィックを受信します。

説明

低トラフィックプリフェッチは、オンラインのコンシューマーからのトラフィックを使用します。したがって、サービスのコンシューマーアプリケーションも MSE マイクロサービスガバナンスに接続する必要があります。この機能の原則に関する詳細については、「低トラフィックプリフェッチの原則」をご参照ください。

サービス readiness プローブ

Kubernetes は、readiness プローブメカニズムを提供します。サービスのリリース中、新しいインスタンスが readiness プローブに合格すると、古いインスタンスはオフラインになります。正確な動作は、設定されたリリースポリシーによって異なります。ただし、Kubernetes はマイクロサービスが本当に準備完了した時期を判断できません。多くの場合、ポートがリッスンを開始するとすぐにアプリケーションが準備完了したと見なします。これにより、サービスレジストリに登録される前に新しいインスタンスが準備完了とマークされる状況が発生する可能性があります。その後、Kubernetes はリリースを続行し、古いインスタンスをオフラインにします。これにより、コンシューマーの呼び出しが失敗し、service no provider/instance などのエラーが発生します。

サービス readiness プローブ機能は、エージェントを介して非侵入型の HTTP エンドポイントを提供します。このエンドポイントは、アプリケーションがサービスレジストリへの登録を完了したかどうかを確認します。アプリケーションが登録されていない場合、エンドポイントは HTTP 500 状態コードを返します。アプリケーションが登録されると、HTTP 200 状態コードを返します。このエンドポイントを使用するようにアプリケーションの readiness プローブを設定できます。これにより、Kubernetes はアプリケーションが準備完了しているかどうかを正確に判断できます。これにより、Kubernetes でのサービスリリース中にコンシューマーが常に利用可能なプロバイダーを持つことが保証され、プロバイダーが見つからないというエラーを防ぐことができます。

グレースフル起動の使用

前提条件

注意事項

  • グレースフル起動は、サービス登録と検出に Nacos などのサービスレジストリを使用するインスタンスでのみサポートされます。Kubernetes Service 検出メカニズムに依存するマイクロサービスインスタンスではサポートされていません。

  • Spring Cloud アプリケーションの場合、低トラフィックプリフェッチは、サービスレジストリとして Nacos、ZooKeeper、または Eureka を使用するアプリケーションでのみサポートされます。

  • Spring Cloud の低トラフィックプリフェッチ機能は、Spring Cloud フレームワークのデフォルトの ZoneAwareLoadBalancerRoundRobinLoadBalancer、または RandomLoadBalancer ロードバランサーに基づいています。アプリケーションのロードバランサー設定を変更すると、この機能は動作しません。

  • 低トラフィックプリフェッチは、プロバイダーとコンシューマーの両方で MSE マイクロサービスガバナンスが有効になっている場合にのみ有効になります。たとえば、ゲートウェイアプリケーションは API を直接公開することで外部トラフィックを受信します。したがって、MSE の低トラフィックプリフェッチ機能は、これらのタイプのアプリケーションには適用されません。

手順

ステップ 1: グレースフル起動を有効にする

  1. MSE コンソールにログインし、上部のナビゲーションバーでリージョンを選択します。

  2. 左側のナビゲーションウィンドウで、[マイクロサービスガバナンス] > [アプリケーションガバナンス] を選択します。表示されたページで、管理するアプリケーションのリソースカードをクリックします。

  3. アプリケーション詳細ページで、左側のナビゲーションウィンドウの [トラフィック管理] をクリックし、[グレースフル起動/シャットダウン] タブをクリックします。

  4. [設定] セクションで、[変更] をクリックします。次に、[グレースフル起動] スイッチをオンにして、[OK] をクリックします。

ステップ 2: Kubernetes サービス readiness プローブを設定する

  1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. [クラスター] ページで、ターゲットクラスターをクリックします。左側のナビゲーションウィンドウで、[ワークロード] > [ステートレス] を選択します。アプリケーションのデプロイメントを見つけ、[アクション] 列の [編集] をクリックします。[ヘルスチェック] セクションで、[Readiness プローブ] の右側にある [有効化] をクリックし、次のパラメーターを設定します。完了したら、[更新] をクリックします。

    • パス: /readiness。(アプリケーションのエージェントバージョンが 4.1.10 より前の場合は、パスを /health に設定します。エージェントバージョンを表示するには、MSE コンソールにログインし、[ガバナンスセンター] > [アプリケーションガバナンス] を選択し、ターゲットアプリケーションをクリックしてから、[ノード詳細] をクリックします。エージェントバージョンが右側に表示されます。)

    • ポート: 55199。

    • 初期遅延 (秒): この値は、アプリケーションの起動時間とグレースフル起動機能で設定された [遅延登録期間 (秒)] (デフォルト: 0 秒) の合計よりも大きく設定することをお勧めします。ただし、この推奨事項に従わなくても機能は動作します。

    2913e49926349db041e14b002921237b

    • 他のパラメーターの詳細については、「ステートレスワークロード (Deployment) の作成」をご参照ください。設定は、アプリケーションが再起動した後に有効になります。readiness プローブは、サービス登録が完了した後にのみ合格します。

重要

この操作はアプリケーションを直ちに再起動します。本番環境の場合は、スケジュールされたリリースウィンドウ中にこの操作を実行してください。

(オプション) ステップ 3: 遅延登録期間を設定する

このステップはオプションです。詳細については、「遅延登録」をご参照ください。手順は次のとおりです:

  1. 前のステップで説明したように、グレースフル起動機能を有効にし、Kubernetes サービス readiness プローブを設定します。

  2. グレースフル起動とシャットダウンの [設定] セクションで、グレースフル起動セクションの左側にある矢印をクリックしてオプションを展開します。[遅延登録期間 (秒)] を設定し、[OK] をクリックします。

説明

この設定は、アプリケーションが次回起動したときに有効になります。

(オプション) ステップ 4: 低トラフィックプリフェッチ期間を調整する

グレースフル起動を有効にすると、この機能は自動的に有効になります。デフォルトのランプアップ期間は 120 秒です。必要に応じて調整できます:

  1. 前のステップで説明したように、グレースフル起動機能を有効にし、Kubernetes サービス readiness プローブを設定します。

  2. グレースフル起動とシャットダウンの [設定] セクションで、グレースフル起動セクションの左側にある矢印をクリックしてオプションを展開します。[詳細オプション] をクリックし、[低トラフィックプリフェッチ期間 (秒)] を設定して、[OK] をクリックします。

  3. サービスの呼び出し元が MSE クラウドネイティブゲートウェイの場合、ここでのプリフェッチ設定は有効になりません。解決策は、MSE クラウドネイティブゲートウェイコンソールでサービスのプリフェッチを設定することです。これを行うには、ターゲットゲートウェイインスタンスをクリックします。左側のナビゲーションウィンドウで、[ルーティング管理] > [サービス] を選択します。サービスを見つけて、[アクション] 列の [その他] > [ポリシー設定] をクリックします。[ポリシー設定] タブの [トラフィック管理] > [負荷分散設定] セクションで、[編集] をクリックします。[プリフェッチ時間] 設定を調整します。クラウドネイティブゲートウェイのデフォルトのプリフェッチクエリ/秒 (QPS) 曲線は線形曲線であることに注意してください。これは、MSE マイクロサービスガバナンスが提供する二次曲線とは若干異なります。ただし、実際の効果は似ています。

説明
  • この設定は、アプリケーションが次回起動したときに有効になります。

  • 低トラフィックプリフェッチメソッドは、サービスコンシューマー側で機能します。起動時間に基づいて各プロバイダーインスタンスの重みを計算します。負荷分散アルゴリズムを使用して、新しく起動したアプリケーションへのトラフィックを制御し、トラフィックが通常のレベルまで徐々に増加するようにします。これにより、新しいサービスインスタンスをウォームアップできます。これには、サービスコンシューマーが MSE マイクロサービスガバナンスに接続されている必要もあります。

  • 低トラフィックプリフェッチ機能を初めて使用する場合は、デフォルトのランプアップ期間を使用することをお勧めします。プリフェッチの効果が理想的でなく、トラフィック損失が発生した場合は、このパラメーターを調整して最適化できます。

  • 完全なプリフェッチを確実にするには、「低トラフィックプリフェッチのベストプラクティス」をご参照ください。

グレースフル起動の監視

設定が完了した後、アプリケーションが再起動すると、グレースフル起動とシャットダウンのページで、アプリケーションインスタンスのオンライン時間とオフライン時間、およびその期間中の QPS 曲線を表示できます:

  1. MSE コンソールにログインし、上部のナビゲーションバーでリージョンを選択します。

  2. 左側のナビゲーションウィンドウで、[マイクロサービスガバナンス] > [アプリケーションガバナンス] を選択します。表示されたページで、管理するアプリケーションのリソースカードをクリックします。

  3. アプリケーション詳細ページで、左側のナビゲーションウィンドウの [トラフィック管理] をクリックし、[グレースフル起動/シャットダウン] タブをクリックします。

  4. [起動とシャットダウンの概要] で、左側のリストにあるインスタンスをクリックします。右側で、起動フェーズ中のインスタンスの QPS の変化と関連イベントを表示できます。

    image

概要には、サービス登録、プリフェッチ開始、プリフェッチ終了のイベントが順に発生することが示されています。Kubernetes readiness プローブ合格イベントも、サービス登録イベントの後に発生します。QPS 曲線は、急激なスパイクではなく、ランプアップ期間 (デフォルト: 120 秒) にわたって最大値まで徐々に増加することを示しています。アプリケーションの起動時にイベントシーケンスまたは QPS 曲線の形状が期待どおりでない場合は、トラブルシューティング情報について「よくある質問」をご参照ください。

説明

図の例に示されているアプリケーションでは、Kubernetes readiness プローブは 55199/readiness として設定されており、最小準備時間 (minReadySeconds) は 120 秒に設定されています。これはデフォルトのプリフェッチ期間と一致します。

関連ドキュメント

YAML を使用してグレースフルな起動とシャットダウンを設定する