2 P r i m e S t r a t e g y C o., L t d. W o r d P r e s s F u l l y M a n a g e d S e r v i c e D i v i s i o n 1. 今 日 お 話 しすること

53 

全文

(1)

ハイパフォーマンスWordPress

スライドURL http://goo.gl/rRwrvj

プライム・ストラテジー株式会社

(2)

P r i m e S t r a t e g y C o . , L t d . W o r d P r e s s F u l l y M a n a g e d S e r v i c e D i v i s i o n

(3)

「WordPressとサーバをチューニングして どこまで高速化できるのか?」

をテーマに高速化の技術と考え方をお話しします。

(4)

「まずは証拠」

(5)

お手数ですが、

「KUSANAGI WordPress」と検索して

http://kusanagi.tokyo/

にアクセスしてみていただけますか?

(6)
(7)

P r i m e S t r a t e g y C o . , L t d . W o r d P r e s s F u l l y M a n a g e d S e r v i c e D i v i s i o n

7

(8)

中村 けん牛 自己紹介 WordPressのフルマネージドサービスを 提供するプライム・ストラテジー株式会社 の代表をしています。 おもに東京とジャカルタで働いています。

t

@kengyu_n

f

Kengyu.Nakamura

(9)

月間1億PV超のメディアサイトなどの構築、サーバ運用 9 テレビ朝日 様 番組ブログポータル マイナビ 様 「マイナビウーマン」 Adobe Systems 様 事例サイト

(10)

超高速WordPress仮想マシン「KUSANAGI」の開発 ・WordPress 実行時間3 ミリ秒 台 ・1000 リクエスト/秒 をページキャッシュ非使用で実 現する仮想マシン (4vCPU、最大性能時)

(11)

WordPressプラグインの開発

11 ・Prime Timeline

=>ランタイムプロファイラ

・001 Prime Strategy Translate Accelerator

(12)

WordPress関連書籍の執筆など (出版社:SBクリエイティブ株式会社他) 『WordPressの教科書』 シリーズ (出版社:株式会社オライリー・ジャパン) 『詳解 WordPress』 『WordPressによるWebアプリケーション開発』

(13)

P r i m e S t r a t e g y C o . , L t d . W o r d P r e s s F u l l y M a n a g e d S e r v i c e D i v i s i o n

13

(14)

なぜWordPressの高速化が必要とされるのか?

1.WordPressはPHP+MySQLの動的なシステム =>

(15)

なぜWordPressの高速化が必要とされるのか? 15 2.CPUの開発ロードマップは動作クロック(周波数)よ りもコア数重視の流れ => ハードの進化による処理速度向上を期待しづらい

(16)

なぜWordPressの高速化が必要とされるのか? 3.このような背景の中でオウンドメディアやサービス サイトでは (1)PV獲得の機会を失わないという観点 (2)ユーザーエクスペリエンス向上の観点 (3)検索エンジン最適化の観点 (4)Webサイトの信頼性、安定性の観点

(17)

WordPressの高速化とは? 17 1.サーバサイドでの高速化 <= 本日のテーマ (サーバ、WordPress) 2.フロントエンドの高速化 (HTML、CSS、JavaScript)

(18)

サーバサイドの高速化とは?

(19)

サーバサイドの高速化とは?

19

HTMLページのロード時間を短くして

(20)

WordPressの高速化 HTMLページのロード時間を短くする=①+②+③を短縮する ブラウザ サーバ(WordPress) ①HTTPリクエスト送信 ②実行 ③HTTPレスポンス受信

(21)

WordPressの高速化

21 HTMLページのロード時間をFirebugのネットタブで確認する

(22)

WordPressの高速化

1秒あたりのアクセス数を増やすとは?

(23)

WordPressの高速化 23 ページのロード時間と1秒あたりのリクエスト数の関係 クイズ1(注:通信時間など無視しておおざっぱに考えます) 1vCPU(1コア)でページのロード時間が500ms だった場合、 1秒あたりのリクエスト数はいくつになりますか?

