health checkエンドポイントとは何か? サービスの準備完了を証明する
health checkエンドポイントとは、サービスがしばしば/healthで公開するURLで、そのサービスが生きていてトラフィックを受け入れる準備ができているかの素早いシグナルを返します。
インフラは、サービスに "大丈夫ですか?" と尋ねる単純な手段を必要とします。health checkエンドポイントは、load balancerやorchestratorがポーリングする素早い応答でそれに答えます。デプロイはcutoverをこれらのチェックでゲートします。トラフィックは、そのhealthエンドポイントが準備完了を報告して初めて新しいバージョンへ移ります。
単純な準備完了シグナル
エンドポイントは、健全なときは200を、そうでなければエラーステータスを返します。それは軽量で高速であるべきで、サービスがリクエストを処理できることを確認するのに十分なだけをチェックします。
liveness対readiness
- liveness: プロセスは生きているか、それとも再起動すべきか?
- readiness: 今トラフィックを処理できるか?
- startup: 初期化はもう完了したか?
誰がポーリングするか
load balancerはルーティングを決めるためにポーリングし、Kubernetesのようなorchestratorは再起動とトラフィックを決めるためにポーリングします。チェックに失敗したbackendは、自動的にローテーションから外されます。
デプロイにおけるhealth check
安全なデプロイは、トラフィックを移して古いものをドレインする前に、新しいインスタンスがhealth checkに通るのを待ちます。これがrollingやblue-greenのデプロイをゼロダウンタイムにするものです。
CIのsmoke check
デプロイ後、pipelineはしばしばhealthエンドポイントに当たって、デプロイを成功とマークする前にreleaseが稼働していることを確認します。そこでの非200は、デプロイのステップを早期に失敗させます。
ウォームアップ中は一時的
デプロイ直後、healthエンドポイントはサービスがウォームアップする間、短く非200を返すことがあります。Latchkeyのrunnerは検証中に一時的なhealth checkの失敗をretryするため、遅いウォームアップがデプロイを誤って失敗させることはありません。
重要なポイント
- health checkエンドポイントは、サービスが生きていて処理できる状態かを報告します。
- load balancerとorchestratorはそれをポーリングして、トラフィックと再起動をゲートします。
- ウォームアップ中の短い非200は、持続的な失敗と違い一時的です。