パフォーマンスのスケーリングとチューニングに関する実世界の経験


54

私が働いているウェブサイトはローンチ直後に大ヒット率を持つと言われています。クライアントは、1日あたり1秒あたり約2500ヒットの可能性について話しています。

このヒット率はおそらく野生のクライアントの楽観的であり、可能な限り最大のサーバーを取得することは別として、Drupalが大きなヒット率をサポートするように構成する最良の方法は何であるかという事実を無視します。

Drupal.orgインフラストラクチャのスケーリング、DrupalパフォーマンスのブログDrupalのスケーリングのベストプラクティスなどの多くのページを読みましたが、私が探しているのは、これを行う実際の経験、何が機能するか、何が機能しないか、何をするかです期待する。

回答:


47

Markdorisonの答えは、基本的にこの問題を攻撃するために受け入れられている方法です。それをもう少し詳しく見ていきます。

D6のPressflowまたはD7のDrupal、Memcached、およびVarnishがすべて正常に機能する場合、VCLファイルをカスタムコード化する必要があります。出発点を作る無料のものがありますが、それらを常にプレイする必要があります。

Varnishを最適に動作させるには、デフォルトの-s file / path / to / fileではなく-s malloc xGで起動するようにしてください。また、Varnishを使用すると、できる限りニスの静的アイテムをキャッシュできます。

複数のWebサーバーがある場合は、VCLでVarnishに送信されたヘッダーからETagを削除します。Expiresも削除し、ヘッダーのAgeとmax-ageに単純に依存するため、ブラウザーをサイトに戻します。

バージョン1.5(2011年3月3日現在)は、Drupal.orgのMemcachedモジュールの最速バージョンです。私は通常、サーバーごとに単一のビンを使用して展開し、大規模な複数のビンへの接続のTCPトラフィックを低減します)

「パフォーマンス」のキャッシュを外部に設定し、Varnishなどのキャッシュプロキシに正しいヘッダーを送信する最大期間を設定します。

特定のページをVarnishで適切にキャッシュできない場合は、Web上のブログ投稿でリクエストの検査方法を詳しく調べてください。ここに私がしばらく前に書いた例の投稿があります:VarnishとDrupal Pressflowが匿名ユーザーのページビューをキャッシュするのを止めているもの

MySQLのInnoDB(またはXtraDBなどの他のプロバイダーの別の名前)を選択し、すべてのテーブルをそこに移動する必要があります。次に、このブログ投稿で基本的なチューニングのアドバイスを確認してくださいhttp://www.mysqlperformanceblog.com/2007/11/01/innodb-performance-optimization-basics/

大きなバッファプールを持つことは基本的に重要です。サイトの負荷テスト時に、スロークエリログをオンにします。おそらく、最初に50ミリ秒以上かかるクエリをキャプチャしてからクエリを調整し、インデックスを使用してほとんどのクエリを実行し、かなり迅速に実行するまで、低速のログキャプチャ時間を繰り返し減らします。

他の基本事項には、APCをPHPに含めることが含まれます。mod_phpではなく高速のCGIを使用する場合は、適切なラッパースクリプトを設定して、PHPインスタンス間でAPCキャッシュを共有するために時間を費やしてください。また、APCキャッシュがメモリマップファイル内にあり、PHPの最後のビットをすべて圧縮していることを確認してください。


「mod_phpではなく高速CGIを使用する場合は、適切なラッパースクリプトを構成することにより、PHPインスタンス間でAPCキャッシュを共有するために時間を費やす必要があります。また、APCキャッシュは、 PHPから。」:わかりました、どのように行われますか?ありがとう
ジョン

1
メモリマップされたapcの場合、コンパイルフラグに依存します... php.net/manual/en/apc.configuration.php
スチュワートロビンソン

23

Pressflow(Drupal 6を使用している場合)、MemcacheVarnish、およびAkamaiなどの何らかの形式のコンテンツ配信ネットワーク(CDN)から始めることをお勧めします。最終的な結果は、実際にオリジンサーバーにアクセスするユーザーができるだけ少なくなるはずです。