(24)

WordPressの高速化 ページのロード時間と1秒あたりのリクエスト数の関係 クイズ2 (注:通信時間など無視しておおざっぱに考えます) 1vCPU(1コア)でページのロード時間を100msにチューニ ングできた場合、 1秒あたりのリクエスト数はいくつになりますか?

(25)

WordPressの高速化 25 ページのロード時間と1秒あたりのリクエスト数の関係 クイズ3 (注:通信時間など無視しておおざっぱに考えます) 1vCPU(1コア)でページのロード時間が100msの場合、 2vCPU(2コア)にスケールアップすると 1秒あたりのリクエスト数はいくつになりますか?

(26)

WordPressの高速化 ページのロード時間と1秒あたりのリクエスト数の関係 クイズ4 (注:通信時間など無視しておおざっぱに考えます) 2vCPU(2コア)でページのロード時間が100msの場合、 4vCPU(4コア)にスケールアップするとページのロード時 間はいくつになりますか?

(27)

WordPressの高速化 27 HTMLページのロード時間を分解すると ブラウザ サーバ(WordPress) ①リクエスト送信 ブラウザ ②実行 ③レスポンス受信 通信時間 通信時間 PHPの実行 MySQLの実行 翻訳処理

(28)

P r i m e S t r a t e g y C o . , L t d . W o r d P r e s s F u l l y M a n a g e d S e r v i c e D i v i s i o n

4.ページキャッシュを使わずに WordPressを高速化する

(29)

WordPressを高速化する 29

あるサーバを利用してデフォルトの状態だと

WordPress 1.ロード時間 246ms 2.リクエスト数 4.9リクエスト/秒

(30)

WordPressを高速化する

ページキャッシュを使わないでどこまでいけるか

WordPress APC(PHPアクセラレー タ)導入で約1.85倍 246ms→133ms

(31)

WordPressを高速化する

31

PHP実行の仕組み

(32)

WordPressを高速化する PHP実行の仕組み

中間コード

(33)

WordPressを高速化する 33

ページキャッシュを使わないでどこまでいけるか

WordPress APC(PHPアクセラレー タ)導入で約1.85倍 246ms→133ms けっこう簡単に導入できます。 たとえば、 Centos 6の場合、最短rootで 次のコマンドを打つだけ

yum install -y php-pecl-apc; service httpd restart;

(34)

WordPressを高速化する

ページキャッシュを使わないでどこまでいけるか

WordPress APC(PHPアクセラレー タ)導入で約1.85倍 246ms→133ms PHP5.4まではAPC APC=PHPアクレラレータ+ ユーザーキャッシュ PHP5.5からはOPcache(+20%) APCu拡張

(35)

WordPressを高速化する 35

ページキャッシュを使わないでどこまでいけるか

WordPress MySQLのクエリキャッ シュ導入で約1.15倍 133ms→115ms APC(PHPアクセラレー タ)導入で約1.85倍 246ms→133ms

(36)

WordPressを高速化する

ページキャッシュを使わないでどこまでいけるか

WordPress MySQLのクエリキャッ シュ導入で約1.15倍 133ms→115ms APC(PHPアクセラレー タ)導入で約1.85倍 246ms→133ms 簡単に導入できます。 たとえば、my.cnfのmysqldセクション に次の1行を追加してMySQLサーバを

(37)

WordPressを高速化する 37

ページキャッシュを使わないでどこまでいけるか

WordPress MySQLのクエリキャッ シュ導入で約1.15倍 133ms→115ms 翻訳キャッシュ(001 Prime Strategy Translate Accelarator)

導入で約1.6倍 115ms→72ms

APC(PHPアクセラレー タ)導入で約1.85倍

(38)

WordPressを高速化する

ページキャッシュを使わないでどこまでいけるか

