新しいサーバーで遊ぶことになったのですが、真っ白なキャンバスを見つめているようです。好きなものを何でも載せることができる。私はApacheに慣れていますが、nginxがApacheよりも10倍、100倍、それ以上のトラフィックを処理できることを聞き続けています。それだけでなく、quot;ずっとずっと速いのです;
記事を検索すると、Drupalとは無関係のものがたくさん出てきます。あるいは、Drupalに関連する記事を見つけたとしても、1)誰かの設定ファイルで、その設定方法を簡単に説明しようとしているか、2)nginxは使わないで、PHP fcgidでApacheを使いましょうと言っているが、その理由の説明がないかのいずれかである。
では、Drupalに関して言えば、現実はどうなのでしょうか?
例として、私はこの 2bits.com の記事のようなものを探しています。 ここでは、著者はApacheのmod_phpとApacheのfcgidを比較し、それぞれの長所と短所を比較検討し、現実世界での影響を説明するケーススタディを提供するなど、かなり広範囲に渡って取り上げています。この記事には、私の状況にとってどちらのアプローチが最適かについて、十分な判断材料が含まれています。
この著者はmod_phpとfcgidを比較していますが、私はApacheとNginxについて同じような包括的で実世界での見解を求めています。
Nginxに切り替えて、Apacheとの違いに驚かれた方はいらっしゃいますか?APC、Memcache、Varnishのような積極的なキャッシュをすでに使用している高度に最適化された環境であっても、ApacheをNginxに置き換えただけで変わる変数は、それ自体、この新しい代替技術への投資に値するほどの違いがあるのでしょうか?
このサーバーに設置されるサイトは、月平均200万PVのアクセスがあります。LAMP スタックで Cent OS 6 が稼働しています。4コアのCPUに8ギガのラム。MemcachedとAPCはミックスの一部となる予定です。Drupalは、基本的にバニラ7で、50ほどのモジュールがインストールされています。
厳密には、ご質問の答えにはなっていません。とにかくお役に立てれば幸いです。
Apache/Nginx/Lighttpd/other web server.どれを選んでもいいのでしょうか?要するに、Noです。
ずっとずっと長い答え:__。
ログインしているユーザーの割合が非常に大きい場合、Webサーバーのパフォーマンスを気にする必要があります。ユーザーが匿名である場合、その層で最適化することで理論的に得られる差は、リソースをよりキャッシュしやすくすることに比べれば微々たるものです。もし、あなたのcssファイルに適切なキャッシュヘッダがあれば、UAは2回目にそれを要求することはないでしょう。これは重要なことです。Varnishや同様のソフトウェアソリューションでページをキャッシュすることができれば、そのページを提供するのは、ハッシュルックアップを行い、RAMから直接大きなデータチャンクを返すという問題である。これは重要なことです。これらのシナリオでは、HTTPデーモンが関与することはなく、PHPが起動されることはありません。Drupalはブートストラップしません。大規模なモジュールのセットをRAMにロードする必要はなく、時間のかかるデータベースクエリを実行することもありません。
コールドキャッシュから、ログインしたユーザーのために、複雑なページでフルページロードを実行するとき、a lot of things are going on.確かに、ウェブサーバーは受信したリクエストの処理、ヘッダーの設定、レスポンスの返送に関与しています。しかし、その時間は、Drupalが完全なブートストラップを実行し、そのレスポンスを出力するという文脈では、関係ないことです。何百ものデータベースクエリが実行されている可能性があります。PHPの非常に複雑なロジックがパーサーによって評価されます。たくさんのモジュールがRAMにロードされています。これらのどれかのパフォーマンスを改善することで、パフォーマンスに大きく貢献する可能性が高くなります。
議論のために:例えば、あなたが他のすべてのもののパフォーマンス最適化に多くの時間を費やしたとしましょう。
1.APC]4 (または Optimizer+) と最新かつ最速のバージョンの PHP を実行します。 1.DBクエリはほとんどありません。 1.PHPのロジックが削減されている。 1.Varnishでキャッシュできるものはキャッシュしている。 1.サイト全体を再構築し、クライアントサイドで多くのキャッシュを行い、ECMAScriptで多くの重い処理を行うようにした。
もしあなたが多くのログインユーザーを抱えていて、上記のすべてに対処しているのであれば、パフォーマンスチューニングやウェブサーバーを交換することで、おそらく違いを出すことができるでしょう。しかし、どうでしょう。あなたのサイトはとても複雑で、特定のユーザーの利用パターンも「独特」なのです。一般的な答えはないのです。ロードバランサーの後ろにすべての異なるウェブサーバーをセットアップし、あなたのシナリオの下でそれらがどのように動作するかを確認する必要があります。
以上、Webサーバーのパフォーマンス最適化に時間をかけることは、時間の使い方に問題があるという結論を論理的に導き出そうと試みました。しかし、誰かに上記の穴を見つけてもらいたい。)
その他、いくつかのメモ:
1.DrupalCon Copenhagenの基調講演]7で、PHPクリエイターのRasmus Lerdorf氏10が自らNginxを使って、Drupalのパフォーマンスの話題で、以下のように語っています。 Webサーバについていつも聞かれるが、それは本当に重要ではない。Webサーバはかなり無関係だ。
1.Facebookは、PHPコードを100%高速化するために、Drupalよりもはるかに大きなコードベースであるHiphopを書くのに膨大な時間を費やした。私はHiphopを$ wc -l $(find .-type f | grep -v "^.git" | grep -v "^.hphp/third_party") で調べてみました。| sort -nr | head -n1
を実行したところ、1.512.481行のコードで構成されていることが判明しました。これは、PHPの速度を向上させるために費やされた、まったく非常識な量の作業です。これは、PHPの速度が彼らにとって非常に重要であるからだと思います。
1.キャッシュをうまく使うことは、ウェブサーバーをチューニングするよりもずっと大きな効果をもたらすと言ったっけ?
1.Apache 2.4のリリースにより、Jim Jagielskiは基本的にApache 2.4はイベントベースサーバーより速いと主張している。
1.私はDrupal Performance and Scalability with The Dream Teamに参加したのですが、ちょうどこの質問が出たところでした。どれを選ぶべきかという答えは、すべてパフォーマンスとは無関係のものでした。例えば、「どちらがすでに設定方法を知っているか」、「どちらが最もシンプルな技術スタックを構築できるか」などが、どちらかを選ぶ理由として挙げられていました。性能は関係ありません。
OK、この質問はすでに回答されていますが、私はもう一回ネクロマンシングします。主に、違いがないというこれらの回答の意味合いが好きではないことと、ウェブ開発者として、私はキャッシュを情熱をもって憎むからです。
Apacheとnginxの違いは、「どれだけ速くリクエストを処理できるか」ではなく、「同じ量のハードウェアでどれだけ多くのリクエストを処理できるか」であり(特にリソースが限られている場合)、これはやや異なることです。
Apacheはプロセスベースのサーバーです。 つまり、リクエストごとにプロセスを分岐させます。 Nginxはイベントベースのサーバーで、プロセスやスレッドの代わりに(非同期の)イベントループを使用することを意味します。
そして、プロセスベースのサーバ(Apacheなど)は、軽い負荷であれば、非同期イベントベースのサーバ(nginxなど)と同等以上のパフォーマンスを発揮できますが、例えば10'0000の同時リクエストなど重い負荷では、nginxは数メガバイトのRAMしか使いませんが、ApacheはWebサーバだけで(Webアプリケーションは含まず、それよりもはるかに多くのリソースを必要とします)数百メガバイト必要です(全くできないわけではありませんが...)。
そのため、負荷が高い場合、Apacheは非常に多くのRAMを消費し、当然のことながら、パフォーマンスが著しく低下します。
さらに重要なことは、RAMの消費量が多いということは、Apacheがnginxよりも同じハードウェアで処理できるリクエスト数が少ないということであり、つまりApacheは同じユーザー数に対してより多くのハードウェアを必要とするということであり、nginxに比べてApacheのTCO(総所有コスト)が高くなり、ROI(投資対効果)が下がるということです。
X個の同時接続で使用されるメモリの合計(少ないほど良い)
[メモリ使用量][1]です。
1台のハードウェアでX個の同時接続を行った場合、1秒間に処理できるリクエスト数(多ければ多いほど良い)。
ソースはApacheBench、dreamhost.comによるもの。
このデジタルオーシャン]4の記事も参考にしてください。 <br />; どうやら、Apacheで選択するConnection Handling Architectureに依存するようです。
数ヶ月前にApacheからNginx / PHP-FPMに変更しました。
drupalのウェブサイトでいくつかのベンチマークの作成と、いくつかのユースケースのテストを行いました。 VPSサーバーで、1CPU、512Mo RAMを使用しています。
キャッシュのみのDrupal。
Nginx
ab -n 100 -c 30 xxx
Server Software: nginx
Document Path: /
Document Length: 24902 bytes
Concurrency Level: 30
Time taken for tests: 2.775 seconds
Complete requests: 100
Failed requests: 0
Write errors: 0
Total transferred: 2529500 bytes
HTML transferred: 2490200 bytes
Requests per second: 36.04 [#/sec] (mean)
Time per request: 832.394 [ms] (mean)
Time per request: 27.746 [ms] (mean, across all concurrent requests)
Transfer rate: 890.28 [Kbytes/sec] received
httperf --client=0/1 --server=xxx --port=80 --uri=/ --send-buffer=4096 --recv-buffer=16384 --num-conns=100 --num-calls=10
Maximum connect burst length: 1
Total: connections 100 requests 1000 replies 1000 test-duration 48.946 s
Connection rate: 2.0 conn/s (489.5 ms/conn, <=1 concurrent connections)
Connection time [ms]: min 470.6 avg 489.5 max 522.2 median 488.5 stddev 9.5
Connection time [ms]: connect 0.2
Connection length [replies/conn]: 10.000
Request rate: 20.4 req/s (48.9 ms/req)
Request size [B]: 74.0
Reply rate [replies/s]: min 20.0 avg 20.4 max 20.8 stddev 0.2 (9 samples)
Reply time [ms]: response 46.8 transfer 2.1
Reply size [B]: header 450.0 content 24902.0 footer 2.0 (total 25354.0)
Reply status: 1xx=0 2xx=1000 3xx=0 4xx=0 5xx=0
CPU time [s]: user 6.50 system 17.58 (user 13.3% system 35.9% total 49.2%)
Net I/O: 507.3 KB/s (4.2*10^6 bps)
Apache
ab -n 100 -c 30 xxx
Server Software: Apache/2.2.16
Document Path: /
Document Length: 24902 bytes
Concurrency Level: 30
Time taken for tests: 28.364 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 25346000 bytes
HTML transferred: 24902000 bytes
Requests per second: 35.26 [#/sec] (mean)
Time per request: 850.918 [ms] (mean)
Time per request: 28.364 [ms] (mean, across all concurrent requests)
Transfer rate: 872.66 [Kbytes/sec] received
httperf --client=0/1 --server=xxx --port=80 --uri=/ --send-buffer=4096 --recv-buffer=16384 --num-conns=100 --num-calls=10
Maximum connect burst length: 1
Total: connections 100 requests 1000 replies 1000 test-duration 52.261 s
Connection rate: 1.9 conn/s (522.6 ms/conn, <=1 concurrent connections)
Connection time [ms]: min 499.0 avg 522.6 max 591.0 median 518.5 stddev 19.4
Connection time [ms]: connect 0.6
Connection length [replies/conn]: 10.000
Request rate: 19.1 req/s (52.3 ms/req)
Request size [B]: 74.0
Reply rate [replies/s]: min 18.2 avg 19.2 max 19.6 stddev 0.5 (10 samples)
Reply time [ms]: response 46.9 transfer 5.3
Reply size [B]: header 453.0 content 24902.0 footer 2.0 (total 25357.0)
Reply status: 1xx=0 2xx=1000 3xx=0 4xx=0 5xx=0
CPU time [s]: user 6.80 system 18.88 (user 13.0% system 36.1% total 49.1%)
Net I/O: 475.2 KB/s (3.9*10^6 bps)
Errors: total 0 client-timo 0 socket-timo 0 connrefused 0 connreset 0
Errors: fd-unavail 0 addrunavail 0 ftab-full 0 other 0
キャッシュとブーストを使用するDrupal。
Nginx
ab -n 10000 -c 30 xxx
Server Software: nginx
Document Path: /
Document Length: 25002 bytes
Concurrency Level: 30
Time taken for tests: 2.275 seconds
Complete requests: 10000
Failed requests: 0
Write errors: 0
Total transferred: 253780000 bytes
HTML transferred: 250020000 bytes
Requests per second: 4395.52 [#/sec] (mean)
Time per request: 6.825 [ms] (mean)
Time per request: 0.228 [ms] (mean, across all concurrent requests)
Transfer rate: 108934.95 [Kbytes/sec] received
httperf --client=0/1 --server=xxx --port=80 --uri=/ --send-buffer=4096 --recv-buffer=16384 --num-conns=1000 --num-calls=30
Maximum connect burst length: 1
Total: connections 1000 requests 30000 replies 30000 test-duration 5.971 s
Connection rate: 167.5 conn/s (6.0 ms/conn, <=1 concurrent connections)
Connection time [ms]: min 4.2 avg 6.0 max 13.0 median 4.5 stddev 2.6
Connection time [ms]: connect 0.1
Connection length [replies/conn]: 30.000
Request rate: 5024.0 req/s (0.2 ms/req)
Request size [B]: 74.0
Reply rate [replies/s]: min 5017.2 avg 5017.2 max 5017.2 stddev 0.0 (1 samples)
Reply time [ms]: response 0.2 transfer 0.0
Reply size [B]: header 405.0 content 25002.0 footer 0.0 (total 25407.0)
Reply status: 1xx=0 2xx=30000 3xx=0 4xx=0 5xx=0
CPU time [s]: user 0.79 system 2.56 (user 13.2% system 42.9% total 56.1%)
Net I/O: 125016.7 KB/s (1024.1*10^6 bps)
Errors: total 0 client-timo 0 socket-timo 0 connrefused 0 connreset 0
Errors: fd-unavail 0 addrunavail 0 ftab-full 0 other 0
Apache
ab -n 1000 -c 30 xxxx
Server Software: Apache/2.2.16
Document Path: /
Document Length: 25002 bytes
Concurrency Level: 30
Time taken for tests: 0.753 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 25291000 bytes
HTML transferred: 25002000 bytes
Requests per second: 1327.92 [#/sec] (mean)
Time per request: 22.592 [ms] (mean)
Time per request: 0.753 [ms] (mean, across all concurrent requests)
Transfer rate: 32797.26 [Kbytes/sec] received
httperf --client=0/1 --server=xxx --port=80 --uri=/ --send-buffer=4096 --recv-buffer=16384 --num-conns=100 --num-calls=10
Maximum connect burst length: 1
Total: connections 100 requests 1000 replies 1000 test-duration 1.148 s
Connection rate: 87.1 conn/s (11.5 ms/conn, <=1 concurrent connections)
Connection time [ms]: min 6.2 avg 11.5 max 14.1 median 11.5 stddev 1.3
Connection time [ms]: connect 0.1
Connection length [replies/conn]: 10.000
Request rate: 870.8 req/s (1.1 ms/req)
Request size [B]: 74.0
Reply rate [replies/s]: min 0.0 avg 0.0 max 0.0 stddev 0.0 (0 samples)
Reply time [ms]: response 1.1 transfer 0.1
Reply size [B]: header 260.0 content 25002.0 footer 0.0 (total 25262.0)
Reply status: 1xx=0 2xx=1000 3xx=0 4xx=0 5xx=0
CPU time [s]: user 0.13 system 0.57 (user 11.1% system 49.5% total 60.6%)
Net I/O: 21544.9 KB/s (176.5*10^6 bps)
Errors: total 0 client-timo 0 socket-timo 0 connrefused 0 connreset 0
Errors: fd-unavail 0 addrunavail 0 ftab-full 0 other 0
**認証ユーザーのベンチマーク(ページロード)
Nginx
Page load times : 2.85 s
Apache
Page load times : 5.4 s
しかし、Nginxの威力はキャッシュシステムにあります。
**BoostなしのDrupalとキャッシュシステムを有効化したNginxの比較
Server Software: nginx
Document Path: /
Document Length: 24902 bytes
Concurrency Level: 30
Time taken for tests: 2.437 seconds
Complete requests: 10000
Failed requests: 0
Write errors: 0
Total transferred: 252670000 bytes
HTML transferred: 249020000 bytes
Requests per second: 4103.34 [#/sec] (mean)
Time per request: 7.311 [ms] (mean)
Time per request: 0.244 [ms] (mean, across all concurrent requests)
Transfer rate: 101248.99 [Kbytes/sec] received
httperf --client=0/1 --server=xxx --port=80 --uri=/ --send-buffer=4096 --recv-buffer=16384 --num-conns=1000 --num-calls=30
Maximum connect burst length: 1
Total: connections 1000 requests 30000 replies 30000 test-duration 6.044 s
Connection rate: 165.5 conn/s (6.0 ms/conn, <=1 concurrent connections)
Connection time [ms]: min 4.2 avg 6.0 max 11.7 median 4.5 stddev 2.6
Connection time [ms]: connect 0.1
Connection length [replies/conn]: 30.000
Request rate: 4963.7 req/s (0.2 ms/req)
Request size [B]: 74.0
Reply rate [replies/s]: min 4970.1 avg 4970.1 max 4970.1 stddev 0.0 (1 samples)
Reply time [ms]: response 0.2 transfer 0.0
Reply size [B]: header 405.0 content 25002.0 footer 0.0 (total 25407.0)
Reply status: 1xx=0 2xx=30000 3xx=0 4xx=0 5xx=0
CPU time [s]: user 0.72 system 2.68 (user 12.0% system 44.3% total 56.3%)
Net I/O: 123516.8 KB/s (1011.8*10^6 bps)
Errors: total 0 client-timo 0 socket-timo 0 connrefused 0 connreset 0
Errors: fd-unavail 0 addrunavail 0 ftab-full 0 other 0
perusio'の設定]2 Nginx for Drupalを使用する必要があります。
以下は、10のWebサーバー/バリアント(例:. Apache、Nginx、lighttpd、Lightspeed、Hiawatha、Cherokee)。 テストの3つはDrupalに関連しています。
Hiawathaが全体的な最良の選択かもしれないと思います。 完全なDrupal互換性があると見なされ、セキュリティ(DoS、XSS、CSRF、SQLインジェクション防止)、および速度と速度に重点を置いています。 Nginxと同様のフットプリント。
3つのDrupalテストのうち2つでは、HiawathaとNginxの両方がApacheを約150%上回っていますが、Drupal静的テストでは、ApacheがNginxをわずかに上回り、Hiawathaがパックを約10%上回っています。
私はこれらのテストのいずれにも帽子をかけませんが、さまざまな使用状況でのパフォーマンスの球場ビューを提供します。 パフォーマンスだけでは考慮すべきではないと思います。 安定性とセキュリティがより重要な要素である可能性があります。