一応WEBサービスを日々改修していますが、データが日々ふえ、大規模なサービスの対処法などを勉強する必要があるため、「大規模サービス技術入門」を少しずつ読んでいこうと思います。
ポイント
- データはディスク→メモリ→キャッシュメモリ→CPUというプロセスを経て、読み込まれる
- ハードディスクのIOが一番のボトルネック、メモリから比べると10万倍から100万倍の違いがある
- サーバースペックに関して各ソフトの要件に安全率(2倍ぐらい?)を書ける、簡易的な負荷試験をおこなうなど
- ロードアベレージが高い場合、CPU,IOのどちらに問題があるかを切り分ける。sarコマンドでともにみることができる。前者は%user,後者はiowaitなどが代表的な指標。
- チューニングの基本は問題の原因を知り、それを取り除くこと
- webアプリケーションの場合、アプリの冗長化はロードバランサなどの方法から比較的簡単だが、データべースの分散はデータの整合性を取る関係上、分散が難しい
CPU負荷→一般的にはデータ量は増えないものの異常に難しい計算などを何段階も行う場合、CPUに負荷がかかる(いわゆる計算系の処理)。CPUバウンドな処理ともいう。一般的にはアプリケーションサーバーがこのような傾向にある。
IO負荷→大量のデータから任意のものを探すなど、大量のデータを前提とするような処理。一般的にはデータベースサーバーがこのような状態になる - 負荷を抑えるプログラムを作るうえでのコツは下記のようなもの
1 アクセスする回数を減らす
2 データ量の増加に対して強いアルゴリズム(正比例するようなアルゴリズムをかかない)
3 データ圧縮や検索技術を使うこと