Posted at

Envoy: ホットリスタート


tldr

勉強がてらにEnvoyのドキュメントを邦訳してみました。ベースはGoogle Translateで、ところどころ不自然な箇所を直しています。

原文としたのEnvoyのドキュメントはこちらのディレクトリ以下にあります(ライセンス:Apache License 2.0, NOTICE)。

目次はこちらです。


ホットリスタート

使いやすさは、Envoyの最大の目的の1つです。堅牢な統計とローカル管理インターフェースに加えて、Envoyには「ホット」または「ライブ」再起動の機能があります。つまり、Envoyは接続を切断することなく、自分自身(コードと設定の両方)を完全にリロードできます。ホットリスタート機能の一般的なアーキテクチャは次のとおりです。


  • 統計といくつかのロックは共有メモリ領域に保存されます。これは、再起動が行われている間、ゲージは両方のプロセスで一貫していることを意味します。

  • 2つのアクティブプロセスは、基本的なRPCプロトコルを使用して、UNIXドメインソケットを介して互いに通信します。

  • 新しいプロセスは、古いプロセスから待機ソケットのコピーを要求する前に、自分自身を完全に初期化します(構成のロード、初期のサービス検出およびヘルスチェックフェーズなどを行います)。新しいプロセスはリスニングを開始し、次に古いプロセスに排出を開始するように指示します。

  • 排水段階では、古いプロセスは既存の接続を適切に閉じることを試みます。これがどのように行われるかは、構成されたフィルターによって異なります。排水時間は--drain-time-sオプションで設定可能で、時間が経過するにつれて排水がより積極的になります。

  • 排出シーケンスの後、新しいEnvoyプロセスは古いEnvoyプロセスに自分自身をシャットダウンするように指示します。この時間は--parent-shutdown-time-sオプションで設定可能です。

  • Envoyのホットリスタートサポートは、新しいEnvoyプロセスと古いEnvoyプロセスが異なるコンテナ内で実行されている場合でも正しく機能するように設計されています。プロセス間の通信は、UNIXドメインソケットを使用してのみ行われます。

  • Pythonで書かれたリスタート/親プロセスの例がソース配布に含まれています。この親プロセスは、monit / runit / etcなどの標準のプロセス制御ユーティリティで使用できます。