FLINTERS Engineer's Blog

FLINTERSのエンジニアによる技術ブログ

PHPソーシャルアプリ開発テクニックとパフォーマンス改善のセミナーに参加してきました

こんにちわ、damayaです。

昨日、大手町で開催された「PHPを使ったソーシャルアプリ開発テクニックと、アクセスに耐えるためのパフォーマンス改善」というセミナーに参加してきました。
主に重要だと感じた部分を列挙いたします。


アジェンダは、
「負荷分散設計」

「Webサーバーのスケールアウト手法」
PHP中間コードキャッシュ」
「データーキャッシュ」
「DBサーバーのスケールアウト手法」
「メッセージキューイング」
「ソーシャルアプリ向け画像生成」
「ソーシャルアプリ向けFlash動的合成」
の8構成です。

今年、押さえておきたいPHPの話
PHPを使ったソーシャルアプリ開発テクニックと、アクセスに耐えるためのパフォーマンス改善〜
アシアル株式会社 田中正裕さん


▼負荷分散設計
・スケールアップとは、1台のサーバー能力を増やし、パフォーマンスを向上させること
・スケールアウトとは、サーバー台数を増やし、全体のパフォーマンスを向上させること
・スケールアウトのメリットは、「ハードウェアの上限なし」「安価なハードほどコストパフォーマンスが高い」「冗長性」
・スケールアウトのデメリットは、「ネットワーク構成等の複雑化」「プログラムの改修コスト」「サーバー台数増加による管理」


▼Webサーバーのスケールアウト手法
nginx(エンジンエックス)を導入すると、Apacheのリバースプロキシよりも約3倍パフォーマンスが高い
・nginxはロシア製であり、今月バージョン1.0.0が公開され安定して使用できる
今後は、nginxが主流となりそう
LVSは、ロードバランサとして機能し、対応プロトコルが豊富
NFSを使用する方法もあるが、高負荷に耐えるためにはコストがかかりすぎる


PHP中間コードキャッシュ
APCXCacheが主に導入事例が多く、APCの導入がお勧め
・サーバーのメモリー上に、PHPソースコードコンパイル済みの中間コードをキャッシュしておくことで高速化
Apacheのリスタートでキャッシュがクリアされる為、クリア直後は重くなる
・高アクセス時にファイルの編集を行うと、編集途中のファイルがキャッシュされてしまう場合がある
APCを使うと平均で2倍〜3倍速くなる
SymfonyCakePHP等のフレームワークを使用しているシステムの場合、極端にページが表示されるまでのスループットが極端に落ち、1秒間に10人程度しかさばくことができない事例がある

▼データーキャッシュ

SQLの実行結果や、ページの出力結果をキャッシュする
memcachedは、CPUの負荷は低いが高メモリ負荷
・memcache互換として、FlarerepcachedMembaseMemcachedb等がある


▼DBサーバーのスケールアウト手法
・マスターDBサーバーのスケールアウトは影響が大きい場合がある
pgpool-IIMySQL Proxyなどのプロキシー型システムの場合、アプリの変更は不要になる


▼メッセージキューイング
・ActiveQMなどのミドルウェアQ4MといったMySQLプラグインが存在する


▼ソーシャルアプリ向け画像生成
・GDが標準だが、標準GDではパフォーマンスがよくないため、各社がKGDなどGDを改良して使用している
・GDの他には、ImageMagickGMagickという画像合成エンジンがある
画像の合成は、専用サーバーをたてるのがパフォーマンスへの近道


▼ソーシャルアプリ向けFlash動的合成
Flash合成ツールとして、MingSWFMillSWF Editor等がある

具体的なライブラリー等の紹介があり、貴重な情報なセミナーでした。