最適化Kohanaサイトの速度と拡張性
-
12-09-2019 - |
質問
サイトの仕組みを構築したとKohanaた腹膨大な量の通昨日、私は一歩引いて自分の置かれている評価のデザイン。私はどう考えている標準技術の最適化Kohana-ベースのアプリケーション?
に興味がある私にとってベンチマーキングしています。かの設定 Benchmark::start()
や Benchmark::stop()
各コントローラー-方法を見るために実行時間は全てのページでは、私として出願できるベンチマーキングは世界です。
私のキャッシュ-図書館以来、住所】高知県高知市大川筋を提案していあんをしているところなのです。
解決
何かこの答えはない特有のKohana、その適用が盛りだくさんのPHP。
ここではポイントに来て私の話の性能、拡張性、PHP、...
に使用しました多くのアイデアに取り組むと同時に、複数のプロジェクト--といっ;いので注意してくださいが同じことが言えます。
まず、演奏も 多くの側面は/ご不明な点がございましたらと考えて:
- 構成のサーバー (Apache,PHP,MySQL,その他の非、およびシステム);がでる場合がありますが示している ServerFault, したいと思い,
- PHPコード
- データベースクエリ、
- 使いやウェブサーバ?
- 使用できるどのようなキャッシュメカニズムは?ただけのつもりでいる日付データの?
を使用しリバースプロキシ
このとき役に立たされています。 リバースプロキシ, のように、 ワニス, フロントのウェブサーバ:let it キャッシュしているときに一つでも多くの, のみを要求する必要がありPHP/MySQL計算 (もちろん、その他の要求がって支えられているため、キャッシュのプロキシ) でApache/PHP/MySQL.
- まず、CSS/Javascript/画像 --でもある静-- いていないのかもしれません必要なによApache
- きのリバースプロキシキャッシュのすべてます。
- トレーサビリティを静的ファイルがなければならないため、Apacheの下で働く者は、できるだクリアしました。
- はっきり言ってくださいApacheでのみサーバーは、有限の制限数です。
- その後、リバースプロキシとして多くのPHPのページからできるキャッシュ:があると思われ 一部のページとなることが, すると、お楽しみいただけます。の代わりに、リクエストに基づくキャッシュしませんよう、軽量化、サーバーお (取得らのPHPのサーバーから時には、ほとんどを日)?
- 例えばあるRSSフィード (原則として忘れがちなので、しようとした場合にの最適化のための公演) 求められる 非常に多く, としてキャッシュの時間を節約することができるか何百/千要求Apache+PHP+MySQL!
- 同じで最も訪問されたページのサイトに決めなければならない変化の少なくともカップルの分 (例:ホームページ?), し、廃棄物のCPUを再生成し、各ユーザーが要望します。
- その間には大きな違いがありページを召し上が匿名ユーザー (同ページのすべてのユーザー) ページ務のため特定のユーザー ("こんにちはMr Xのための新しいメッセージ"は、インスタンス)?
- その場合、できるのではないでしょうかを設定しリバースプロキシによるキャッシュのページでお召し上がりいただけユーザー (クッキーのように、セッションクッキーは、通常)
- しょうApache+PHPは以下への対応:のみを特定のユーザーをかけたのです。
報 使用バースプロキシとしてキャッシュ, となり、PHP用でき、例えばこれらを実現するために、 ベンチマーク結果400%-700%増加のサーバー機能とAPCとイカのキャッシュ.
(終を利用していることをいか、というニス--そんなもんでしょう可能性が^^ニスより最近のものより専用のキャッシュ)
う場合があり、管理を停止再生も多くのページでもかんでもっての最適化を任意のコード;-)
少なくともあ、そうでないかもしれないその他の通知に記載されている場ラッシュ...それも必ず行の最適化を合わせていかなければならないの下でも圧...
としてsidenote:きになったのであろうかOP:
サイトの仕組みを構築したとKohanaたに叩き付 膨大な交通昨日、
このような 急な状況が逆プロキシでは、文字通り、, いる場合、サイトに対応できていない最新の:
- トで設定を行うことができるでしょうのように常に --毎日 実行します:
- 設定を行うことができるでしょうめいPHPのページのキャッシュ;または短期間;このように、常に最新のデータを表示
- と、いただいた日かslashdotまたはフォ効果:
- 設定のリバースプロキシとしていPHPのページのキャッシュ;または長期間かにホームページは最新のものでできるウェブサイトに生き残るのだ-。
とい できるかを検出し、生き残れる"Slashdotted"? が興味を読み込みます。
のPHPい:
まずは:を使用していま 最近のバージョンのPHP?が定期的に改善、スピード、新しいバージョン;-)
例えばこれらを実現するために、 ベンチマークのPHP店3.0によ5.3-CVS.
この公演ではなかなか良かったことを理由に使用PHP5.3 (ためのシェイプを作ってみました一部のベンチマーク(フランス), し、結果)...
別の良い理由は、もちろん、PHP5.2に達し終了までの生活の維持管理が適切に行なわれていなくなるかも!?
を使用していませopcodeキャッシュ?
- んでもらえるように考えてい APC-代替PHPキャッシュ, は、インスタンス (pecl, マニュアル), の溶液などの見をもとに使用されるすべてのサーバーに思います。
- とても低いCPU負荷のサーバーが多く、場合によっ (私見るCPU負荷の一部のサーバーから80%40%を設置するだけでAPCを活性化するのでopcode-キャッシュ機能!)
- 基本的には、実行のPHPスクリプトの入っていたの二つのステップ
- 編集のPHPのソースコードをopcodes (相当のJAVAのbytecode)
- 業務執行のopcodes
- APCコネクタ付きを常にメモリが少なわれるPHPスクリプトファイルが実行され:のみを取り出しopcodesからのRAMを実行しています。
- 必要がある場合がありますち APCの 設定オプション, の方法により、
- がかなりの数の一部で大きな影響を及ぼすスピード/CPUの負担を大幅に軽減にとっての使いやすさをお
- 例えば、無効
[apc.stat](https://php.net/manual/en/apc.configuration.php#ini.apc.stat)
できの良いシステム負荷もっと修正を行ったPHPファイル思考慮しない限り、全体のフラッシopcode-キャッシュ;それはね、詳しくは参照のためのインスタンス るstat()のないstat()?
キャッシュを利用データ
なので、 を避けることができなくなり、もう.
の主なものはまっていて、スゴく楽しかったのはもちろん、SQL文:多くのホームページのだろうが同じクエリの結果の一部はほとんど同---というの "駄目" クエリのデータベース、を過ごしにいつでもご利用いただけるのと同じデータです。
もちろん、これはその他のものように、Webサービスの通話、取得情報から他のウェブサイトでは、重量計算、...
このために非常に面白いる:
- るクエリは実に多くの時間、常に同じデータ
- 他の (heavy) 計算はこれまで数多くの時間、いつも同じ結果を返
-店舗これらのデータと結果の種類によってはキャッシュ、などがわかりやすい-- 高速 --られないときには、いくつかのこちらのおSQL serverのための"もの".
大キャッシュ機構は、たとえば、次のようになります。
- APC:また、opcode-キャッシュ今で保存できるデータをメモリに
- および/または memcached (参照), でなければならないときに便利ですって ロット データ及び/又は 複数のサーバー, として配布します。
- もちろん、この考えのファイル;ん。
またまたお枠組みが一部キャッシュ関連のもの;ほとんどが既に分かっている都市になっているということ "私はあなたのキャッシュ-図書館以来" のOP;-)
プロファイリング
今は、もう使用 Xdebug への拡張 ロケ:ができるようなくカップルの弱点かなり簡単に、少なくともりがある場合にも機能するゃりーぱみゅぱみゅ。
正しく設定され, で生成プロファイリングできるファイル解析とグラフィックツールなど
- KCachegrind:私が好きな作品だけLinux/GIMP
- Wincachegrind windows;ではリメリックのものよりKCacheGrind、残念なことで表示しませんcallgraphs、通常.
- Webgrind 走行時のPHPウェブサーバので、作品のどこにも--もう少ない特徴です。
例えば、こちらのプ画面のKCacheGrind:
(出典: pascal-martin.fr)
(出典: pascal-martin.fr)
(ちなみにcallgraphた第二次スクリーンショットは何かといWinCacheGrindもWebgrindできないんでいて、私が記憶しているだけ^^)
(感謝@Mikushiのコメント もうひとつの可能性だったので、当然、俺には今までの使用はどのくらいの xhprof 拡張子it支援プロファイリングを生成できるcallgraphsがより軽量Xdebugるという対応することができるでしょうからインストールを生産す。
対応することができるでしょう利用でalonside XHGui, まの視覚化のデータです。
のSQLい:
今まで話のバックグラウンドにつPHPがありますのでご注意 以る可能性がボトルネックできないのではないでPHP側のもの, すが、データベース一---
少なくともつながるには、こちら:
- で決定すべきである:
- 何となる頻度が最も高くなる問合せお申込みはい
- が含まれており、これらの最適化 を使用して 右の指標, を中心に?), を使用し、
EXPLAIN
指導、ご利用の場合MySQL- 参照: 最適化の選択とその他の諸表
- でき、例えば、活性化
log_slow_queries
一覧を取得するための要求する "ぎ" 時間の始まりは最適化によります。
- かきキャッシュにこれらの問合せ (私が先ほど申しあげたように)
- はMySQLのものの構成は?あまり知りませんのことであるが、一部の設定オプションとしています。
- 最適化のMySQLサーバー が過ごせばよいかを教えてくれる面白い情報についての質問です。
ただ、二つの最も重要なもの:
- などのDB必要がない場合には: キャッシュしてください!
- るだけ"というニーズに対して、DBを使用効率の問合せ:用指数とします。
何ですか?
まだ読んで、僕が最適化?
でもまだまだ改善の余...カップルで建築を志向の考えがき:
- スイッチn層アーキテクチャ:
- のものを使っておけば間違いない"より効率的な"Apache?
- ったきっかけを教えていただけに、より頻繁約 nginx, がっているときではPHP-高容量のイベント私は使ったことで、自分で入手できるかもしれませんが、見つかの興味深い記事で、当期純;
- 例えば、 PHP性III--走行nginx.
- 参照: PHP-FPM-FastCGIプロセスマネージャ, は、同梱のPHP>=5.3.3なので不思議と愚.
- ったきっかけを教えていただけに、より頻繁約 nginx, がっているときではPHP-高容量のイベント私は使ったことで、自分で入手できるかもしれませんが、見つかの興味深い記事で、当期純;
もう一方のアイデア、ビットを失わせないアイテムでお客様の状況^^
が、まだ...なぜな研究をしているビットだ。;-)
とうKohana?
初回質問した最適化のアプリケーションに対する使用Kohana...でも、私はあいにくの アイデアをtrue PHPの応用...いったい何なのかはtrue Kohanaも-)
なくても特定です^^)
い:使用キャッシュ;Kohanaるよう支援部 キャッシュん (いつでも新しいものではない。
があるのであれば、それを迅速に行うことができ、やってみ;-)
もうなんかな保証人は必要ありません;あなたがデフォルトで有効になるように、Kohanaのままでいることは必要ですか?
閲覧にいるようでは少なくとももクロスサイト-スクリプティングフィルタリング;必要とします。
ただ、ここでのカップルのリンクに有効と考えられる:
レット-イヤリング-ピアス-
し、最後に、簡単に考:
- って貴社を支払うき5でしょうか? --を考えで合理的に必要十分な時間にいくつかの大最適化
- って貴社の購入 (給?) 第二のサーバーメンテナンス?
- どの場規模の大きい?
- どのくらいまで過ごせる10のでしょうか?ます。最適化で少す。
- やはどのくらい用意すればいいカップルにサーバー?
と言うつもりはありませんただし最適化:んべ!
が に行くために"クイック"の最適化していて欲しい大きな報酬 初:一opcodeキャッシュがき10 50%オフのサーバのCPU負荷した...わずか数分の設定;-)に、3日間で2%...
あ、ちなみ:前に出したもの: あ監視のものに, いかに改善していて、どのように!
なく監視していないの効果がどのようにした...ない場合でもそれは本当の最適化やはありません!
例えば、使えたようなもの RRDtool + サボテン.
とを示す上司にあたグラフィック40%CPU負荷が好きです。;-)
とにかく、本当に最後 お楽しみに!
(有を最適化するのが楽しみです!)
(Ergh持っているときにこのようなことか書くのがいくら---希少なくとも一部のコンテンツの有...私はこの答え:に有効と考えられるその他の回---)
他のヒント
使用 XDebug や WinCacheGrind または WebCacheGrind プロフィールを解析が遅くコードを実行します。
(出典: jokke.dk)
Kohanaのは、データベース・オブジェクトの使用を除き、箱から出して非常に非常に高速です。 Zomborを引用する「あなたは、データベースの結果オブジェクトの代わりに、結果アレイを使用している保証することによって、メモリの使用量を減らすことができます。」これは非難されているサイト上のHUGEEのパフォーマンスの違いになります。だけでなく、それはより多くのメモリを使用しない、それはスクリプトの実行速度が遅くなります。
また、 - あなたはキャッシュを使用する必要があります。私はmemcacheのを好むし、このように私のモデルでそれを使用します:
public function get($e_id)
{
$event_data = $this->cache->get('event_get_'.$e_id.Kohana::config('config.site_domain'));
if ($event_data === NULL)
{
$this->db_slave
->select('e_id,e_name')
->from('Events')
->where('e_id', $e_id);
$result = $this->db_slave->get();
$event_data = ($result->count() ==1)? $result->current() : FALSE;
$this->cache->set('event_get_'.$e_id.Kohana::config('config.site_domain'), $event_data, NULL, 300); // 5 minutes
}
return $event_data;
}
これはまた、大幅にパフォーマンスが向上します。上記2つの技術が80%によってサイトのパフォーマンスを向上させる。
あなたがボトルネックになっていると思う場所についていくつかのより多くの情報を与えた場合は、、私たちはいくつかのより良いアイデアを与えることができると確信しています。
また、いくつかの他のパフォーマンスのヒントについては、(それをグーグル)YSlowのをチェックしてください。
厳密に関連Kohana(きょういうことはない):
生産モード:
- るキャッシュ(今だけキャッシュのKohana::find_file結果が実際にできます。
- 無効化プロファイラ
によって2つのセント:)
私は全くのXDebugとキャッシュの回答に同意します。あなたがあなたの最大のスピードと規模のボトルネックを特定してきたまでは最適化のためのKohana層に見てはいけない。
のXDebugはあなたの時間の大半を過ごすと、あなたのコード内の「ホットスポット」を特定したことを教えてくれます。あなたはベースラインとパフォーマンスの向上を測定することができますので、このプロファイル情報を保管してください。
例の問題と解決策: あなたは、データベースから毎回高価なオブジェクトを構築している、それは本当に頻繁に変更しないことを発見した場合は、memcachedのか、別のメカニズムでそれらをキャッシュで見ることができます。これらの性能の修正のすべては時間がかかるし、あなたのシステムに複雑さを加えるので、あなたがそれらを固定し始める前に、あなたのボトルネックのことを確認します。