本番環境で使いたいphp

41
本番環境で使いたいPHP LOCAL PHP部 勉強会 佐藤琢哉

Upload: takuya-sato

Post on 24-Jun-2015

1.491 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: 本番環境で使いたいPHP

本番環境で使いたいPHP

LOCAL  PHP部 勉強会  佐藤琢哉

Page 2: 本番環境で使いたいPHP

自己紹介 •  佐藤琢哉  •  @nazo  •  最近スマホアプリ開発してます  

Page 3: 本番環境で使いたいPHP

今回の内容について •  本番環境でPHP使ってますか?  •  どうやって使ってますか?  •  金がないけど微妙に負荷がある環境とか困るよね  

•  そんな感じ  •  ソーシャルゲームみたいな超負荷の環境の話はしません  

•  EC2の話もしません

Page 4: 本番環境で使いたいPHP

ケース1:レンタルサーバー ケース別・本番運用の方法

Page 5: 本番環境で使いたいPHP

レンタルサーバーの定義 •  借りているサーバー  •  root権限はもらえない  •  SSHできるかどうかは不問

Page 6: 本番環境で使いたいPHP

レンタルサーバーでどうにかなるの?

•  どうにかなるからレンタルサーバーを選んでいる  – お金だけが理由でレンタルサーバーを選んじゃうのはちょっと…  

– 実はサポートをする手間が省ける(サーバー自分でいじれる人にはあまりない発想)  

•  今時はVPSも安いので、「サーバーの面倒見れるけど金がない」という人はVPSで

Page 7: 本番環境で使いたいPHP

レンタルサーバーでできること •  .htaccessでの設定  – できない場合もある  – チューニングと呼べるほどの設定はない  

•  フレームワーク等のキャッシュ設定  – 今回の話ではないけど…  – ちゃんと設定すると大幅に速度UP  – WordPress等でも

Page 8: 本番環境で使いたいPHP

.htaccessで設定できる項目 •  http://jp.php.net/manual/ja/ini.list.php  •  PHP_INI_SYSTEM”以外”の項目  •  もちろん.htaccess自体が使えないといけない  

•  正直ここでどうにかなることはほとんどない

Page 9: 本番環境で使いたいPHP

DBのインデックスの見直し •  必ずやろう(全然速度が違うよ!)  •  少ないデータでもそこそこ効果あり  •  検索クエリそのものを見直すのもあり  

Page 10: 本番環境で使いたいPHP

その前にインデックスって何? •  索引  •  大量のデータから検索する処理を高速化するための補助データ  

•  本の目次

Page 11: 本番環境で使いたいPHP

インデックスの考え方 •  プライマリキー=インデックス  – つまりプライマリキーで検索しているものは既にインデックスが効いている  

•  つまりプライマリキー以外で検索しているものを洗い出してインデックスを確認する  

•  困った時はEXPLAIN

Page 12: 本番環境で使いたいPHP

キャッシュによる高速化 •  「何もしないプログラムは一番速い」  •  できるだけ「何もしない」に近づける  •  難しい処理を最初にしておいて、その結果だけを読み込むのが「キャッシュ」  

Page 13: 本番環境で使いたいPHP

キャッシュの方法 •  フレームワークに付属の機能を使う  •  PEAR::CacheやZend_Cacheなどを使う  •  MemcachedやMongoDBなど  •  MySQLなど(DB)  •  自作

Page 14: 本番環境で使いたいPHP

どういうところがキャッシュできる?

•  HTML部分のうち、毎回ほぼ同じものが出てくるもの  – 例えば1日に1回しか変わらないランキングを、呼び出し毎に毎回計算していたら無駄  

•  計算結果があまり変わらない部分  

Page 15: 本番環境で使いたいPHP

どのキャッシュシステムを使う?

•  再生成コストがどのくらいかかるか  •  どのくらい再生成するか  •  どのくらいの負荷がかかるか  •  どのくらいの永続性が必要か  

Page 16: 本番環境で使いたいPHP

ケース2:VPS1インスタンス ケース別・本番運用の方法

Page 17: 本番環境で使いたいPHP

そこそこ本格的 •  基本的に1台の中であれば何でもできる  •  最近は安いのでホイホイ借りれる  •  メモリと予算のバランスが難しい  – 最低でも1Gはほしい  – Virtuozzo系は避けよう  

Page 18: 本番環境で使いたいPHP

Apacheのチューニング •  そんなにできることは多くない  •  メモリがきついケースが多いので、余計なモジュールは読み込まないようにしておこう  

•  mod_expire等で、静的コンテンツへのリクエストをできるだけ減らす  

Page 19: 本番環境で使いたいPHP

MySQLのチューニング •  ここも劇的に変わるようなことは少ない  – 台数が多くなると話が変わってくるよ  

