SlideShare a Scribd company logo
本番環境で使いたいPHP

  LOCAL	
  PHP部 勉強会	
  
      佐藤琢哉
自己紹介
•  佐藤琢哉	
  
•  @nazo	
  
•  最近スマホアプリ開発してます	
  
今回の内容について
•  本番環境でPHP使ってますか?	
  
•  どうやって使ってますか?	
  
•  金がないけど微妙に負荷がある環境とか
   困るよね	
  
•  そんな感じ	
  
•  ソーシャルゲームみたいな超負荷の環境の
   話はしません	
  
•  EC2の話もしません
ケース別・本番運用の方法

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

•  どうにかなるからレンタルサーバーを選ん
   でいる	
  
 –  お金だけが理由でレンタルサーバーを選ん
    じゃうのはちょっと…	
  
 –  実はサポートをする手間が省ける(サーバー
    自分でいじれる人にはあまりない発想)	
  
•  今時はVPSも安いので、「サーバーの面倒
   見れるけど金がない」という人はVPSで
レンタルサーバーでできること
•  .htaccessでの設定	
  
  –  できない場合もある	
  
  –  チューニングと呼べるほどの設定はない	
  
•  フレームワーク等のキャッシュ設定	
  
  –  今回の話ではないけど…	
  
  –  ちゃんと設定すると大幅に速度UP	
  
  –  WordPress等でも
.htaccessで設定できる項目
•  http://jp.php.net/manual/ja/ini.list.php	
  
•  PHP_INI_SYSTEM”以外”の項目	
  
•  もちろん.htaccess自体が使えないといけな
   い	
  
•  正直ここでどうにかなることはほとんど
   ない
DBのインデックスの見直し
•  必ずやろう(全然速度が違うよ!)	
  
•  少ないデータでもそこそこ効果あり	
  
•  検索クエリそのものを見直すのもあり	
  
その前にインデックスって何?
•  索引	
  
•  大量のデータから検索する処理を高速化
   するための補助データ	
  
•  本の目次
インデックスの考え方
•  プライマリキー=インデックス	
  
 –  つまりプライマリキーで検索しているものは
    既にインデックスが効いている	
  
•  つまりプライマリキー以外で検索している
   ものを洗い出してインデックスを確認する	
  
•  困った時はEXPLAIN
キャッシュによる高速化
•  「何もしないプログラムは一番速い」	
  
•  できるだけ「何もしない」に近づける	
  
•  難しい処理を最初にしておいて、その結果
   だけを読み込むのが「キャッシュ」	
  
キャッシュの方法
•    フレームワークに付属の機能を使う	
  
•    PEAR::CacheやZend_Cacheなどを使う	
  
•    MemcachedやMongoDBなど	
  
•    MySQLなど(DB)	
  
•    自作
どういうところがキャッシュでき
       る?
•  HTML部分のうち、毎回ほぼ同じものが出
   てくるもの	
  
 –  例えば1日に1回しか変わらないランキング
    を、呼び出し毎に毎回計算していたら無駄	
  
•  計算結果があまり変わらない部分	
  
どのキャッシュシステムを使う?
•    再生成コストがどのくらいかかるか	
  
•    どのくらい再生成するか	
  
•    どのくらいの負荷がかかるか	
  
•    どのくらいの永続性が必要か	
  
ケース別・本番運用の方法

ケース2:VPS1インスタンス
そこそこ本格的
•  基本的に1台の中であれば何でもできる	
  
•  最近は安いのでホイホイ借りれる	
  
•  メモリと予算のバランスが難しい	
  
 –  最低でも1Gはほしい	
  
 –  Virtuozzo系は避けよう	
  
Apacheのチューニング
•  そんなにできることは多くない	
  
•  メモリがきついケースが多いので、余計な
   モジュールは読み込まないようにしておこ
   う	
  
•  mod_expire等で、静的コンテンツへのリ
   クエストをできるだけ減らす	
  
MySQLのチューニング
•  ここも劇的に変わるようなことは少ない	
  
 –  台数が多くなると話が変わってくるよ	
  
•  my-­‐****.confから適当に選ぼう
そもそもチューニングするために
•  ボトルネックの調査
 –  メモリが限界?スレッド数が限界?CPUが限
    界?	
  
 –  ベンチマークすると怒られるよ	
  
 –  Munin	
  /	
  Cacti	
  等を入れる	
  
低メモリVPS対策
•  低メモリVPS=突然プロセスがこける	
  
 –  Apacheとか突然死して帰ってこないことがあ
    る	
  
 –  Virtuozzo系に顕著(スワップがないので)	
  
•  Monitを入れておいて自動復帰させる
プログラム側の高速化
•  cronが使えるので、重たい処理は別プロセ
   スで行うことができる	
  
•  Webからのアクセス時に不要な処理はcron
   で外出しすると、ユーザー側の見栄えがい
   い	
  
•  ただしトータルの処理量はそれほど変わら
   ない	
  
