グレースフルシャットダウン
グレースフルシャットダウンとは、サーバーを停止する際に即座にすべての接続を切断するのではなく、まず新規リクエストの受付を停止し、既に受け付けたリクエストが十分な時間をかけて処理を完了できるようにしてからサービスを終了する方式です。この方法によりリクエストが突然中断されることを防ぎ、ユーザーエクスペリエンスとシステムの信頼性を向上させることができます。
Salvoはグレースフルシャットダウンをサポートしており、Serverのhandleメソッドでサーバーハンドルを取得し、stop_gracefulメソッドを呼び出すことで実現できます。このメソッドを呼び出すと、サーバーは以下の動作を行います:
- 新規接続リクエストの受付を停止
- 既存のリクエスト処理が完了するまで待機
- 指定されたタイムアウト時間後(指定されている場合)、残りの接続を強制終了
以下は簡単な例です:
上記の例では:
server.handle()でサーバーのハンドルを取得し、サーバーのライフサイクル制御に使用可能handle.stop_graceful(None)でグレースフルシャットダウン処理を開始。Noneはタイムアウト時間を設定せず、すべてのリクエスト処理が完了するまで待機することを意味します- タイムアウト時間を設定する場合は
Some(Duration)を渡すことができ、タイムアウト後は残りの接続を強制終了します
この方式は特に、コンテナ環境やクラウドプラットフォームにデプロイするアプリケーションや、ホットアップデート時にリクエストが予期せず中断されないようにする必要がある場合に適しています。