非匿名ユーザー(そのユーザーに固有のもの、「Welcome userX」など)に対してキャッシュできないページの部分がある場合は、非同期などのページのこれらの部分を設定するオプションを調べることができますコールバックまたはエッジサイドインクルード。

サイトのキャッシュされていないバージョンを表示できるようにする必要がある内部ユーザーの小さなグループ(エディターのグループなど)がある場合、サイトのキャッシュされていないバージョンを別のURL(VPNの背後で保護)で公開することをお勧めしますまたは可能であれば同等)。


リチャード:私の喜び。フォローアップの質問があれば教えてください。
-markdorison

16

1日に1秒あたり2500ヒット。「ヒット」で「ページ配信」を意味する場合、それは1日あたり2億1,600万ページです。これを教えてください:1日あたり2億1600万ページはありません。私はこれらのクライアントが大好きです...

とはいえ、生の交通データは何も言っていません。このスレッドのアドバイスは、トラフィックが匿名の場合のみ、Vannish / CDNについては適切ですが、トラフィックにログインしている場合は、課題に直面しています。しかし、問題を解決するために時間と労力のとんでもない金額を費やす前に、あなたは確認して持っている問題を。1秒あたり2500ヒット、ビングはそれよりも少なくなります。


2
2500 /秒は、私たち全員が気まぐれな推測として認識したものに基づいたクライアントの数値でした。それが私が続けなければならなかったすべてです。ローンチは、彼らが計画した(期待した)ほど成功していなかったことがわかり、奇妙なことに、実際のレートは約10分間、1秒あたり20(ページ)でピークに達しました-主に匿名で、毎日の平均は7.32ページ/秒.....
リチャード・ハリソン

7
  • サーバ側

    • 匿名ユーザーのページをキャッシュするためのVarnishをインストールします。
    • 永続キャッシュシステム(Memcached、APC、Memcache)をインストールします。
    • AkamaiなどのCDNを使用して、静的ファイル(JavaScript、CSS、画像)を提供します。
  • コード側

    • Pressflowを使用すると、Varnishはキャッシュされたページを匿名ユーザーに提供できます。
    • Drupalのウォッチドッグテーブルをきれいにします。ウォッチドッグエラーが記録されるたびに、WebサーバーおよびデータベースサーバーのCPUリソースが消費されます。また、ロード時間が大幅に増加します。
    • スロークエリログがクリーンになるまで、静的で永続的なキャッシュ戦略を実装します
    • ネストされたforeachループ内で発生するPHPエラーは、どうしても避けてください。
    • 未使用のモジュールをアンインストールします。
    • Drupalコアブロックとビューのキャッシュをオンにします。
  • データベース

    • 検索を高速化するために、テーブルのインデックスが適切に作成されていることを確認してください。
    • 不要なレコードを保存しないでください。100ノードのデータベースは、300万ノードのデータベースよりも常に高速でアクセスされます。


4

パターンを予測することは非常に困難ですが、トラフィックレベルの公平な考えがあれば。ソリューションをロードテストします。さまざまなオプションがあり、ライブトラフィックが発生するまで予測することはできませんが、少なくとも可能な限り負荷テストを行うと、セットアップがトラフィックを処理できるというかなりの自信が得られます。

最初にテストしないと、世界中のすべてのチューニングは役に立ちません。

これは、DC SFでのエコノミストのやり方に関するプレゼンテーションでした。 http://sf2010.drupal.org/conference/sessions/performance-testing-economist-online-using-grinder


プレゼンテーションへのリンクは、非常に便利です。ありがとう
リチャード・ハリソン

4

トラフィックの多いWebサイトの場合は、複数のサーバーとロードバランサーを使用するか、単にCDNを使用する必要があります。また、Webサーバーの負荷を最小限に抑えるために、可能な限りキャッシュすることが非常に重要です。

コンテンツ配信ネットワーク(CDN)を使用すると、リソースを複数のドメインに分散し(ドメインシャーディング)、Webサーバーの負荷を軽減できます。