PHPアクセラレータ
•  いろいろあるけど、現在の主流はAPC	
  
   –  APC以外を使う理由はほとんどない	
  
•  apc.stat	
  は通常は	
  1	
  でいい	
  
   –  0にしたほうが多少高速になるけど管理が面倒	
  
   –  負荷が急なところだと初回アクセス時に死ぬ	
  
•  よほどの理由がない限りは入れておこう	
  
   –  EC-­‐CUBEとか入れると動かなくなるよ	
  
ケース別・本番運用の方法

ケース3:4台くらいのサーバー
分散できる?できない?
•  どう考える?	
  
•  4台の役割
今までどこがボトルネックだった
      のか
•  いきなり4台構成にしていない場合は、今
   までの監視結果からある程度把握できて
   いるはず	
  
•  PHPが重いならPHPサーバーを多めに、
   DBが重いならDBサーバーを多めにする
全サーバーに同じものを入れる
•  全てに均等に割り振りたいという発想	
  
•  実際はDBが全部均一の役割にすることが
   できないため微妙	
  
•  4台程度だと、静的コンテンツサーバーと
   PHPサーバーを別にするメリットはあまり
   ない
お金に余裕があるのでちゃんと
    バックアップしたい
•  正解	
  
•  4台程度だと、分散による効果はあまり
   期待できない	
  
•  それよりバックアップが大事	
  
サーバーにApache以外
•  Nginx	
  +	
  php-­‐fpm	
  
   –  速度は出るけど…	
  
   –  何かあったときにちゃんと対応できる?	
  
ぼくのかんがえたさいきょうのわ
      りふり
•  A:Web(PHP+静的コンテンツ)サーバー	
  
•  B:DBマスターサーバー	
  
•  C:DBスレーブサーバー+監視+ログ+
   バックアップ	
  
•  CにはAからのDBアクセスは行かない
   (バックアップに無理はさせない)	
  
•  Dは?
4台あると皆さんならどうします
       か?
•  考えてみましょう
ケース別・本番運用の方法

ケース4:16台くらい
分散する前提
•  何を何台割り当てるか	
  
•  4台の時同様、全部に同じものを載せる
   方法も無くはない	
  
•  このあたりはもう専門的な知識が必要な
   ので、ちゃんと調べよう
ハードウェア構成を考える分岐点
•  現代ではEC2などのクラウドサーバーを使
   うことが多い	
  
 –  台数を増やすのが簡単だよ	
  
•  物理サーバはかゆいところに手が届く	
  
 –  仮想サーバはIOはそこまで速くないよ	
  
PHP部分は4台の時と同じ考え
•  どこが負荷があるのか	
  
•  台数が多いので、cronで動かすサーバーだ
   けでも複数台設定することが可能	
  
まとめ
構成を考える前に
•  何故その構成にする必要があるのか	
  
 –  監視をする	
  
 –  計測をする	
  
•  予算…
PHPプログラムをちゃんと	
  
     チューニングしよう
•  サーバー台数を増やして解決=金	
  
•  台数が少ないうちは地道に解決	
  
•  台数が一定数を超えると、増やしただけ
   では解決しない	
  
•  快適な環境は快適なプログラムから	
  
DBをチューニングしよう
•    負荷の大半はDB	
  
•    インデックスがちゃんと有効か	
  
•    IO処理が入ってないか	
  
•    どうしても処理しきれなくなったら分散	
  
「金で解決」は	
  
 最後の手段!
おわり

More Related Content

PDF
Web時代の大富豪的プログラミングのススメ
PDF
apachehereというPHPのBuiltin Serverっぽいやつをつくった
PDF
RDS(MySQL)の利用と注意点
PPTX
20140628 AWSの2014前半のアップデートまとめ
PPTX
PHP7実環境ベンチ2016春
PPTX
Re: WebServer BenchMarking
PDF
PHPという概念が存在しない退屈な世界
PPTX
Varnish
Web時代の大富豪的プログラミングのススメ
apachehereというPHPのBuiltin Serverっぽいやつをつくった
RDS(MySQL)の利用と注意点
20140628 AWSの2014前半のアップデートまとめ
PHP7実環境ベンチ2016春
Re: WebServer BenchMarking
PHPという概念が存在しない退屈な世界
Varnish

What's hot (20)