WordPress MySQLのクエリキャッ シュ導入で約1.15倍 133ms→115ms 翻訳キャッシュ(001 Prime Strategy Translate Accelarator)

APC(PHPアクセラレー タ)導入で約1.85倍

246ms→133ms

(39)

WordPressを高速化する 39

ページキャッシュを使わないでどこまでいけるか

WordPress MySQLのクエリキャッ シュ導入で約1.15倍 133ms→115ms 翻訳キャッシュ(001 Prime Strategy Translate Accelarator)

導入で約1.6倍 115ms→72ms APC(PHPアクセラレー タ)導入で約1.85倍 246ms→133ms Apache(mod_php)から Nginx+HHVM構成に変更で 約2.2倍 72ms→33ms

(40)

WordPressを高速化する HHVM実行の仕組み

(41)

WordPressを高速化する 41 HHVM実行の仕組み 中間コード ←これを HHVMが実行

(42)

WordPressを高速化する HHVM実行の仕組み 何度も利用される部 分をJITでコンパイル してネイティブコー ドへ

(43)

WordPressを高速化する 43

ページキャッシュを使わないでどこまでいけるか

WordPress MySQLのクエリキャッ シュ導入で約1.15倍 133ms→115ms 翻訳キャッシュ(001 Prime Strategy Translate Accelarator)

導入で約1.6倍 115ms→72ms APC(PHPアクセラレー タ)導入で約1.85倍 246ms→133ms Apache(mod_php)から Nginx+HHVM構成に変更で 約2.2倍 72ms→33ms ページ圧縮 (gzip)導入で 約1.1倍 33ms→30ms

(44)

WordPressを高速化する

ページキャッシュを使わないでどこまでいけるか

1.ロード時間 30ms 2.リクエスト数 56.8リクエスト/秒 1.ロード時間 246ms 2.リクエスト数 4.9リクエスト/秒 ロード時間 約8倍 リクエスト数 約11.6倍に向上

(45)

WordPressを高速化する 45

ページキャッシュを使わないでどこまでいけるか

1.ロード時間 30ms 2.リクエスト数 56.8リクエスト/秒 このサーバのCPUの周波数とコア数を変更すると どのような影響があるのか?

(46)

P r i m e S t r a t e g y C o . , L t d . W o r d P r e s s F u l l y M a n a g e d S e r v i c e D i v i s i o n

(47)

ページキャッシュを導入する

( WP SiteManager、WP Super Cache、Nginx、Varnishなど)

(48)

ページキャッシュを導入する

WP SiteManagerの場合

1.ロード時間 15ms 260リクエスト/秒 1.ロード時間 246ms 2.リクエスト数 4.9リクエスト/秒 ロード時間 約16.4倍 リクエスト数 約53.1倍に向上

(49)

トランジェントを導入する 49

トランジェントとは?

WordPerss内部の値を一 時的にDB(wp_optionsテ ーブル)に保存して、異な るプロセスで再利用する ためのWordPressの機能 => 部分キャッシュとして利用 可能

(50)

トランジェントを導入する

トランジェントの具体例(footer.php)

<?php if ( ! $footer_cache = get_transient( 'footer_cache' ) ) { ob_start(); ?>

<footer id="colophon" class="site-footer" role="contentinfo">

<?php get_sidebar( 'footer' ); ?> <div class="site-info">

<?php do_action(

<a href="<?php echo esc_url( __(

'http://wordpress.org/', 'twentyfourteen' ) ); ?>"><?php printf( __( 'Proudly powered by %s', 'twentyfourteen' ), 'WordPress' ); ?></a>

</div><!-- .site-info --> </footer><!-- #colophon --> <?php $footer_cache = ob_get_clean(); set_transient( 'footer_cache', $footer_cache, 60 * 5 );

(51)

ということで

(52)

ぜひ実践して

(53)

53

Updating...