Webアーキテクチャ設計の基本を学ぼう3(パフォーマンス編)

コンセプト

パフォーマンスの問題は可用性の問題と混同しがちだが,技術的にはまったく別の問題であることに注意(要件を聞き取るときには,両者を混同しないように整理する)

パフォーマンスの指標として
 「レスポンス時間」
 「スループット
 「同時リクエスト数の上限」
これらには相関関係がある。例えば,スループットの低いシステムは,同時リクエスト数が増えると,レスポンス時間が急激に低下する。この待ち時間は,「待ち行列」と呼ばれる理論で説明できる。


上流から下流まで改善続ける

 聞き取ったパフォーマンスの指標は,開発段階で設計や実装に反映させるだけでなく,運用段階でも維持すべき。そのために開発から運用に至るライフサイクル全体で,設計→実装→検証→対処というサイクルを回すこと。



■パフォーマンスの設計
 

    設計段階で考慮すべき重要なポイント  
  1. ミドルウエアの設定やアプリケーションの構造などを要件に適合させること。サーバー機のリソース(CPUやメモリー,ディスクなど)をどう配分するか
    ex)アプリケーションからデータにアクセスする速度は,データがメモリーにあれば高速だが,ディスクにあると低速となる。基本的にはメモリー・アクセスを中心に設計し,やむを得ない部分だけはディスク・アクセスになるように構成。メモリーという有限のリソースをうまく使うことが,技術者の腕の見せ所となる。

  2. 必要十分なキャパシティのサーバー機やネットワーク回線を用意=「キャパシティ・プラニング」
    どれくらいのキャパシティのサーバー機を何台用意するか,各サーバー機にリクエスト(=負荷)を分散する方法を検討

  3. 設計段階で拡張計画を立案し,パフォーマンスの計測法や,キャパシティの増強条件・方法などを明確にしておく


■設計に基づき実装
拡張方式の基本的な考え方には,サーバー機の単体処理性能を上げる「スケールアップ」と,台数を増やす「スケールアウト」の2種類がある

「スケールアップ」
・ソフトウェア構成に影響がない
・リソースアップの限界がある(上位サーバ機に置き換えるとなると割高)

「スケールアウト」
・負荷分散が必要(+ソフトウェア設計)
・運用管理コストが増加

仮想化によって、物理マシンのスケーリングよりも柔軟性が高められるようになった。


負荷テストは,システムがほぼ組み上がった総合テストの段階で実施する。一般的には負荷テスト・ツールを使い複数のリクエストを同時に送信し,要件を満たしているかどうかを調べる。



ボトルネックの推定
Webシステムの場合は,大まかにいえば,物理的にはネットワーク(LAN/WAN/インターネットなど)か,サーバー(Web/AP/DBサーバーなど)のどちらかが原因

OSやミドルウエア(HTTPD/APコンテナ/DBMS),アプリケーションのログなどから,ボトルネックを絞り込み、特定できたら,パラメータをチューニングする。ハードウエアの構成を変更したり,アプリケーションのロジック(アルゴリズムSQL文など)を見直したりもする。


あるボトルネックを解消したら,別の個所が新たなボトルネックになることもある

メモリ上にキャッシュするデータ量を増やせば,そのデータに対する検索などのパフォーマンスは向上するが,メモリーの空き容量が減る分だけ,ほかのアプリケーションの動作に影響が出たり,同時リクエスト数の上限が減ったりする


待ち行列理論」

待ち行列理論=「不特定多数の人や物が限られた資源を利用する場合の混雑現象などを数学的に解析したもの」
サーバーでは多重処理されるので,単純な待ち行列理論に基づいて考えることはできないが,処理に要する時間などを概算する上で参考にはなる。

Webサーバーの利用率(ρ)=平均処理時間Ts/平均到着間隔Ta
平均待ち時間(Wq)=ρ×Ts/(1-ρ)

つまり,Webサーバーに負荷がかかると,レスポンス時間は極端に長くなる。

実践編

「設計」と「検証」の実践法
⇒「キャパシティ・プランニング」と「負荷テスト」

キャパシティ・プランニングの実践
 「1秒当たり100件のリクエストを処理する」というスループット要件に対して、ネットワーク構成やサーバー構成をどう決めるか
 ・アプリケーションの特性を見極めて,「Web層」「AP層」「DB層」のどこでリクエストが完了するかの割合(静的なHTMLページを返すだけならWeb層でリクエストが完了)を算出
 この割合が分かれば,各層がリクエストに関与する割合は単純計算で導き出せる

 ・リクエストに関与する割合から,各層でのスループットの目標値を計算する。Webシステムのスループット要件は「1秒当たり100件」なので,Web層はその100%分で100件/秒,AP層は15%分で15件/秒,DB層は5%分で5件/秒のスループットを満たす必要がある。このように考え,各層のスループットの目標値を決める。

                                                  • 続く