PHPアプリケーションパフォーマンスチューニングの話を聞いてきました。
4月16日(土)、札幌市産業振興センターにて開催されたPHPカンファレンス北海道2016に行ってきました。
お目当ては、ジグソー照井さんの「クラウド時代だからこそ見直したいPHPアプリケーションのパフォーマンスチューニング 」です。
「なぜパフォーマンスチューニングが重要か?」から始まり、クラウドサーバーならではの計測方法、サーバー構成、ミドルウェア構成やDBチューニングのポイント、ファイル構成など、さまざまな観点からのチューニングのヒントが含まれる、素晴らしい内容でした。
ボリュームがありすぎて全体の7割ぐらいのところでタイムオーバーになったのは残念でしたが、残りは公開された資料を見れば理解できる内容でした。
以下、サーバーインフラ担当として思うところをいくつか述べます。
「推測するな、計測せよ」ということで、まず、サーバー性能・負荷を可視化しないと始まりません。
僕も最近記事を書きましたが、監視ツールはNew Relic, Datadog, Mackerel等といったエージェント型の監視サービスを使用するのが手っ取り早いです。
(参考)
・性能監視サービスNew Relicについて
https://inaba-serverdesign.jp/blog/20130912/newrelic.html
・New Relic MySQL PluginでAmazon RDS for MySQLの性能を監視
https://inaba-serverdesign.jp/blog/20160421/new_relic_mysql_plugin_rds.html
Webサーバーまわりでは、Nginx + PHP-FPMの構成にすると静的コンテンツと動的コンテンツの処理を分離できるうえに使用メモリを節約できてコストパフォーマンスがよいのですが、Nginxでは、多くのWeb制作担当者が使いたいであろう.htaccessが使えないという弱点があります。
それを解消するのに、Apache + event_mpm + mod_proxy_fcgi + PHP-FPMは良いアイデアだと思うので、僕も試してみたいと思いました。
また、静的コンテンツファイルをAmazon S3などのオブジェクトストレージに保存すると、Webサーバーへのアクセスを減らすことができ、性能改善につながります。
DBサーバーまわりは、インフラ担当としてはスペックアップ、InnoDBバッファまわりやクエリキャッシュなどの基本的なパラメータチューニングはできるのですが、その効果は限定されます。
アプリケーション側で行う、
- 適切なスキーマ設計、インデックス設定を行って処理行数を減らす。
- キャッシュを使用してDBクエリ数を減らす。
- 更新と参照で問い合わせ先を切り替えられるようにして、レプリケーション構成を利用できるようにする。
といった施策のほうが劇的な性能改善効果が得られることが多いです。
稼働中のサービスのアプリケーション側の対応はなかなか難しいでしょうが、クラウドであれば本番DBサーバーから複製することで簡単に検証用のDBサーバーを用意できますので、オンプレミス時代よりは低コストでトライ&エラーしていろいろ試せると思います。
展示ブースでは、さくらインターネットさん「さくらのクラウド」の2万円無料クーポンをいただきました。
さくらさん、IDCFクラウドさん、AWSさんのキャンペーンクーポンは、実験環境で利用させていただきています。
いつもありがとうございます。
(関連記事)
・性能監視サービスNew Relicについて
https://inaba-serverdesign.jp/blog/20130912/newrelic.html
・New Relic MySQL PluginでAmazon RDS for MySQLの性能を監視
https://inaba-serverdesign.jp/blog/20160421/new_relic_mysql_plugin_rds.html
・WebサーバーのCPU数
https://inaba-serverdesign.jp/blog/20151221/webserver_cpus.html