•  my-­‐****.confから適当に選ぼう

Page 20: 本番環境で使いたいPHP

そもそもチューニングするために

•  ボトルネックの調査 – メモリが限界?スレッド数が限界?CPUが限界?  

– ベンチマークすると怒られるよ  – Munin  /  Cacti  等を入れる  

Page 21: 本番環境で使いたいPHP

低メモリVPS対策 •  低メモリVPS=突然プロセスがこける  – Apacheとか突然死して帰ってこないことがある  

– Virtuozzo系に顕著(スワップがないので)  

•  Monitを入れておいて自動復帰させる

Page 22: 本番環境で使いたいPHP

プログラム側の高速化 •  cronが使えるので、重たい処理は別プロセスで行うことができる  

•  Webからのアクセス時に不要な処理はcronで外出しすると、ユーザー側の見栄えがいい  

•  ただしトータルの処理量はそれほど変わらない  

Page 23: 本番環境で使いたいPHP

PHPアクセラレータ •  いろいろあるけど、現在の主流はAPC  – APC以外を使う理由はほとんどない  

•  apc.stat  は通常は  1  でいい  – 0にしたほうが多少高速になるけど管理が面倒  – 負荷が急なところだと初回アクセス時に死ぬ  

•  よほどの理由がない限りは入れておこう  – EC-­‐CUBEとか入れると動かなくなるよ  

Page 24: 本番環境で使いたいPHP

ケース3:4台くらいのサーバー ケース別・本番運用の方法

Page 25: 本番環境で使いたいPHP

分散できる?できない? •  どう考える?  •  4台の役割

Page 26: 本番環境で使いたいPHP

今までどこがボトルネックだったのか

•  いきなり4台構成にしていない場合は、今までの監視結果からある程度把握できているはず  

•  PHPが重いならPHPサーバーを多めに、DBが重いならDBサーバーを多めにする

Page 27: 本番環境で使いたいPHP

全サーバーに同じものを入れる •  全てに均等に割り振りたいという発想  •  実際はDBが全部均一の役割にすることができないため微妙  

•  4台程度だと、静的コンテンツサーバーとPHPサーバーを別にするメリットはあまりない

Page 28: 本番環境で使いたいPHP

お金に余裕があるのでちゃんとバックアップしたい

•  正解  •  4台程度だと、分散による効果はあまり期待できない  

•  それよりバックアップが大事  

Page 29: 本番環境で使いたいPHP

サーバーにApache以外 •  Nginx  +  php-­‐fpm  – 速度は出るけど…  – 何かあったときにちゃんと対応できる?  

Page 30: 本番環境で使いたいPHP

ぼくのかんがえたさいきょうのわりふり

•  A:Web(PHP+静的コンテンツ)サーバー  •  B:DBマスターサーバー  •  C:DBスレーブサーバー+監視+ログ+バックアップ  

•  CにはAからのDBアクセスは行かない(バックアップに無理はさせない)  

•  Dは?

Page 31: 本番環境で使いたいPHP

4台あると皆さんならどうしますか?

•  考えてみましょう

Page 32: 本番環境で使いたいPHP

ケース4:16台くらい ケース別・本番運用の方法

Page 33: 本番環境で使いたいPHP

分散する前提 •  何を何台割り当てるか  •  4台の時同様、全部に同じものを載せる方法も無くはない  

•  このあたりはもう専門的な知識が必要なので、ちゃんと調べよう

Page 34: 本番環境で使いたいPHP

ハードウェア構成を考える分岐点

•  現代ではEC2などのクラウドサーバーを使うことが多い  – 台数を増やすのが簡単だよ  

•  物理サーバはかゆいところに手が届く  – 仮想サーバはIOはそこまで速くないよ  

Page 35: 本番環境で使いたいPHP

PHP部分は4台の時と同じ考え •  どこが負荷があるのか  •  台数が多いので、cronで動かすサーバーだけでも複数台設定することが可能  

Page 36: 本番環境で使いたいPHP

まとめ

Page 37: 本番環境で使いたいPHP

構成を考える前に •  何故その構成にする必要があるのか  – 監視をする  – 計測をする  

•  予算…

Page 38: 本番環境で使いたいPHP

PHPプログラムをちゃんと  チューニングしよう

•  サーバー台数を増やして解決=金  •  台数が少ないうちは地道に解決  •  台数が一定数を超えると、増やしただけでは解決しない  

•  快適な環境は快適なプログラムから  

Page 39: 本番環境で使いたいPHP

DBをチューニングしよう •  負荷の大半はDB  •  インデックスがちゃんと有効か  •  IO処理が入ってないか  •  どうしても処理しきれなくなったら分散  

Page 40: 本番環境で使いたいPHP

「金で解決」は  最後の手段!

Page 41: 本番環境で使いたいPHP

おわり