可用性

可用性を考える上で、アプリケーションエンジニアとしてもインフラを理解していないといけない気がしている。

可用性の見積

  • 同様な可用性要件からの類推
  • KKD
  • MTBFMTTRからの計算

見積に関しては複数のやり方でやってその評価を比較しておこなった方が良いやり方だろうと思う。複数のやり方とデルファイ法という手もある。

最後のやり方はあんまりやられていない気がする。
折角、情報処理技術者試験に出ていてみんな知っているのに。

統計学の世界なので計算上のことだが、論理的な見積ができるのはそれなりに価値があると思われる。

可用性の対応

  • 障害発生時の冗長構成
  • スペック不足によるシステムダウンの防止のために、無停止な拡張性

http://www.atmarkit.co.jp/flinux/rensai/cluster01/cluster01.html

アーキテクチャとインフラ

インフラを決定することで、アプリケーションの構造が変わることが当然ある。
Webアプリケーションで言えば、複数のWebサーバやASにリクエストがあるとすればセッションID、セッション情報の格納方法を確認する必要がある。

単一サーバ処理を前提としたアプリケーション構築は拡張性、可用性を失ってしまう。
このような問題についても配慮した設計は結構悩ましい。
インフラのインプットがアプリケーションアーキテクチャとしての制約となることを忘れてしまいがちだ。

アプリケーションの考慮点

id:masashi_oikawaさん経由で、JavaWorldの記事(http://www.javaworld.com/javaworld/jw-12-2005/jw-1226-jee.html)にいくつか乗っている。

  1. JVM上のキャッシュは読み取り専用せよ。
  2. HTTPセッションの分散化対応(上記に書いたこと)
  3. 外部リソースのリロード機能があるとよい。
  4. 統合的なエラー処理(エラー出力、エラーの発生、エラー画面)
  5. アプリケーションの状態監視
  6. タイムアウトを考えた外部呼出し
  7. 品質向上