開発者は、クライアントに影響を与えずにオンラインアプリケーションを更新する必要があります。そのためには、アプリケーションの停止時にアプリケーションのサービスリクエストが想定どおりに処理される必要があります。この目標を達成するには、アプリケーションのデプロイ、停止、ロールバック、スケールイン、リセット時にグレースフルシャットダウンを設定する必要があります。
背景情報
グレースフルシャットダウンにより、アプリケーションの停止時にコンシューマーのサービスリクエストが想定どおりに処理されます。理想的には、サービスリクエストが存在しない場合に、アプリケーションを安全かつ確実に更新できます。ただし、これは実際の運用では非常にまれです。
従来のソリューションでは、トラフィックの削除、アプリケーションの停止、アプリケーションの更新、アプリケーションの再起動を手動で実行します。このソリューションを使用してアプリケーションを更新する場合、クライアントのビジネス継続性は影響を受けません。
革新的なソリューションは、コンテナまたはフレームワークレベルで自動化されたメカニズムを使用することです。このソリューションを使用すると、トラフィックを自動的に削除し、受信したすべてのリクエストを処理して、ビジネスへの影響をなくし、更新中の O&M 作業を効率化できます。グレースフルシャットダウンは、このような革新的なソリューションです。
EDAS のグレースフルシャットダウンのメリット
オープンソースの Dubbo が提供するグレースフルシャットダウンソリューションを使用してアプリケーションをシャットダウンする場合、シャットダウンフックと QoS(Quality of Service)を使用する必要があります。このソリューションでは、追加の開発作業が必要であり、Dubbo のバージョンに厳しい要件が設定されます。その結果、潜在的なリスクが発生し、アプリケーションが想定どおりに動作しない可能性があります。
EDAS は、Elastic Compute Service(ECS)または Kubernetes クラスターでアプリケーションを停止、デプロイ、ロールバック、スケールイン、リセットする際に、グレースフルシャットダウンをリリースプロセスに統合して自動的に実装します。 EDAS コンソールでアプリケーションのグレースフルシャットダウンを設定する必要はありません。 EDAS が提供するグレースフルシャットダウンソリューションでは、トラフィック損失は発生しません。
グレースフルシャットダウンが有効かどうかを確認する
ビジネス要件に基づいて、アプリケーションでグレースフルシャットダウンが有効かどうかを確認できます。 EDAS は、プロバイダーとコンシューマーというアプリケーションデモを提供しています。 Container Service for Kubernetes(ACK)クラスターでアプリケーションデモを使用して、グレースフルシャットダウンが有効かどうかを確認できます。
手順
ACK クラスターにプロバイダーとコンシューマーをデプロイします。
プロバイダーには 2 つのインスタンスがデプロイされ、コンシューマーには 1 つのインスタンスがデプロイされます。 アプリケーションデモのデプロイ方法の詳細については、概要をご参照ください。
コンシューマーからプロバイダーへの呼び出しの状態を表示します。
コンシューマーがデプロイされている Pod にログインし、次のコマンドを実行してプロバイダーのサービスに継続的にアクセスします。
#!/usr/bin/env bash while true do echo `curl -s -XGET http://localhost:18091/user/rest` // プロバイダーのサービスにアクセスするコマンド done呼び出しのレスポンスを表示します。

上記のレスポンスは、コンシューマーがプロバイダーの 2 つのインスタンスにランダムにアクセスしていることを示しています。インスタンスの IP アドレスは 172.20.0.221 と 172.20.0.223 です。
重要レスポンスウィンドウを閉じないでください。
プロバイダーから 1 つのインスタンスをスケールインし、インスタンスを再起動します。 詳細については、Kubernetes クラスターのアプリケーションライフサイクル管理をご参照ください。
呼び出しのレスポンスを再度表示して、グレースフルシャットダウンが有効かどうかを確認します。

コンシューマーの呼び出し状態を表示して、グレースフルシャットダウンが有効かどうかを確認します。コンシューマーのログを表示します。ログに例外が発生していないことが示されている場合、インスタンスの可用性がないことはコンシューマーには認識されません。
上記のレスポンスは、コンシューマーがプロバイダーの残りのインスタンスのみにアクセスしていることを示しています。インスタンスの IP アドレスは 172.20.0.221 です。アクセスプロセスでは、呼び出しの例外は発生せず、コンシューマーは影響を受けません。