第69回PHP勉強会 - 株式会社awmawm.jp/~yoya/php/study/php-gd2.pdf · • 画像の検証や説明資料を作るのに、GD をよく使 うのと、PHP らしいという事で
本番環境で使いたいPHP
-
Upload
takuya-sato -
Category
Technology
-
view
1.491 -
download
1
Transcript of 本番環境で使いたいPHP
![Page 1: 本番環境で使いたいPHP](https://reader033.fdocument.pub/reader033/viewer/2022060118/5589f2f8d8b42ac66e8b463e/html5/thumbnails/1.jpg)
本番環境で使いたいPHP
LOCAL PHP部 勉強会 佐藤琢哉
![Page 2: 本番環境で使いたいPHP](https://reader033.fdocument.pub/reader033/viewer/2022060118/5589f2f8d8b42ac66e8b463e/html5/thumbnails/2.jpg)
自己紹介 • 佐藤琢哉 • @nazo • 最近スマホアプリ開発してます
![Page 3: 本番環境で使いたいPHP](https://reader033.fdocument.pub/reader033/viewer/2022060118/5589f2f8d8b42ac66e8b463e/html5/thumbnails/3.jpg)
今回の内容について • 本番環境でPHP使ってますか? • どうやって使ってますか? • 金がないけど微妙に負荷がある環境とか困るよね
• そんな感じ • ソーシャルゲームみたいな超負荷の環境の話はしません
• EC2の話もしません
![Page 4: 本番環境で使いたいPHP](https://reader033.fdocument.pub/reader033/viewer/2022060118/5589f2f8d8b42ac66e8b463e/html5/thumbnails/4.jpg)
ケース1:レンタルサーバー ケース別・本番運用の方法
![Page 5: 本番環境で使いたいPHP](https://reader033.fdocument.pub/reader033/viewer/2022060118/5589f2f8d8b42ac66e8b463e/html5/thumbnails/5.jpg)
レンタルサーバーの定義 • 借りているサーバー • root権限はもらえない • SSHできるかどうかは不問
![Page 6: 本番環境で使いたいPHP](https://reader033.fdocument.pub/reader033/viewer/2022060118/5589f2f8d8b42ac66e8b463e/html5/thumbnails/6.jpg)
レンタルサーバーでどうにかなるの?
• どうにかなるからレンタルサーバーを選んでいる – お金だけが理由でレンタルサーバーを選んじゃうのはちょっと…
– 実はサポートをする手間が省ける(サーバー自分でいじれる人にはあまりない発想)
• 今時はVPSも安いので、「サーバーの面倒見れるけど金がない」という人はVPSで
![Page 7: 本番環境で使いたいPHP](https://reader033.fdocument.pub/reader033/viewer/2022060118/5589f2f8d8b42ac66e8b463e/html5/thumbnails/7.jpg)
レンタルサーバーでできること • .htaccessでの設定 – できない場合もある – チューニングと呼べるほどの設定はない
• フレームワーク等のキャッシュ設定 – 今回の話ではないけど… – ちゃんと設定すると大幅に速度UP – WordPress等でも
![Page 8: 本番環境で使いたいPHP](https://reader033.fdocument.pub/reader033/viewer/2022060118/5589f2f8d8b42ac66e8b463e/html5/thumbnails/8.jpg)
.htaccessで設定できる項目 • http://jp.php.net/manual/ja/ini.list.php • PHP_INI_SYSTEM”以外”の項目 • もちろん.htaccess自体が使えないといけない
• 正直ここでどうにかなることはほとんどない
![Page 9: 本番環境で使いたいPHP](https://reader033.fdocument.pub/reader033/viewer/2022060118/5589f2f8d8b42ac66e8b463e/html5/thumbnails/9.jpg)
DBのインデックスの見直し • 必ずやろう(全然速度が違うよ!) • 少ないデータでもそこそこ効果あり • 検索クエリそのものを見直すのもあり
![Page 10: 本番環境で使いたいPHP](https://reader033.fdocument.pub/reader033/viewer/2022060118/5589f2f8d8b42ac66e8b463e/html5/thumbnails/10.jpg)
その前にインデックスって何? • 索引 • 大量のデータから検索する処理を高速化するための補助データ
• 本の目次
![Page 11: 本番環境で使いたいPHP](https://reader033.fdocument.pub/reader033/viewer/2022060118/5589f2f8d8b42ac66e8b463e/html5/thumbnails/11.jpg)
インデックスの考え方 • プライマリキー=インデックス – つまりプライマリキーで検索しているものは既にインデックスが効いている
• つまりプライマリキー以外で検索しているものを洗い出してインデックスを確認する
• 困った時はEXPLAIN
![Page 12: 本番環境で使いたいPHP](https://reader033.fdocument.pub/reader033/viewer/2022060118/5589f2f8d8b42ac66e8b463e/html5/thumbnails/12.jpg)
キャッシュによる高速化 • 「何もしないプログラムは一番速い」 • できるだけ「何もしない」に近づける • 難しい処理を最初にしておいて、その結果だけを読み込むのが「キャッシュ」
![Page 13: 本番環境で使いたいPHP](https://reader033.fdocument.pub/reader033/viewer/2022060118/5589f2f8d8b42ac66e8b463e/html5/thumbnails/13.jpg)
キャッシュの方法 • フレームワークに付属の機能を使う • PEAR::CacheやZend_Cacheなどを使う • MemcachedやMongoDBなど • MySQLなど(DB) • 自作
![Page 14: 本番環境で使いたいPHP](https://reader033.fdocument.pub/reader033/viewer/2022060118/5589f2f8d8b42ac66e8b463e/html5/thumbnails/14.jpg)
どういうところがキャッシュできる?
• HTML部分のうち、毎回ほぼ同じものが出てくるもの – 例えば1日に1回しか変わらないランキングを、呼び出し毎に毎回計算していたら無駄
• 計算結果があまり変わらない部分
![Page 15: 本番環境で使いたいPHP](https://reader033.fdocument.pub/reader033/viewer/2022060118/5589f2f8d8b42ac66e8b463e/html5/thumbnails/15.jpg)
どのキャッシュシステムを使う?
• 再生成コストがどのくらいかかるか • どのくらい再生成するか • どのくらいの負荷がかかるか • どのくらいの永続性が必要か
![Page 16: 本番環境で使いたいPHP](https://reader033.fdocument.pub/reader033/viewer/2022060118/5589f2f8d8b42ac66e8b463e/html5/thumbnails/16.jpg)
ケース2:VPS1インスタンス ケース別・本番運用の方法
![Page 17: 本番環境で使いたいPHP](https://reader033.fdocument.pub/reader033/viewer/2022060118/5589f2f8d8b42ac66e8b463e/html5/thumbnails/17.jpg)
そこそこ本格的 • 基本的に1台の中であれば何でもできる • 最近は安いのでホイホイ借りれる • メモリと予算のバランスが難しい – 最低でも1Gはほしい – Virtuozzo系は避けよう
![Page 18: 本番環境で使いたいPHP](https://reader033.fdocument.pub/reader033/viewer/2022060118/5589f2f8d8b42ac66e8b463e/html5/thumbnails/18.jpg)
Apacheのチューニング • そんなにできることは多くない • メモリがきついケースが多いので、余計なモジュールは読み込まないようにしておこう
• mod_expire等で、静的コンテンツへのリクエストをできるだけ減らす
![Page 19: 本番環境で使いたいPHP](https://reader033.fdocument.pub/reader033/viewer/2022060118/5589f2f8d8b42ac66e8b463e/html5/thumbnails/19.jpg)
MySQLのチューニング • ここも劇的に変わるようなことは少ない – 台数が多くなると話が変わってくるよ
• my-‐****.confから適当に選ぼう
![Page 20: 本番環境で使いたいPHP](https://reader033.fdocument.pub/reader033/viewer/2022060118/5589f2f8d8b42ac66e8b463e/html5/thumbnails/20.jpg)
そもそもチューニングするために
• ボトルネックの調査 – メモリが限界?スレッド数が限界?CPUが限界?
– ベンチマークすると怒られるよ – Munin / Cacti 等を入れる
![Page 21: 本番環境で使いたいPHP](https://reader033.fdocument.pub/reader033/viewer/2022060118/5589f2f8d8b42ac66e8b463e/html5/thumbnails/21.jpg)
低メモリVPS対策 • 低メモリVPS=突然プロセスがこける – Apacheとか突然死して帰ってこないことがある
– Virtuozzo系に顕著(スワップがないので)
• Monitを入れておいて自動復帰させる
![Page 22: 本番環境で使いたいPHP](https://reader033.fdocument.pub/reader033/viewer/2022060118/5589f2f8d8b42ac66e8b463e/html5/thumbnails/22.jpg)
プログラム側の高速化 • cronが使えるので、重たい処理は別プロセスで行うことができる
• Webからのアクセス時に不要な処理はcronで外出しすると、ユーザー側の見栄えがいい
• ただしトータルの処理量はそれほど変わらない
![Page 23: 本番環境で使いたいPHP](https://reader033.fdocument.pub/reader033/viewer/2022060118/5589f2f8d8b42ac66e8b463e/html5/thumbnails/23.jpg)
PHPアクセラレータ • いろいろあるけど、現在の主流はAPC – APC以外を使う理由はほとんどない
• apc.stat は通常は 1 でいい – 0にしたほうが多少高速になるけど管理が面倒 – 負荷が急なところだと初回アクセス時に死ぬ
• よほどの理由がない限りは入れておこう – EC-‐CUBEとか入れると動かなくなるよ
![Page 24: 本番環境で使いたいPHP](https://reader033.fdocument.pub/reader033/viewer/2022060118/5589f2f8d8b42ac66e8b463e/html5/thumbnails/24.jpg)
ケース3:4台くらいのサーバー ケース別・本番運用の方法
![Page 25: 本番環境で使いたいPHP](https://reader033.fdocument.pub/reader033/viewer/2022060118/5589f2f8d8b42ac66e8b463e/html5/thumbnails/25.jpg)
分散できる?できない? • どう考える? • 4台の役割
![Page 26: 本番環境で使いたいPHP](https://reader033.fdocument.pub/reader033/viewer/2022060118/5589f2f8d8b42ac66e8b463e/html5/thumbnails/26.jpg)
今までどこがボトルネックだったのか
• いきなり4台構成にしていない場合は、今までの監視結果からある程度把握できているはず
• PHPが重いならPHPサーバーを多めに、DBが重いならDBサーバーを多めにする
![Page 27: 本番環境で使いたいPHP](https://reader033.fdocument.pub/reader033/viewer/2022060118/5589f2f8d8b42ac66e8b463e/html5/thumbnails/27.jpg)
全サーバーに同じものを入れる • 全てに均等に割り振りたいという発想 • 実際はDBが全部均一の役割にすることができないため微妙
• 4台程度だと、静的コンテンツサーバーとPHPサーバーを別にするメリットはあまりない
![Page 28: 本番環境で使いたいPHP](https://reader033.fdocument.pub/reader033/viewer/2022060118/5589f2f8d8b42ac66e8b463e/html5/thumbnails/28.jpg)
お金に余裕があるのでちゃんとバックアップしたい
• 正解 • 4台程度だと、分散による効果はあまり期待できない
• それよりバックアップが大事
![Page 29: 本番環境で使いたいPHP](https://reader033.fdocument.pub/reader033/viewer/2022060118/5589f2f8d8b42ac66e8b463e/html5/thumbnails/29.jpg)
サーバーにApache以外 • Nginx + php-‐fpm – 速度は出るけど… – 何かあったときにちゃんと対応できる?
![Page 30: 本番環境で使いたいPHP](https://reader033.fdocument.pub/reader033/viewer/2022060118/5589f2f8d8b42ac66e8b463e/html5/thumbnails/30.jpg)
ぼくのかんがえたさいきょうのわりふり
• A:Web(PHP+静的コンテンツ)サーバー • B:DBマスターサーバー • C:DBスレーブサーバー+監視+ログ+バックアップ
• CにはAからのDBアクセスは行かない(バックアップに無理はさせない)
• Dは?
![Page 31: 本番環境で使いたいPHP](https://reader033.fdocument.pub/reader033/viewer/2022060118/5589f2f8d8b42ac66e8b463e/html5/thumbnails/31.jpg)
4台あると皆さんならどうしますか?
• 考えてみましょう
![Page 32: 本番環境で使いたいPHP](https://reader033.fdocument.pub/reader033/viewer/2022060118/5589f2f8d8b42ac66e8b463e/html5/thumbnails/32.jpg)
ケース4:16台くらい ケース別・本番運用の方法
![Page 33: 本番環境で使いたいPHP](https://reader033.fdocument.pub/reader033/viewer/2022060118/5589f2f8d8b42ac66e8b463e/html5/thumbnails/33.jpg)
分散する前提 • 何を何台割り当てるか • 4台の時同様、全部に同じものを載せる方法も無くはない
• このあたりはもう専門的な知識が必要なので、ちゃんと調べよう
![Page 34: 本番環境で使いたいPHP](https://reader033.fdocument.pub/reader033/viewer/2022060118/5589f2f8d8b42ac66e8b463e/html5/thumbnails/34.jpg)
ハードウェア構成を考える分岐点
• 現代ではEC2などのクラウドサーバーを使うことが多い – 台数を増やすのが簡単だよ
• 物理サーバはかゆいところに手が届く – 仮想サーバはIOはそこまで速くないよ
![Page 35: 本番環境で使いたいPHP](https://reader033.fdocument.pub/reader033/viewer/2022060118/5589f2f8d8b42ac66e8b463e/html5/thumbnails/35.jpg)
PHP部分は4台の時と同じ考え • どこが負荷があるのか • 台数が多いので、cronで動かすサーバーだけでも複数台設定することが可能
![Page 36: 本番環境で使いたいPHP](https://reader033.fdocument.pub/reader033/viewer/2022060118/5589f2f8d8b42ac66e8b463e/html5/thumbnails/36.jpg)
まとめ
![Page 37: 本番環境で使いたいPHP](https://reader033.fdocument.pub/reader033/viewer/2022060118/5589f2f8d8b42ac66e8b463e/html5/thumbnails/37.jpg)
構成を考える前に • 何故その構成にする必要があるのか – 監視をする – 計測をする
• 予算…
![Page 38: 本番環境で使いたいPHP](https://reader033.fdocument.pub/reader033/viewer/2022060118/5589f2f8d8b42ac66e8b463e/html5/thumbnails/38.jpg)
PHPプログラムをちゃんと チューニングしよう
• サーバー台数を増やして解決=金 • 台数が少ないうちは地道に解決 • 台数が一定数を超えると、増やしただけでは解決しない
• 快適な環境は快適なプログラムから
![Page 39: 本番環境で使いたいPHP](https://reader033.fdocument.pub/reader033/viewer/2022060118/5589f2f8d8b42ac66e8b463e/html5/thumbnails/39.jpg)
DBをチューニングしよう • 負荷の大半はDB • インデックスがちゃんと有効か • IO処理が入ってないか • どうしても処理しきれなくなったら分散
![Page 40: 本番環境で使いたいPHP](https://reader033.fdocument.pub/reader033/viewer/2022060118/5589f2f8d8b42ac66e8b463e/html5/thumbnails/40.jpg)
「金で解決」は 最後の手段!
![Page 41: 本番環境で使いたいPHP](https://reader033.fdocument.pub/reader033/viewer/2022060118/5589f2f8d8b42ac66e8b463e/html5/thumbnails/41.jpg)
おわり