Copyright (C) 2011 Prime Strategy co.,ltd.
Prime Strategy
4
WordPressインテグレーション
サービスを提供するプライム・ス
トラテジー株式会社代表取締役。
マイコンBASICマガジン時代か
らプログラミング暦約30年です。
@kengyu_n
kengyu.nakamura
www.prime-strategy.co.jp
Copyright (C) 2011 Prime Strategy co.,ltd.
Prime Strategy
6
Copyright (C) 2011 Prime Strategy co.,ltd.
Prime Strategy
8
Copyright (C) 2011 Prime Strategy co.,ltd.
Prime Strategy
10
Copyright (C) 2011 Prime Strategy co.,ltd.
Prime Strategy
12
わかりました。あの手この
手でやってみましょう。
Copyright (C) 2011 Prime Strategy co.,ltd.
Prime Strategy
14
測定する対象
一、HTMLページのロード時間
二、1秒あたりのリクエスト数
一、HTMLページのロード時間=①+②+③を短縮する
ブラウザ
サーバ(WordPress)
①リクエスト送信
②実行
Copyright (C) 2011 Prime Strategy co.,ltd.
Prime Strategy
16
ロード時間を分解する
ブラウザ
サーバ(WordPress)
①リクエスト送信
ブラウザ
②実行
③レスポンス受信
伝送時間
伝送時間
PHPの実行
MySQLの実行
翻訳処理
今回テストするサーバ環境など
サーバの場所
Amazon東京DC
サーバ(VPS)
Amazon EC2 スモール インスタンス
WordPress
3.2.1日本語版
アクセス元
東京某所
東京某所
東京のAmazon EC2
東京某所
Copyright (C) 2011 Prime Strategy co.,ltd.
Prime Strategy
18
HTMLページのロード時間をFirefoxのFirebugで測定する
Firebugのネットタブ
ロード時間は682ミリ秒
1,000ミリ秒=1秒。
二、1秒間に処理できるリクエスト数を増やす
abというlinuxのコマンドライン
ツールでAmazonに設置した
WordPressに負荷をかけて測
定します。
=> 1.50リクエスト/秒
Copyright (C) 2011 Prime Strategy co.,ltd.
Prime Strategy
20
何もしない状態での測定結果
1.ロード時間
682ms
2.リクエスト数
1.5リクエスト/秒
何もしない状態での測定結果
1.ロード時間
682ms
2.リクエスト数
1.5リクエスト/秒
Copyright (C) 2011 Prime Strategy co.,ltd.
Prime Strategy
22
そこでサーバ(VPS)を変更します(スケールアップ)。
サーバ(VPS)
Amazon EC2 スモール インスタンス
(CPU 約900MHz 1コア,メモリ 1.7G)
サーバ(VPS)
Amazon EC2
ミディアム
インスタンス
(CPU
約2.17GHz 2コア
,メモリ 1.7G)
スケールアップの効果
1.ロード時間
682ms→
291ms
(2.3倍)
2.リクエスト数 1.5リクエスト/秒→
7.0リクエスト/秒
(4.6倍)
ロード時間はCPUの周波数に、リクエスト
数は周波数にコア数を乗じたものに比例
するのがわかります。
サーバの設置場所の違いによるロード時間の差
サーバの場所
Amazon世界各地のデータセンター
で比較します。
(アメリカ東海岸、西海岸、シンガ
サーバの場所
Amazon東京DC
サーバ(VPS)
Amazon EC2 ミディアム インスタンス
WordPress
3.2.1日本語版
アクセス元
東京某所
Copyright (C) 2011 Prime Strategy co.,ltd.
Prime Strategy
26
サーバの設置場所の違いによるロード時間の差
設置場所
ロード時間 遅延時間
①東京
291ms
10ms
②シンガポール 564ms
283ms
③西海岸
653ms
372ms
④東海岸
898ms
617ms
①
②
③
④
サーバの設置場所の違いにより生じる伝送遅延時間
ブラウザ
サーバ(WordPress)
①リクエスト送信
ブラウザ
②実行
③レスポンス受信
伝送時間
伝送時間
PHPの実行
MySQLの実行
翻訳処理
Copyright (C) 2011 Prime Strategy co.,ltd.
Prime Strategy
28
日本語翻訳処理
英語版
日本語版
ja.moファイル等
を用いた翻訳プ
ロセス
日本語翻訳処理のオーバーヘッド
WordPress日本語版の実行時間
の最大75%を占めます。
PHPを高速化する
ブラウザ
サーバ(WordPress)
①リクエスト送信
ブラウザ
②実行
③レスポンス受信
伝送時間
伝送時間
PHPの実行
MySQLの実行
翻訳処理
Copyright (C) 2011 Prime Strategy co.,ltd.
Prime Strategy
32
APCを導入してPHPの構文解析を高速化する。
PHPは実行時に通常のPHPファイル
を構文解析し、バイトコードと呼ばれ
るPHPだけが理解できる形式に変
換します。
APCはバイトコードをキャッシュして
PHPの実行時間を短縮させます。
APC導入の効果
1.ロード時間
291ms→
188ms
(1.54倍)
Copyright (C) 2011 Prime Strategy co.,ltd.
Prime Strategy
34
MySQLを高速化する
ブラウザ
サーバ(WordPress)
①リクエスト送信
ブラウザ
②実行
③レスポンス受信
伝送時間
伝送時間
PHPの実行
MySQLの実行
翻訳処理
MySQLを高速化する(クエリキャッシュの有効化)
my.cnfの[mysqld]セクションに
query_cache_size = 64M
の一行を追加してクエリキャッシュを有効にします。
クエリキャッシュはデータベースに変更がない限り、一度発行されたSELECT
文の実行結果をキャッシュして、それを再利用するものです。
Copyright (C) 2011 Prime Strategy co.,ltd.
Prime Strategy
36
クエリキャッシュ導入の効果
1.ロード時間
188ms→
186ms
(1.01倍)
2.リクエスト数
11.8リクエスト/秒→
12.0リクエスト/秒
(1.01倍)
セットアップ直後はあまり効果が見られませんが、クエ
リ数やデータ数が増加してくると威力を発揮します。数
倍以上のパフォーマンスになることもあります。
日本語翻訳処理を高速化する
ブラウザ
サーバ(WordPress)
①リクエスト送信
ブラウザ
②実行
③レスポンス受信
伝送時間
伝送時間
PHPの実行
MySQLの実行
翻訳処理
Copyright (C) 2011 Prime Strategy co.,ltd.
Prime Strategy
38
001 Prime Strategy Translate Acceleratorを導入する
WordPress.org公式ディレクトリから
プラグインをダウンロードして有効化
します。
翻訳ファイルの読み込みにキャッ
シュを用いたり、翻訳そのものを停
止させることで高速化します。
Translate Accelerator導入の効果(APCモード)
1.ロード時間
186ms→
132ms
(1.40倍)
Copyright (C) 2011 Prime Strategy co.,ltd.
Prime Strategy
40
Translate Accelerator導入の効果(サイト表示の翻訳を停止)
1.ロード時間
132ms→
75ms
(1.76倍)
2.リクエスト数
17.3リクエスト/秒→
40.9リクエスト/秒
(2.36倍)
HTMLを圧縮して転送を高速化する
ブラウザ
サーバ(WordPress)
①リクエスト送信
ブラウザ
②実行
③レスポンス受信
伝送時間
伝送時間
PHPの実行
MySQLの実行
翻訳処理
Copyright (C) 2011 Prime Strategy co.,ltd.
Prime Strategy
42
mod_deflate利用してファイル圧縮で転送量を減少させる
mod_deflateが利用可な場合、Apacheの設定ファイルに、
AddOutputFilterByType DEFLATE text/html text/plain text/css
等の設定を行うと、該当するコンテントタイプのファイルをgzip圧縮します。
これによって転送量を減少させることができます。
mod_deflate導入の効果
1.ロード時間
75ms→
66ms
(1.13倍)
2.リクエスト数
40.9リクエスト/秒→
41.0リクエスト/秒
(1.00倍)
リクエスト数にはあまり影響がありませんが、ページの
ボリュームが多い場合には効果的です。また
WordPressのみならずCSSやJavascriptなどにも適用で
ページキャッシュを用いる高速化
ブラウザ
サーバ(WordPress)
①リクエスト送信
ブラウザ
②実行
③レスポンス受信
伝送時間
伝送時間
PHPの実行
MySQLの実行
翻訳処理
Copyright (C) 2011 Prime Strategy co.,ltd.
Prime Strategy
46
WP Super Cacheでページをキャッシュする
WordPress.org公式ディレクトリから
プラグインをダウンロードして有効化
します。
一度アクセスのあったページを
キャッシュして再利用します。
WP Super Cache導入の効果
1.ロード時間
66ms→
25ms
(2.64倍)
Copyright (C) 2011 Prime Strategy co.,ltd.
Prime Strategy
48
Nginxのプロクシキャッシュを使う(1回目のアクセス)
Nginx+proxy
cache
80番ポート
Nginx+fcgi
8080番ポート
②プロクシ
③PHP(WordPress)の実行
④キャッシュ処理と
レスポンス
①リクエスト
Nginxのプロクシキャッシュを使う(2回目以降のアクセス)
Nginx+proxy
cache
80番ポート
②キャッシュを返す
①リクエスト
Copyright (C) 2011 Prime Strategy co.,ltd.
Prime Strategy
50
Nginxのプロクシキャッシュ導入の効果
1.ロード時間
25ms→
25ms
(1.00倍)
2.リクエスト数
679リクエスト/秒→
1515リクエスト/秒
(2.23倍)
Nginx+Varnishでさらに高速化する(1回目のアクセス)
Nginx+proxy
80番ポート
+
②プロクシ
④PHP(WordPress)の実行
⑤キャッシュ処理
①リクエスト
Varnish
6081番ポート
③プロクシ
⑥レスポンス
Copyright (C) 2011 Prime Strategy co.,ltd.
Prime Strategy
52
Nginx+Varnishでさらに高速化する(2回目のアクセス)
Nginx+proxy
80番ポート
+
8080番ポート
②プロクシ
③キャッシュを返す
①リクエスト
Varnish
6081番ポート
Nginx+fcgi
④レスポンス
Nginx+Varnish導入の効果
1.ロード時間
25ms→
25ms
(1.00倍)
Copyright (C) 2011 Prime Strategy co.,ltd.
Prime Strategy
54
絶大な威力を発揮するページキャッシュ。では、これですべて解決か?
ページキャッシュなし
ページキャッシュあり
テーマ修正
○
キャッシュクリア必要
ウィジェット修正
○
キャッシュクリア必要
設定変更
○
キャッシュクリア必要
投稿
○
△
管理画面
○
キャッシュ無効
セッション使用
○
対策が必要
データ書き込み
○
対策が必要
条件に応じた
表示の変化
○
対策が必要
Copyright (C) 2011 Prime Strategy co.,ltd.
Prime Strategy
56
おまけ:keep aliveを有効にして接続を再利用する
ブラウザ
サーバ(WordPress)
①リクエスト送信
ブラウザ
②実行
③レスポンス受信
伝送時間
伝送時間
PHPの実行
MySQLの実行
翻訳処理
おまけ:keep aliveを有効にして接続を再利用する
Apaceh、Nginxともにkeep aliveを有効にすることによって一度発生した接続
を一定時間再利用します。これにより、接続を確立させるまでのオーバー
ヘッドを短縮します。
[Nginx]の場合
keepalive_timeout 3;
[Apache]の場合
Copyright (C) 2011 Prime Strategy co.,ltd.
Prime Strategy
58
keep alive導入の効果
1.ロード時間
25ms→
16ms
(1.56倍)
2.リクエスト数
2501リクエスト/秒→
3175リクエスト/秒
(1.26倍)
2,000倍速くなったか?
1.ロード時間
682ms→
16ms
(43倍)
2.リクエスト数
1.5リクエスト/秒→
3175リクエスト/秒
(2116倍)
ロード時間は43倍でしたが、リクエスト数は2000倍を
達成しました。
Copyright (C) 2011 Prime Strategy co.,ltd.