Webシステムのリリース作業とフォールトトレランス
「Release It! 本番用ソフトウェア製品の設計とデプロイのために」を読んで、Webシステムのリリース作業の大変さ、非機能要件における性能・稼働率についてあれこれ考えた。
フォールトトレランスとリリース作業に関するメモ書き。
【元ネタ】
フォールトトレランス
フォールトトレランスの定義と具体例が理解しやすい。
フォールトトレランス(耐障害性)とは、「失敗や障害が起きることを見越して、どんな事態に陥っても全体としての機能を失わないようにすること」です。
フォールトトレランスを実現する方法は下記の通り。
フェールソフト(周辺故障)とは、「システムが誤動作をしたり部品が故障したりしても、機能を完全に停止するのではなく、可能な範囲で稼動させること」
フェールソフトは継続性を重視しており、フェールオーバーを含むこともあります。
フェールセーフ(安全側故障)とは、「システムが誤動作をしたり部品が故障したりしても、安全側に制御すること」です。
フェールセーフは安全性を重視しています。
フェールオーバー(冗長性故障)とは、「設備を必要最小限よりも多く用意して、システムを冗長(リダンダント)化させて障害に備えることにより、フェールソフトを実現すること」。
フェールオーバーは継続性を重視しています。
フールプルーフ(誤操作対応)とは、「利用者が操作や手順を間違えても、危険を招かないように設計すること」です。
フールプルーフは安全性を重視しています。
フォールトアボイダンスとは、「失敗や障害の要素を完璧な精度にしたり十分に訓練したりして、失敗や障害を発生させないようにすること」です。
フォールトアボイダンスは古典的な手法ですが、「人間は間違いを犯す」という思想が広がり、フォールトアボイダンスだけでは不充分なため、現在はフォールトトレランスに重点を置くことが主流になっています。
リリース作業中、あるいは運用中でもシステムが障害を起こしてしまう時はある。
フォールトトレランス(耐障害性)を実現する4種類の方法は、障害が起きてもそのダメージを少なくする為のノウハウだ。
そして、特に組込み機器ではそれらの機能も実装する必要があるため、余分な開発工数をあらかじめ考えておく必要がある。
昨今のWebシステムでも、そのリリース作業は、10年前よりもはるかに高度になっている。
リリース中もシステムをダウンさせない手法が一般的になっている。
昨今の普通のWebシステムは、WebサーバーもDBサーバーも複数のサーバーへ物理的にも論理的にも冗長化されている。
その場合、ロードバランサによって、負荷に応じて各サーバーへ振り返られている。
昔のWebシステムのリリース作業は、手間が多かった。
まず、システムを停止し、アプリケーションを1個ずつデプロイし、Webサーバーを再起動する。
Javaならば、warやjarではなく、classファイルを1個ずつFTPでアップしていた。
更に、JSPは初回表示が遅いので、Webサーバー起動後、各画面を表示してJSPをリコンパイルさせていた。
だから、そのリリース作業中の数時間はWebサイトが使えません、とあらかじめユーザへ連絡する必要があった。
ユーザ企業としては、システムのダウン中はシステムから売上が出ないから、リリース作業と言えどもダウン時間が長いほどダメージは大きい。
それに対し、最近のWebシステムのリリース作業は下記が普通だ。
リリースする順番ごとに各サーバーをWebから切り離し、バックグラウンドでアプリケーションをデプロイして再起動していく。
リリースできたら、ネットワークにつなげて、次のサーバーへリリースしていく。
この手法ならば、ユーザ側からは、システムがずっと稼働中でダウンしているようには見えない。
情報処理試験にある信頼性の問題(午後1・問4)にもあるように、Webシステムの障害を検知する仕組みも以前に比べると洗練かつ複雑になっている。
Webサーバーの障害を検出する機能として、ヘルスチェックがある。
ヘルスチェック機能は、ping監視という最も基本的な方法から、ポート監視、プログラムやシェルによるアプリケーション監視がある。
例えば、ping監視やポート監視はWebアプリとは異なる外部サービスで行ったり、アプリケーション監視はログ出力やヘルスチェック用のJSPで実装したりする。
また、情報処理試験の問題にあるサーバー構成図のように、負荷分散と冗長化を兼ねたデュプレックスシステムのアーキテクチャで、WebサーバーとDBサーバーを冗長構成するのが普通になっている。
このやり方ならば、稼働率も安定する。
ネットの情報によれば、Googleは「サーバーやHDDは定期的に壊れる前提でサーバーを構成している」らしいから、おそらく冗長化の技術が普通のSIよりも優れているだろうと推測される。
システムはプログラミングだけでなく、稼働率の高いサーバーの構築というタフな作業もあるのだ。
| 固定リンク
「ソフトウェア」カテゴリの記事
- Javaのモジュールシステムの考え方をまとめてみた(2022.10.21)
- Javaのenum型はシングルトンクラスみたいだ(2022.06.20)
- テスラが従来の自動車メーカーと異なるところは工場までソフトウェア化すること(2022.02.09)
- 「RubyやRailsは終わった」という記事のリンク(2022.01.09)
- 実践した後に勉強するのがエンジニアの本来の道(2022.01.09)
「ソフトウェア工学」カテゴリの記事
- 「システムアーキテクチャ構築の原理」の感想part2~非機能要件がシステムのアーキテクチャに影響を与える観点をプロセス化する(2024.05.06)
- 「システムアーキテクチャ構築の原理」の感想(2024.05.06)
- ソフトウェア工学の根本問題から最近のソフトウェア設計を考えてみる(2024.03.03)
- マイクロサービス設計は従来のアーキテクチャ設計と何が違うのか(2024.01.02)
- 「ソフトウェアアーキテクチャ・ハードパーツ」の情報リンク~マイクロサービスの設計技法の課題は何なのか(2023.11.12)
コメント
非公開で結構です。
タイトルが フォール と トレランス になっています。
投稿: nyankosoba | 2009/11/07 19:42
nyankosobaさん、ご指摘ありがとうございました。
直しました(^-^;
投稿: あきぴー | 2009/11/08 18:03