PDF
第4回 JAWS-UG Okayama 月額3.3円〜でレンタルサーバーを始める方法
PDF
初心者向けWebinar AWS上でのファイルサーバ構築
KEY
NHN techcon-20120519-fujimoto
PDF
お金をかけないDBチューニング
PPTX
Mvp road show_0830_rev1
PDF
サーバーのおしごと
PPTX
今週やった事
PPTX
Rust で簡易 HTTP サーバーを作ってみよう
PDF
Capistrano in practice - WebCareer
PDF
Rds徹底入門
PDF
Rubyを使った分散全文検索ミドルウェア
PDF
AWS Auroraよもやま話
PDF
とあるApi
PDF
Dockerizeして
大変だった話、幸せになった話
PDF
2012/6/10 Webのパフォーマンスを考える @ 【第三回】初心者向けホームページ勉強会
PDF
採用LT「まだお祈りデプロイで消耗してるの?」
PDF
20120427西区勉強会
PDF
オンプレ Rancher Server × ML基盤 をはじめます
PDF
20130330 JAWS-UG広島 美人CDP
PDF
Webサーバの性能測定
第4回 JAWS-UG Okayama 月額3.3円〜でレンタルサーバーを始める方法
初心者向けWebinar AWS上でのファイルサーバ構築
NHN techcon-20120519-fujimoto
お金をかけないDBチューニング
Mvp road show_0830_rev1
サーバーのおしごと
今週やった事
Rust で簡易 HTTP サーバーを作ってみよう
Capistrano in practice - WebCareer
Rds徹底入門
Rubyを使った分散全文検索ミドルウェア
AWS Auroraよもやま話
とあるApi
Dockerizeして
大変だった話、幸せになった話
2012/6/10 Webのパフォーマンスを考える @ 【第三回】初心者向けホームページ勉強会
採用LT「まだお祈りデプロイで消耗してるの?」
20120427西区勉強会
オンプレ Rancher Server × ML基盤 をはじめます
20130330 JAWS-UG広島 美人CDP
Webサーバの性能測定
Ad

Viewers also liked (8)

PPT
2009年のPHPフレームワーク
PDF
徹底攻略!PHP5.4
PPTX
ここがすごい! なぞとPHP5.3
PDF
Silex入門
PDF
フレームワーク使おうぜ!
PDF
Vue.js入門
PDF
MuninとZABBIXで効率的トラブルシューティング
PDF
障害対応・運用におけるトリアージ的対応とZabbixの活用
2009年のPHPフレームワーク
徹底攻略!PHP5.4
ここがすごい! なぞとPHP5.3
Silex入門
フレームワーク使おうぜ!
Vue.js入門
MuninとZABBIXで効率的トラブルシューティング
障害対応・運用におけるトリアージ的対応とZabbixの活用
Ad

Similar to 本番環境で使いたいPHP (20)

PDF
⑮jQueryをおぼえよう!その1
PDF
Amazon RDS (MySQL) 入門
PDF
PHP7の内部実装から学ぶ性能改善テクニック
PDF
社内Chef勉強会
PPTX
初心者向け負荷軽減のはなし
PPTX
ちゃんとWeb会議
PDF
PHPアプリの品質を(ある程度)保つために出来る事 〜組織編〜
PDF
【Hpcstudy】みんな、ベンチマークどうやってるの?
PDF
初心者がOpenIndianaで自宅サーバを作ったよって話
PDF
密着!わたしのコンソールアプリ開発環境
PDF
Webサーバ勉強会#4
PDF
sysloadや監視などの話(仮)
PPTX
Osoljp201204
PPTX
UE4 MultiPlayer Online Deep Dive: 実践編1 (Byking様ご講演) #UE4DD
PPTX
非同期系統の基礎
PDF
Spot Instance + Spark + MLlibで実現する簡単低コスト機械学習
PDF
地方企業がソーシャルゲーム開発を成功させるための10のポイント
PDF
とある Perl Monger の働き方
PDF
anybuild/Hosting casual #1
PDF
B 2-1 はじめての Windows Azure
⑮jQueryをおぼえよう!その1
Amazon RDS (MySQL) 入門
PHP7の内部実装から学ぶ性能改善テクニック
社内Chef勉強会
初心者向け負荷軽減のはなし
ちゃんとWeb会議
PHPアプリの品質を(ある程度)保つために出来る事 〜組織編〜
【Hpcstudy】みんな、ベンチマークどうやってるの?
初心者がOpenIndianaで自宅サーバを作ったよって話
密着!わたしのコンソールアプリ開発環境
Webサーバ勉強会#4
sysloadや監視などの話(仮)
Osoljp201204
UE4 MultiPlayer Online Deep Dive: 実践編1 (Byking様ご講演) #UE4DD
非同期系統の基礎
Spot Instance + Spark + MLlibで実現する簡単低コスト機械学習
地方企業がソーシャルゲーム開発を成功させるための10のポイント
とある Perl Monger の働き方
anybuild/Hosting casual #1
B 2-1 はじめての Windows Azure

More from Takuya Sato (6)

PDF
レガシープロダクトを改善していくための戦い方
PPTX
設計と実装で 抑えておきたい サービスクラスと例外
PPTX
Redmineで始めるチケット駆動開発
ODP
本当は怖いPHP
PPTX
PHPとMongoDBで学ぶ次世代データストア
PDF
PHPでセキュリティを真面目に考える
レガシープロダクトを改善していくための戦い方
設計と実装で 抑えておきたい サービスクラスと例外
Redmineで始めるチケット駆動開発
本当は怖いPHP
PHPとMongoDBで学ぶ次世代データストア
PHPでセキュリティを真面目に考える

本番環境で使いたいPHP