日々精進

新しく学んだことを書き留めていきます

スケーラブルウェブサイト

スケーラブルWebサイト

スケーラブルWebサイト

オススメ度★★★★☆
スケーラブルと冠しているのでパフォーマンスの話題ばかりかと思いきや、Webアプリの開発環境、文字コード、セキュリティ、APIの提供などについても書かれている。この辺ってスケーラビリティとあまり関係ないよね・・・?
そのせいか少々散漫な感じではあるが、パフォーマンスの改善方法を期待して購入しても損はしないと思う。
スケーラビリティをどうやって確保するかについてもちゃんと書かれてある。これを読むとスケーラビリティを確保するのに一番問題になるのがDBだということがよくわかる。
一番問題になりやすいDBのディスクIOのボトルネックをどうやって解決するかについても書かれているのである程度の規模のWebアプリなら参考になるのではないかと。
自分の場合はレンタルサーバで運営してる小さなアプリなのであまり参考にならなかったけど。。ボトルネックの調査方法は参考になった。


以下まとめ。


ボトルネック
cpuがボトルネックになることはまれ
iowait -cや-dxでcpuがioを待っている時間がわかる。bonnie、iozoneも使える
ディスクはプラッタ上の場所によって転送速度が異なることを意識する(容量に余裕を持って使うと転送速度が高くなる。理由はプラッタの内周付近が使われないため)
書き込みキャッシュは有効だが、電源バックアップなしで使うのは危険。必ず電源管理すること
ネットワークioはslurmで可視化


・非正規化
データを冗長化することで処理速度をあげられる(外部キーを使ってテーブルを結合していたのをテーブル結合しないでデータを取得できるようにしたりとか)。
ただし、データの同期を取る、整合性をチェックする、同期処理をどこでやるか(ビジネスロジック、トリガー、ストアドなど)など色々面倒なことが起きる


・キャッシング
デメリットは
書き込みのパフォーマンスが落ちる
ロジックが複雑になる。キャッシュはトランザクションなどの機能をサポートしなければならないがこれは非常に複雑な機能。
キャッシュのロジックはDBへのインターフェース内にカプセル化すべき