Drupalでのキャッシングの別の見方

最近、Habrで「 Drupalのキャッシュ 」というタイトルの記事が公開されました。 トピックに関するいくつかの考えを追加したいと思います。



Drupalがリソースに飢えているのは秘密ではありません。キャッシングが頭に浮かぶことはほとんど最初です。 私たちのサイトの一般的なキャッシュスキームがどのように構築されているかを説明します。



防衛の最前線-私たちはCDN(Content Delivery Network)を使用します。この場合はAKAMAIです。 AKAMAIはすべてをキャッシュするように構成されています。 画像、CSS、JavaScript、すべてのGETリクエストへの回答。これらはすべて、ユーザーが匿名か登録済みかに関係なくキャッシュされます。 キャッシュ間隔は、ページでは1〜5分、CSSとJavaScriptでは45分、その他のリソースでは1時間です。 この分散により、サーバーの負荷を大幅に削減できます。



CDNの経験がない人のための叙情的な余談。 大まかに言えば、サイトアドレスに対するすべての要求は、CDNサーバーに送信されます。要求されたページがCDNキャッシュに存在する場合、応答はCDNサーバーから要求元のクライアントに直ちに送信されます。 リソースがまだCDNにキャッシュされていない場合、またはキャッシュの有効期限が切れている場合、CDNはサーバーにリクエストを送信し、レスポンスをキャッシュして、ユーザーに発行します。 このようなスキームに関連して、いくつかの問題が発生しますが、それらは非常に簡単に解決されます。
  1. フォーム(コメントフォームなど)をキャッシュする方法は?
  2. コメントをキャッシュする方法は?
  3. コンテンツを編集するには?


問題を順番に検討してください。 問題の1つは、Drupalでは、Drupalがセキュリティ目的で使用するフォームトークンがフォームに提供されることです。 この問題は、2つの方法で解決されます。より安全(ただし、サーバーの負荷が増加する)と、よりキャッシュされた方法です。 ページが表示された後、フォーム自体のAJAXリクエストはより安全です。 秘Theは、CDNがサーバーからページを提供することですが、AJAXリクエスト(POSTである必要があり、GETがキャッシュされる)はサーバー上にフォームを生成し、JSを使用して適切な場所に入力します。 Drupalがフォームを生成し、トークンの正しい値を知っているため、フォームトークンの問題は解決されました。 このアプローチにより、サーバーへのリクエストが1つになることが保証されます。 原則として、それは恐ろしいことではありませんが、この単一の要求でさえ生命を大きく損なう場合はどうすればよいでしょうか? 答えは、通常のunset'omでフォームトークンを削除するだけで、セキュリティを犠牲にすることです。 これで、CDNのページと共にフォームをキャッシュできます。 2番目の方法を実行する前に、慎重に計量してください。この1つの要求、またはその不在により、あなたの生活が楽になることを思い出してください。 この1つのリクエストがあなたを欺くことができる状況の例-あなたのサイトはyahoo.comの最初のページにあり、あなたの素材に戻る直接リンクがあります(数時間で20,000人以上のユーザーが同時にあなたのサイトにいます)。 ところで、この方法は必要に応じて使用できますが、「永続的なソリューション」にする必要はまったくありません。



問題点2は、「ここにコメントを残しました、どこにありますか!」のような内容の手紙を書くwill慢なユーザーがコメントキャッシングにあふれていることです。 解決策は2つあります。ページが読み込まれるたびに新しいコメントを要求するAJAX要求、またはコメント付きでユーザーをページに戻すアドレスにキャッシュバスターパラメーターを追加します( www.spin.com/articles/premiere-crystal-method- remix-daft-punks-tron?cb = cdninvalidate#comment-85251 )。 cb = cdninvalidateパラメーターはCDNで構成され、CDNにページキャッシュ時間が経過したことを知らせます。 したがって、コメントを残したユーザーは、他のすべてのユーザーのキャッシュを更新します(結局、CDNはサーバーに要求を送信し、新しいコメントで新しいバージョンをキャッシュします)。



3番目の問題は非常に簡単に解決されます。たとえば、CDNによってキャッシュされないedit.mysite.comのように、編集スタッフに別のサブドメインが割り当てられます。



CDNは万能薬ではありません。キャッシングの次の段階は、サーバーでのキャッシングです。 事実は、CDNがサーバーの負荷を大幅に削減するという事実にもかかわらず、1回限りの訪問者の流入がありますが、1つのCDN'aでは十分ではありません。 Memcache、APCがサーバーにインストールされ、ネイティブDrupalキャッシングが有効になっています。 キャッシュのブロックには特に注意が必要です。これにより、サーバーの作業がさらに容易になります。



上記のすべてに加えて、単純なことを忘れないでください。



-サーバーへのリクエストの数を最小限に抑えるようにしてください。

-可能であれば、CSSスプライトの画像を結合します。

-コード内のJavaScriptの場所を考慮してください。

-広告、およびサードパーティのサーバーからの応答を必要とするその他のものは、AJAXまたはiFrameでカプセル化します。

-php-fpmなど、PHPに余分なメモリを供給しないでください。

-MySQLログを追跡し、長時間実行されるクエリを最適化します。

-サイトの負荷が高いときに2つのデータベースから読み取ることを検討してください。



キャッシングとDrupalの速度に関する今日のトピックに追加したかったのはおそらくこれだけです。 よろしくお願いします!



All Articles