サーバーとしてapachehttpdを使用し、バックエンドとしてmysqlを使用するWebサイトがあります。リクエスト数が原因でサーバーがクラッシュするほど人気が高まっている「今日の想い」を公開しています。同じページが要求されているので(考えは1日に1回だけ変更されます)、メインサーバーの前にキャッシングサーバーを配置して、異なるクライアントから同じ要求が行われたときにキャッシングサーバーがページを返すようにすることは可能ですか?データベースに行かなくても?
8 に答える
変化の遅いページの場合、キャッシュは確実に CPU 使用率を削減します。しかし、ページが 1 日に 1 回変更され、完全に予測可能な極端なケースでは、シンプルで高速な静的ファイル サーバー ( lighthttp、nginxなど) と cron ジョブを使用して「考えを変更する」方がはるかに簡単です。その日」毎晩。
実際、多くの非対話型 Web ページはこの方法で実行できます。データベースまたはその他のソースから定期的に html ファイルを再構築し、シンプルで高速な静的 Web サーバーを使用します。
絶対。これにうまく機能する製品はたくさんあります。Apache自体はこのように機能するように構成できますが、LinuxまたはUNIXを使用している場合は、Squidがまさにこの仕事をするように特別に設計されているため、より優れたオプションです。
Windowsでは、MSは常にこの機能を実行するキャッシュ/プロキシ製品を提供してきました。現在、これはISA Server 2006です。ただし、このタイプのアプリケーションではこれは劇的にやり過ぎです。
イカがお勧めです。
はい。あなたはリバースプロキシ(または同じことの不正確な用語である「httpアクセラレータ」)について話している。これは非常に効率的であり、非常に多くの高スループットサイトがこの手法を使用しています。
正しく理解するための重要な要素は、キャッシング関連のHTTPヘッダーです。したがって、HTTP RFCを読むことを強くお勧めします(実際に行うことができます)。ヘッダーを正しく取得しないと、ほとんど効果がないか、セキュリティ上の問題が発生する可能性があります(パーソナライズされたページがキャッシュされて間違った人に表示された場合)。
また、最高のキャッシュ効果を得るには、ページをパーツに分割する必要がある場合があります。例:ページの隅に現在のサーバー時間を秒単位で表示する時計を配置する必要がある場合、ページ全体が1秒間だけキャッシュ可能になります。したがって、1)愚かな時計をドロップするか、2)クライアント側のスクリプトによって生成されるようにします-または3)クライアント側のスクリプトにページの特定の部分を特別なURLからプルさせ、小さな常に変化するものだけを出力します、キャッシュ不可能なHTMLフラグメント。
私はかつて、大規模なWebサイトのリバースプロキシとしてSquidを使用しました。今日、もう一度やるなら、ワニスを試してみます。
最も単純で、最も堅牢で、保守が容易な Javier のソリューションを強くお勧めします。適切な Expires ヘッダーを 24 時間後に送信し、ETag を適切に設定することを忘れないでください。
「その日の考え」ページが1日1回を除いて変更されない場合は、おそらく1日1回そのようなものを起動するのが簡単です。
wget http://your_site/your_page.php -O /var/www/your_site_directory/your_page.html
(そして、このページへのリンクをyour_page.phpからyour_page.htmlに変更します)
次に、ApacheサーバーとSQLサーバーの負荷を軽減します...
私はハビエルの提案(静的なWebページを生成する)にこれ以上同意できませんでした。少し明確にするために、1つのコメントを追加したいと思います。
静的ファイルは、「。php」やDBからデータをプルするために使用される言語ではなく、「。html」として保存します。静的ファイルの使用は、パーサーまたは実行可能ファイルを起動するよりもはるかに高速です。静的ファイル(HTML、GIFなど)は、スクリプト、CGI、およびその他すべてのものが開始、解析、実行される間、ネットワークに渡されるだけです...これには、実際の静的ファイルよりもはるかに多くのサーバーリソースが必要になります。
静的ファイルには、オーバーヘッドとしてI/Oがあります。メモリにキャッシュされたオブジェクトは素晴らしいですが、それでもそれらのオブジェクトを管理するオーバーヘッドがあり、頻繁に使用すると、これは注意が必要になります。したがって、静的ファイルの使いやすさと美しさ。
もう1つの利点は、Webサーバースレッドの一部ではないプロセスに更新とメンテナンスを実行させることができることです。サービスロックを更新しても、Webサーバーはロックされません。
memcachedを試すこともできます。それは私の会社が使用しているものであり、LiveJournalもそれを使用していると思います。DBリクエストをキャッシュし、DBアクセスに深刻な打撃を与えます。