web-dev-qa-db-ja.com

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

私が作業しているWebサイトは、起動後すぐに大量のヒット率になると言われています。クライアントは、1日程度で毎秒約2500ヒットの可能性について話している。

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

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

52

マークドリソンの答えは、基本的にこの問題を攻撃するための受け入れられた方法です。もう少し詳しく説明します。

Pressflow for D6またはDrupal for D7、Memcached and Varnish がすべてうまく機能している場合、カスタムコードを作成する必要があります- [〜#〜] vcl [〜#〜] ファイル開始点となる無料のファイルがありますが、常にそれらを使用する必要があります。

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

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

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

「パフォーマンス」のキャッシングを外部に構成し、ワニスなどのキャッシングプロキシに正しいヘッダーを送信する最大経過時間を設定します。

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

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

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

他の基本には、PHPで [〜#〜] apc [〜#〜] を含めることが含まれます。 mod_phpではなく高速CGIを使用する場合は、適切なラッパースクリプトを構成して、APCキャッシュをphpインスタンス間で共有するようにしてください。また、APCキャッシュがメモリマップファイルにあることを確認して、PHPから最後のビットをすべて取り出します。

45

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

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

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

22
markdorison

1日あたり1秒あたり2500ヒット。「ヒット」とは、「ページ配信」を意味する場合、1日2億1,600万ページになります。これをお話ししましょう。1日に2億1600万ページはありません。私はこれらのクライアントを愛しています...

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

15
user49
  • サーバー側

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

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

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

また、このララボットポッドキャストを聞いて、Grammys.comのWebサイトが1週間で爆発的に増加した様子を紹介しました。それはかなり教育的な説明でした。

http://www.lullabot.com/podcasts/podcast-92-grammycom

5
Randy Burgess

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

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

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

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

ここにいくつかの提案があります:

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

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

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

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

3
kenorb

パターンを予測することは非常に困難ですが、トラフィックレベルを適切に把握している場合。ソリューションの負荷テストを行います。さまざまなオプションのホストがあり、ライブトラフィックが発生するまで多くのことを予測することはできませんが、少なくとも負荷テストを可能な限り行うと、セットアップがトラフィックを処理できるというかなりの自信があります。

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

これは、DC SFでエコノミストがどのように行ったかについてのプレゼンテーションでした。 http://sf2010.drupal.org/conference/sessions/performance-testing-economist-online- using-grinder

3
Jeremy French

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

0
James Stallings

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

  • Zend OPcache
  • wincache

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

twig Microsoft AzureのZend OPcacheおよびWincacheを探している場合は、最初に「D:\home\site\」の下に「ini」というフォルダ名を作成します。また、 「.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

また、keyPHP_INI_SCAN_DIRおよびvalued:\home\site\iniを使用して、アプリ設定をWebアプリに追加します。

PHP_INI_SYSTEMを変更した後、Webアプリを再起動します。設定の切り替えについて詳しく知りたい場合は、 Microsoftのドキュメント を確認してください。

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

0
npcoder