Webアプリケーションの パフォーマンス向上のコツ 概要編

40
Webアプリケーションの パフォーマンス向上のコツ 概要編 ISUCON夏期講習 2014/8/20 Masahiro Nagano

description

 

Transcript of Webアプリケーションの パフォーマンス向上のコツ 概要編

Page 1: Webアプリケーションの パフォーマンス向上のコツ 概要編

Webアプリケーションのパフォーマンス向上のコツ

概要編ISUCON夏期講習

2014/8/20Masahiro Nagano

Page 2: Webアプリケーションの パフォーマンス向上のコツ 概要編

Me• 長野雅広 Masahiro Nagano

• @kazeburo

• Perl Monger

• Operations Engineer / Site Reliability

• Development support on LINE Family, livedoor

• ISUCON 2011-2012 出題。 ISUCON 2013 優勝

Page 3: Webアプリケーションの パフォーマンス向上のコツ 概要編

Webアプリケーションのパフォーマンス向上のコツ

概要編

Page 4: Webアプリケーションの パフォーマンス向上のコツ 概要編

Webアプリケーションの構成

Client ReverseProxy

AppServer

RDBMS

Cache,KVS

Page 5: Webアプリケーションの パフォーマンス向上のコツ 概要編

Webアプリケーションの構成Reverse Proxy: クライアントからの接続を受け、Applicationサーバに処理を中継する。画像,js,css などの静的コンテンツを返す役割もある

Application Server: ユーザからのリクエストを受けて適切なページを構築・レスポンスを行う

Page 6: Webアプリケーションの パフォーマンス向上のコツ 概要編

Webアプリケーションの構成

RDBMS: データを格納し、要求に応じてデータを返す。多くの場合SQLが使われるMySQL, PostgreSQL, Oracle..

KVS,Cache: 限られたデータ格納方式のみをサポートするがその分高速に動作するMemcached, Redis

Page 7: Webアプリケーションの パフォーマンス向上のコツ 概要編

Webアプリケーションのパフォーマンスが悪い時、どこかにボトルネックが

存在する

Page 8: Webアプリケーションの パフォーマンス向上のコツ 概要編

ボトルネックはひとつではない

Page 9: Webアプリケーションの パフォーマンス向上のコツ 概要編

Webアプリケーションのボトルネック

Client ReverseProxy

AppServer

DB

Cache

クライアントのパフォーマンス 通信経路 接続数

CPU使用率

データ量DiskIO

Page 10: Webアプリケーションの パフォーマンス向上のコツ 概要編

移動するボトルネック

Page 11: Webアプリケーションの パフォーマンス向上のコツ 概要編

ボトルネックの移動

Client ReverseProxy

AppServer

DB

Cache

通信経路

♫~

Page 12: Webアプリケーションの パフォーマンス向上のコツ 概要編

ボトルネックの移動

Client ReverseProxy

AppServer

DB

Cache

CPU使用率

Page 13: Webアプリケーションの パフォーマンス向上のコツ 概要編

どこから手を付ければ良いのか...

Page 14: Webアプリケーションの パフォーマンス向上のコツ 概要編

『推測するな計測せよ』

Page 15: Webアプリケーションの パフォーマンス向上のコツ 概要編

計測する

Page 16: Webアプリケーションの パフォーマンス向上のコツ 概要編
Page 17: Webアプリケーションの パフォーマンス向上のコツ 概要編

“top” コマンド“c” を押すと実行中プロセスのコマンドライン引数も表示される

上位のプロセスほどCPU使用率が高い

Page 18: Webアプリケーションの パフォーマンス向上のコツ 概要編

MySQLとRubyが重そう..

Page 19: Webアプリケーションの パフォーマンス向上のコツ 概要編

それぞれのプロセスで何が動いているか調べ、ボトルネックを

より詳しく特定する

Page 20: Webアプリケーションの パフォーマンス向上のコツ 概要編

調査対象• アクセスログ・クエリログ• Reverse Proxy (Webサーバ)の設定

• ミドルウェアの設定• ソースコード• 分かる人に聞く

Page 21: Webアプリケーションの パフォーマンス向上のコツ 概要編

どうボトルネックを解消していくか

Page 22: Webアプリケーションの パフォーマンス向上のコツ 概要編

パフォーマンス向上のコツ

(概要編)

Page 23: Webアプリケーションの パフォーマンス向上のコツ 概要編

(1) 通信しない

Page 24: Webアプリケーションの パフォーマンス向上のコツ 概要編

(2) 計算しない

Page 25: Webアプリケーションの パフォーマンス向上のコツ 概要編

* 減らすという意味

Page 26: Webアプリケーションの パフォーマンス向上のコツ 概要編

“Hello World”が最速のWeb Application

何もしないWebアプリケーションに如何にして近づけるか

Page 27: Webアプリケーションの パフォーマンス向上のコツ 概要編

(1) 通信しない• TCPは高信頼のプロトコル。速度は比較的遅い

• データ転送の順序保証・輻輳制御・フロー制御

• 中でもTCPの接続(three-way

handshaking)はコストが高い

Page 28: Webアプリケーションの パフォーマンス向上のコツ 概要編

TCP 接続/切断

http://ja.wikipedia.org/wiki/Transmission_Control_Protocol

connect disconnectclientserver clientserver

Page 29: Webアプリケーションの パフォーマンス向上のコツ 概要編

(1) 通信をしない1. 1回のやりとりでより多くのデータを取得し、通信回数を減らす

2. 処理を行う場所を変更し、通信自体を不要にする

3. 通信結果を cache し、再利用する

Page 30: Webアプリケーションの パフォーマンス向上のコツ 概要編

(1) 通信をしない

Client ReverseProxy

AppServer

DB

Cache

2. 処理移動

1. 回数削減

Page 31: Webアプリケーションの パフォーマンス向上のコツ 概要編

(2) 計算しない

• HTMLのレンダリング

• テキストや画像変換処理• 大量のデータの読み取り・集計・ソート• コンテキストスイッチ・プロセス生成

Page 32: Webアプリケーションの パフォーマンス向上のコツ 概要編

HTMLレンダリング• テンプレートエンジンの設定

• テンプレートから中間コードを作り、cache することで高速化

• ほとんどHTMLの内容が変わらない場合のテンプレートエンジンのコスト

Page 33: Webアプリケーションの パフォーマンス向上のコツ 概要編

テキスト・画像変換処理

• 多くのWebアプリケーションはコンテンツの更新より、表示回数の方が多い

• 表示の度にコンテンツの変換を行っていると、ボトルネックとなりやすい

Page 34: Webアプリケーションの パフォーマンス向上のコツ 概要編

RDBMS最適化

• SQLチューニング

• インデックスの追加• データ構造を変える• KVSの利用

Page 35: Webアプリケーションの パフォーマンス向上のコツ 概要編

コンテキストスイッチ

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によりスケジュール実行

Page 36: Webアプリケーションの パフォーマンス向上のコツ 概要編

コンテキストスイッチ

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によりスケジュール実行

Page 37: Webアプリケーションの パフォーマンス向上のコツ 概要編

コンテキストスイッチ

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によりスケジュール実行

Page 38: Webアプリケーションの パフォーマンス向上のコツ 概要編

コンテキストスイッチ

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の状態を保存・復元

Page 39: Webアプリケーションの パフォーマンス向上のコツ 概要編

コンテキストスイッチ

• プロセス数が増え、コンテクストスイッチの回数が増えると負荷が高まる

• プロセスを新たに生成するのも重い処理となる

Page 40: Webアプリケーションの パフォーマンス向上のコツ 概要編

Enjoy ISUCON