以下、個人的な(=職場システムで導入する価値がありそうな点の)まとめ。
sysstatの活用
– ロードアベレージが高い過負荷時、sar -r で%user,%systemと%iowaitを見て、そのマシンがCPUバウンド(%user,%systemが高い)なのかIOバウンド(%iowaitが高い)なのかを判断
– とりあえずメモリを増やせるなら増やし、データを全てキャッシュに乗せて性能を改善する
– CPUバウンドなら同じ構成のサーバを増やして負荷を下げる(Webサーバ)
– IOバウンドなら局所性を活かした分散を考える(DBサーバ)
MySQL
– 参照系はレプリケーションでスケールできるが、更新系のスケールは難しい
– データベースの大きさをメモリに収まるようにする
– テーブルを分割してテーブルの大きさを抑制(パーティショニング)
– 分割したテーブルを検索するためにクエリを工夫する必要がある
– MySQL特有のインデックスの効き方を理解する
– ひとつのクエリには1つのインデックスしか使われない
– 2つ以上の検索キーを使う場合、両方の項目を含んだ複合インデックスを作る必要がある
圧縮とアルゴリズム
– 全文検索システムの作成を例に解説
– データを圧縮して容量を稼ぐ。データ量が多いとバカにならない
システムの安定化
– ユーザー用のサーバとBOT用のサーバを分ける。BOT用サーバは少々負荷やレスポンスが高くても問題ない
– サーバの負荷を用途別にまとめて監視する
– MySQLはマルチマスタ構成にして、片方をスタンバイ状態にする→障害起きたら切り替え
– メディアファイルはMogileFSでファイルを複数サーバに分散して格納
– サーバの自動再起動(メモリリーク対策)、長時間クエリの自動除去
– サーバを仮想化し、用途別にゲストOSを分けてマシンリソースを最適化。ただしネットワーク性能が落ちるなどのデメリットもあり
– 安価なハードの有効利用。SSDとか
その他
– PCルータは1Gbpsが限界、1サブネットには500ホストが限界
– キャッシュ(Squid)の説明は参考になった
Amazon.co.jp: [Web開発者のための]大規模サービス技術入門 ―データ構造、メモリ、OS、DB、サーバ/インフラ (WEB+DB PRESS plusシリーズ): 伊藤 直也, 田中 慎司: 本 – www.amazon.co.jp