Webアプリケーションの パフォーマンス向上のコツ 概要編
-
Upload
masahiro-nagano -
Category
Internet
-
view
19.739 -
download
0
description
Transcript of Webアプリケーションの パフォーマンス向上のコツ 概要編
Webアプリケーションのパフォーマンス向上のコツ
概要編ISUCON夏期講習
2014/8/20Masahiro Nagano
Me• 長野雅広 Masahiro Nagano
• @kazeburo
• Perl Monger
• Operations Engineer / Site Reliability
• Development support on LINE Family, livedoor
• ISUCON 2011-2012 出題。 ISUCON 2013 優勝
Webアプリケーションのパフォーマンス向上のコツ
概要編
Webアプリケーションの構成
Client ReverseProxy
AppServer
RDBMS
Cache,KVS
Webアプリケーションの構成Reverse Proxy: クライアントからの接続を受け、Applicationサーバに処理を中継する。画像,js,css などの静的コンテンツを返す役割もある
Application Server: ユーザからのリクエストを受けて適切なページを構築・レスポンスを行う
Webアプリケーションの構成
RDBMS: データを格納し、要求に応じてデータを返す。多くの場合SQLが使われるMySQL, PostgreSQL, Oracle..
KVS,Cache: 限られたデータ格納方式のみをサポートするがその分高速に動作するMemcached, Redis
Webアプリケーションのパフォーマンスが悪い時、どこかにボトルネックが
存在する
ボトルネックはひとつではない
Webアプリケーションのボトルネック
Client ReverseProxy
AppServer
DB
Cache
クライアントのパフォーマンス 通信経路 接続数
CPU使用率
データ量DiskIO
移動するボトルネック
ボトルネックの移動
Client ReverseProxy
AppServer
DB
Cache
通信経路
♫~
ボトルネックの移動
Client ReverseProxy
AppServer
DB
Cache
CPU使用率
どこから手を付ければ良いのか...
『推測するな計測せよ』
計測する
“top” コマンド“c” を押すと実行中プロセスのコマンドライン引数も表示される
上位のプロセスほどCPU使用率が高い
MySQLとRubyが重そう..
それぞれのプロセスで何が動いているか調べ、ボトルネックを
より詳しく特定する
調査対象• アクセスログ・クエリログ• Reverse Proxy (Webサーバ)の設定
• ミドルウェアの設定• ソースコード• 分かる人に聞く
どうボトルネックを解消していくか
パフォーマンス向上のコツ
(概要編)
(1) 通信しない
(2) 計算しない
* 減らすという意味
“Hello World”が最速のWeb Application
何もしないWebアプリケーションに如何にして近づけるか
(1) 通信しない• TCPは高信頼のプロトコル。速度は比較的遅い
• データ転送の順序保証・輻輳制御・フロー制御
• 中でもTCPの接続(three-way
handshaking)はコストが高い
TCP 接続/切断
http://ja.wikipedia.org/wiki/Transmission_Control_Protocol
connect disconnectclientserver clientserver
(1) 通信をしない1. 1回のやりとりでより多くのデータを取得し、通信回数を減らす
2. 処理を行う場所を変更し、通信自体を不要にする
3. 通信結果を cache し、再利用する
(1) 通信をしない
Client ReverseProxy
AppServer
DB
Cache
2. 処理移動
1. 回数削減
(2) 計算しない
• HTMLのレンダリング
• テキストや画像変換処理• 大量のデータの読み取り・集計・ソート• コンテキストスイッチ・プロセス生成
HTMLレンダリング• テンプレートエンジンの設定
• テンプレートから中間コードを作り、cache することで高速化
• ほとんどHTMLの内容が変わらない場合のテンプレートエンジンのコスト
テキスト・画像変換処理
• 多くのWebアプリケーションはコンテンツの更新より、表示回数の方が多い
• 表示の度にコンテンツの変換を行っていると、ボトルネックとなりやすい
RDBMS最適化
• SQLチューニング
• インデックスの追加• データ構造を変える• KVSの利用
コンテキストスイッチ
CPU CPU CPU CPU
process process process process process process process
process process process process process process process
process process process process process process process
OSによりスケジュール実行
コンテキストスイッチ
CPU CPU CPU CPU
process process
process
process process process process
process process process process process process process
process process process process process process process
OSによりスケジュール実行
コンテキストスイッチ
CPU CPU CPU CPU
process process process process process process process
process process process process process
process
process
process process process process process process process
OSによりスケジュール実行
コンテキストスイッチ
CPU CPU CPU CPU
process process process process process process process
process process process process process
process
process
process process process process process process process
OSによりスケジュール実行
process/taskの切り替え時にCPUの状態を保存・復元
コンテキストスイッチ
• プロセス数が増え、コンテクストスイッチの回数が増えると負荷が高まる
• プロセスを新たに生成するのも重い処理となる
Enjoy ISUCON