CDNの使用は、分散キャッシングとリモートアクセラレーションに役立ち、複数のエンドポイントがあるため、DDoS攻撃を軽減するのにも役立ちます。キャッシュされたコンテンツはより悪用されにくいため、セキュリティに役立ちます。

プロバイダーの例:FastlyRackspaceAkamai、Azure、CloudFlare、Amazon、MaxCDN、Verizon。

以下にいくつかの提案を示します。

  • CDNでは、静的コンポーネントをキャッシュするためにcookielessドメインを使用します(sstatic.netなど)。一部のプロキシは、Cookieで要求されたコンポーネントのキャッシュを拒否する可能性があるためです。
  • キャッシュをクリアした後、キャッシュをウォームアップします(wget、Cache WarmerDrush ECLを使用)。
  • パフォーマンス監視を使用します(たとえば、Drupalに統合されたNew RelicまたはYottaa)。
  • Webサイトに監視ツールを使用します(例:Nagios)。
  • VarnishおよびVarnish HTTP Accelerator Integrationモジュールをインストールしてから、構成します。
  • Varnish + Authcache:Authcache Varnish構成ファイルのこのVCLの例を確認してください。
  • ワニスの前でポンドまたはNGINXを検討してください。参照:なぜポンドはワニスの前で素晴らしいです
  • NGINXは、リバースプロキシおよびロードバランサーとして機能できるため、PoundおよびVarnishを置き換えることができます。
  • 「コミュニティ」オープンソースバージョンでは利用できない機能を利用するために、ワニスまたはNGINXの商用バージョンを検討してください。
  • ハードウェアロードバランサー/キャッシングを検討して、ワニスとポンドを置き換えます(例:BIG-IP F5)。
  • abJMeter for TTFBなどのツールを使用して、Webアプリケーションで負荷テストとストレステストを行います。

したがって、ユーザーの観点から見たWebアーキテクチャは次のようになります。

  1. ユーザー(ローカルブラウザキャッシュ)。
  2. NGINXまたはPound + Varnish(ロードバランサー、HTTPアクセラレータとしてのリバースプロキシ)。
  3. Apache(Webサーバー)。
  4. PHP-FPM(PHP FastCGI Process Manager)。
  5. MariaDB(データベース)。

Drupalの最適化の提案については、次を確認してください。Drupalのパフォーマンスをどのように改善しますか?


1

2つの拡張機能を有効にします。

  • Zend OPcache
  • wincache

パフォーマンスが向上します。

Microsoft AzureでZend OPcacheとWincacheを調整する場合は、最初に「ini」の下にフォルダー名を作成しますD:\home\site\。また、「.user.ini」と「settings.ini」の2つのファイルを作成します

各ファイルに次の構成を追加します。

.user.ini

[PHP]
post_max_size = 32M
memory_limit = 512M
zend.enable_gc = On
upload_max_filesize = 32M
opcache.enable=1

setting.ini

wincache.ocenabled = 1
wincache.ocachesize = 255

また、キー PHP_INI_SCAN_DIRを使用してWebアプリにアプリ設定を追加します d:\home\site\ini

PHP_INI_SYSTEMを変更したら、Webアプリを再起動します。構成の調整について詳しく知りたい場合は、Microsoftのドキュメントを参照してください。

上記の設定後、Drupal(Drupal 8.3)サイトは3秒以内にロードされます。


0

DNSベースまたはソフトウェア/ハードウェアの負荷分散ソリューションを活用して、複数のサーバーに負荷を再分散することも検討できます。これにより、フォールトトレランスも強化されます。


これを達成する方法を扱っていないため、それは良い答えではありません。OQで述べたように、私が望んでいるのはスケーリングの実世界の経験です。
リチャードハリソン

仕事でdrupalを実行できると判断した場合は、ハードウェアと構成の概要を示す5ページ以上のブログ投稿を提供します。
ジェームス・スタリング

優れた。役に立つリファレンスになるかもしれません。とにかく投稿してください...
リチャードハリソン

アウトラインを再投稿する許可を得ましたか?
リチャードハリソン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.