学習パス 05レッスン 7 / 8

Self-healingの安全な範囲を定める

既知の復旧操作を、明示的な権限、検証、停止条件の下で自動化します。実行時の復旧と、ソフトウェアの変更を区別します。

応用12 分レビュー日

発行元 執筆方針

理解度を確認コントローラーがワーカーを二回再起動しました。キューは増え続け、データベースに接続できません。ポリシーは何をすべきですか?演習に取り組む
コントローラーがワーカーを二回再起動しました。キューは増え続け、データベースに接続できません。ポリシーは何をすべきですか?

学べること

  • Self-healingと、ソフトウェアの恒久的な修正を区別する。
  • 範囲を限定した復旧ポリシーと、独立した成功確認を定義する。
  • 自動化を停止してエスカレーションすべき状況を見分ける。

既知の状態から復旧する

Self-healingは、定義された障害を自動的に検出し、承認された復旧操作を試みます。停止したプロセスの再起動や、正常でないインスタンスの置き換えが例です。操作は、障害とサービスの状態モデルに適合する必要があります。

Kubernetesは、障害が起きたワークロードのインスタンスを置き換え、宣言された状態に実際の状態を合わせることができます。ただし、アプリケーションの誤ったロジックや、あらゆるストレージ障害を修正するわけではありません。インフラの復旧とソフトウェアの正しさには、別々の確認が必要です。Kubernetesのself-healing。

仕組みを選ぶ前に、目標を定義します。エクスポートの復旧とは、対象の処理が正しく完了することです。コンテナーの稼働は、前提条件の一つにすぎません。

三種類の変更を区別する

変更例必要な判断
実行時の復旧障害が起きたステートレスなワーカーを一つ置き換える事前承認された復旧ポリシーで許可できる
ソフトウェアの修正ワーカーを停止させるメモリリークを修正するレビュー、テスト、リリース管理、本番環境での検証が必要
ポリシーの変更許可する再起動の頻度やアクセス範囲を拡大するポリシー責任者による明示的な承認が必要

復旧後に、エージェントが修正を提案する場合があります。その提案は、新しいソフトウェア変更です。復旧コントローラーから無制限の権限を引き継いではいけません。

確認に失敗したとき、コントローラーが自分の成功基準を書き換えることも禁止します。そうしないと、サービスを改善せずに、改善したと報告できてしまいます。

有効にする前に復旧ポリシーを書く

以下のポリシーは架空のものです。数値は設計上の選択を示す例であり、推奨するデフォルト値ではありません。

ポリシーの項目架空のエクスポート用ワーカーのルール
トリガーワーカーのheartbeatが90秒間なく、キューに処理が残っている
前提条件別のワーカーが正常で、依存先の確認が通り、侵害や完全性の障害が疑われていない
許可する操作現在承認されている成果物を使って、ワーカーを一つ置き換える
状態の保護ジョブが永続ストレージと、検証済みの冪等性キーを使う
上限15分間で最大二回の置き換え。同時に置き換えるのは常に一つまで
待機期間置き換え後、次の試行まで五分間待つ
成功合成データを使うジョブが正しく完了し、対象キューの滞留が減り始める
停止とエスカレーション前提条件のいずれかを満たさない、上限に達した、または成功を検証できない

最小権限のIDを使います。ポリシーのバージョン、トリガーの証拠、操作、リソース、結果をログに記録します。コントローラーを無効にする独立した手段を用意します。エスカレーションを受ける人間の責任者を定めます。

復旧の成功だけでなく失敗経路もテストする

再試行によって、副作用を繰り返すことがあります。ワーカーがファイルを保存した後、ジョブの完了を通知する前に停止するかもしれません。再実行を許可する前に、冪等性を検証してください。Cloud nativeの障害例を参照してください。

再試行は、過負荷の依存先にさらに負荷をかけることもあります。試行回数の上限、タイムアウト、適切なバックオフを使います。すべてのインスタンスが同時に再試行することを避けます。AWSは、バックオフとjitterが、この負荷の増幅を抑える理由を説明しています。再試行のガイダンス。

架空のポリシーを、三つのケースでテストしてください。ワーカーが一つ停止した場合は、復旧する必要があります。データベースが停止した場合は、置き換えの繰り返しを防ぐ必要があります。完全性の障害が疑われる場合は、自動化を停止し、対応の判断を求める必要があります。

テレメトリの欠落も確認します。Heartbeatがない理由は、ワーカーの障害かもしれませんし、収集経路の障害かもしれません。コントローラーには、AIの説明に対する自信ではなく、その操作を正当化できる十分な証拠が必要です。

ポリシーが役立つかを測定する

検証済みの復旧、失敗した試行、エスカレーション、重複した処理、ユーザーへの影響が続いた時間を記録します。似た条件で、以前の運用方法と比較します。

根本にある不具合は、エンジニアリングの作業として残します。メモリリークのあるプロセスを繰り返し再起動すれば、直近の影響を減らせても、リーク自体は続きます。Self-improvementに進み、観測したことを恒久的な修正につなげてください。

演習に取り組む

このレッスンの架空のエクスポート用ワーカーについて、復旧ポリシーを設計してください。トリガー、除外条件、許可する操作、再試行の上限、待機期間、成功確認、エスカレーション先の責任者を指定します。データベース停止と、原因不明のデータ完全性の障害に対してテストしてください。

ワークシートをダウンロード(Markdown)
理解度を確認 ↑

学習を続ける

出典と参考資料

Taigaの関連資料

← 前のレッスン: ソフトウェアデリバリーをSOCとSIRTに結び付ける