システムの障害対応
ツイッターばっかに書き込んでいるので、こっちはすっかりお留守ですが。
この前、とあるシステムの障害対応がありましたので、
その際に気づいたことでも書きたいと思います。
障害が起こった時は、以下の4つを上から順に対応をしていかなければならないと思いました。
- どういう現象が起こっているかを収集する
- どこの箇所が原因となっているかを特定する
- 原因となっている箇所を直す
- この障害によって後始末をする
まず、1. は 2. の手がかりとなります。
1. が不十分だと、2. の原因の箇所が見つからなかったり、間違ったりするので、
ログや DB のレコードなど、とにかく情報を収集します。
例えば、以下のようになります。
- ログに ERROR が多くある
- 想定しないレコードが DB に入っている
- ユーザからの問い合わせが多く来る
お医者さんに例えるならば、患者の症状を聞く、といった感じでしょうか。
次に、1. を元に 2. を行います。
明らかにコード上に不具合の部分を発見した場合などは必要ないですが、
そうでない場合は開発環境などで障害を再現さしてみて、
原因となっている箇所が間違いないことを確認します。
お医者さんに例えるならば、病名を言いわたす、といった感じでしょうか。
3. では、不具合の箇所を直します。
ユニットテスト、周りからのレビューするのも忘れずに。
お医者さんに例えるならば、傷をふさぐ、手術をする、といった感じでしょうか。
最後に、4. では、障害によって引き起こされた後始末を行います。
システム側では、例えば、DB内の予期せずに NULL が含まれるレコードを削除する、
のようにデータの不整合を直します。
ユーザ側では、ユーザにお詫びの掲示を行う、
のように障害情報を公開します。
場合によっては不具合の起こったユーザに特別な処理を行ってもらう、
ということもあるかもしれません。
お医者さんに例えるならば、傷から血が出すぎたので輸血をする、といった感じでしょうか。
以上、まとめてみました。
ほんと、障害がないに越したことはないのですが。