Weitere ähnliche Inhalte Ähnlich wie Lampで作るソーシャルアプリの負荷対策~アプリとインフラの調和のテクニック~ (20) Lampで作るソーシャルアプリの負荷対策~アプリとインフラの調和のテクニック~2. ■KLab株式会社 会社紹介
• 2000年8月設立、今年10周年を迎えます
• 大規模/高負荷モバイルサイトの構築/運用にて
負荷対策のノウハウを蓄積してきました
• ソーシャルアプリ向けホスティングサービス「DSAS Hosting
for Social」提供中!
http://www.klab.jp/dsas_host/index.html
Copyright 2010 KLab Inc. All rights reserved. 2
5. ■本論に入る前に
• 本発表は主にモバイルのソーシャルアプリを元にしていま
す
• PHPフレームワークはCakePHP/symfonyを利用していま
す
• 両フレームワーク共に負荷対策のため、様々な拡張を加
えて使っています
• が、今回時間が取れなかったので、カスタマイズに興味の
ある方はセミナー後に個別にご相談ください(^^;
• また、モバイルソーシャルアプリ向けのFlash合成について
も色々経験してきました
• こちらについてもセミナー後に個別にご相談ください(^^;
Copyright 2010 KLab Inc. All rights reserved. 5
11. ■モバイルソーシャルアプリ特有の5秒ルール
• モバイルソーシャルアプリはHTTP通信が5秒を超えると強
制的にエラーページが表示されてしまう
• 5秒を超えるエラーが3分間に1000回を超えるとプラット
フォーム側にてアプリに対して一時的なペナルティが課せ
られてしまう
– プラットフォームにてアプリをメンテナンス状態に切り替えられてしまう
– メンテナンス状態が解除されるまで、ユーザーはアプリを利用できない
応答に5秒以上掛かる状態は
アプリが落ちているのと同じ
Copyright 2010 KLab Inc. All rights reserved. 11
15. ■KLabの場合
KLabが長年ノウハウを蓄積してきた
高負荷・大規模サイト構築用インフラ統合技術
DSAS
(Dynamic Server Assign System)
• オープンソースベース
• 単一故障点が存在しない高信頼構成
• 容易なメンテナンス・柔軟なスケーラビリティ
• 充実した監視機構とモニタリング
詳しくは http://www.klab.jp/dsas/
Copyright 2010 KLab Inc. All rights reserved. 15
16. ■使用しているソフトウェア
全てオープンソースによる構成
OS - Linux
ロードバランサ - LVS
WEBサーバ - Apache 2.2.x
開発言語 - PHP 5.2.x
DBサーバ - MySQL 5.1.x
キャッシュサーバ - memcached
Copyright 2010 KLab Inc. All rights reserved. 16
19. ■モニタリング機能について
トラフィック関係
各サーバーの
ロードアベレージ
Copyright 2010 KLab Inc. All rights reserved. 19
22. ■負荷対応とは
高負荷対策とは、ズバリ!
HTTPの待ち行列を
取り除く
ことです
Copyright 2010 KLab Inc. All rights reserved. 22
26. ■DBサーバとの接続時間を短くするために
1. サーバパラメータをチューニングする
2. アプリからは高速なSQLだけ実行する
3. 遅いSQLを検出し、対策する
4. SELECTクエリをスレーブDBに逃がす
5. SELECT結果をアプリケーションでキャッシュする
6. アプリから明示的にDB接続を切断する
Copyright 2010 KLab Inc. All rights reserved. 26
30. ■3. 遅いSQLを検出し、対策する
slow_query_log
• 実行時間が閾値を超えるSQLを記録する機能
– 記録先はテーブルかファイルを指定可能
– インデックスが使われていないSQLも記録可能
– SELECT結果件数が閾値以上のSQLも記録可能
explain構文
• SELECT文の実行計画を表示する
– 遅いSQLをexplainで解析し、改修計画を考える
Copyright 2010 KLab Inc. All rights reserved. 30
31. ■4.SELECTクエリをスレーブDBに逃がす
マスター スレーブ
DB DB
Insert into hoge values(1,hoge); Insert into hoge values(1,hoge);
MySQLのレプリケーション機能
マスターDBの変更をスレーブDBに反映する仕組み
非同期処理のため、伝送遅延がおきる
前日のユーザーランキング等、遅延してもいい情
報をスレーブDBからSELECTすることでマスター
DBへの参照を軽減することが出来る
Copyright 2010 KLab Inc. All rights reserved. 31
33. ■6.アプリから明示的にDB接続を切断する
• PHPからのmysqlへの接続時間を短くする
• mysql_pconnect()を使用しない
• 時間のかかる処理の手前でDB接続を閉じる
• 外部API呼び出し前(OpenSocialAPI各種)
• 画像合成前
• 外部プロセス呼び出し前(exec(),proc_open()等)
mysql_connect() mysql_close() 時間のかかる処理
PHP PHP
実行開始 実行終了
Copyright 2010 KLab Inc. All rights reserved. 33
37. ■WEBサーバとの接続時間を短くするために
1. APCを導入する
2. ユーザー情報をキャッシュする
3. プロファイルを取って現状を把握する
4. 画像合成を高速化する (案件個別のチューニング)
Copyright 2010 KLab Inc. All rights reserved. 37
38. ■1.APCを導入する
APC(Alternative PHP cache)
PHPのコンパイル結果をキャッシュを行う
拡張モジュール
• apc.shm_sizeにてキャッシュ用割り当てメモリを指定
• 環境によってはapc.statをoffにすることで
高速化する場合もあり
実はAPCにはもう一つの
便利な使い方が・・・
Copyright 2010 KLab Inc. All rights reserved. 38
42. ■2.ユーザー情報をキャッシュする
memcached
メモリにデータをSET,GETするKVS
• 保存先はメモリのため高速
• RDBMSのような集計処理には使えない
• 永続化されないためmemcachedが停止するとデータ
も消える
Copyright 2010 KLab Inc. All rights reserved. 42
43. ■3.プロファイルを取って現状を把握する
それでも駄目ならプロファイリング!
• Xdebugを導入し、関数ごとの実行時間を取得する
• 取得結果をプロファイリングツールを使って解析する
(Windows・・・WinCacheGrind等)
• (呼び出し回数×実行時間)が大きい関数がボトルネッ
ク。
– ボトルネックを見つければ後は改善策を考えるだけ!
某アプリでは
画像合成処理がボトルネックになっていることが発覚
Copyright 2010 KLab Inc. All rights reserved. 43
45. ■4.画像合成を高速化する
• キャッシュを検討するもmemcachedの容量不足
• 1ユーザー(約50KB) × ユーザー数(200万(仮))
= 100GB
• 各WEBサーバのローカルにファイルキャッシュを試
したが、ディスクIOが上がって逆効果
• GD自体を改造して合成処理の高速化&キャッ
シュしない!
Copyright 2010 KLab Inc. All rights reserved. 45
46. ■4.画像合成を高速化する
GDのネイティブ関数を改修
1. 画像の読み込み
• 画像読み込み関数のロジックを修正
2. 画像の重ね合わせ
• 画像コピー関数のロジックを修正
3. サムネイル画像の為の縮小
• 画像縮小関数のロジックを修正
ImageMagickを使い1~3まで500msecかかっていた案件でも
画像合成が100msec弱と、5倍以上高速化出来た。
Copyright 2010 KLab Inc. All rights reserved. 46
47. ■おわりに
本日のまとめ
Copyright 2010 KLab Inc. All rights reserved. 47
48. ■高負荷対策のまとめ
負荷対策とは
HTTPの待ち行列を取り除く行為
ロード WEB DB
バランサ サーバ サーバ
• 初期開発時のみならず、機能追加や修正を行う毎に
待ち行列を作りやすい
• 負荷対策は、【 待ち行列を発見→待ち行列の除去 】を
繰り返す終りなき戦い
• アプリだけで頑張らずに時にはハードウェアへの積極的
な投資も検討する
Copyright 2010 KLab Inc. All rights reserved. 48