まず、通常の Web システムで実行される 2 つの異なるタイプのキャッシング、HTTP キャッシングとサーバー側キャッシングを区別する必要があります。
HTTPキャッシングは、特に指摘したように、HTTPヘッダーETag
とさまざまな有効期限メカニズム(Expires
およびのさまざまな側面を含むCache-Control
)によって制御されます。これはすべてRFC 2616 (HTTP) のセクション 13でカバーされており、オリジン サーバーに戻ることなく、 HTTPキャッシュがクライアントからの HTTP 要求に対する応答を返すことができます。. 実際には、HTTP キャッシング メカニズムにより、クライアントとサーバーの間の別のマシンが、場合によってはサーバーであるかのように動作することができます。すぐにわかるように、これは実際にワニスが行っていることです。多くの人がよく知っているもう 1 つの一般的な使用法は、ISP がネットワーク内に HTTP キャッシュを提供する場合です。これは一般に、ネットワーク外のオリジン サーバーよりも加入者に高速に応答できます (したがって、知覚されるパフォーマンスが向上します)。
サーバー側キャッシングには、データベース キャッシング、フラグメントおよびページ キャッシングが含まれます。これらはすべて、Web サーバーがコストのかかる操作 (データベース クエリやテンプレートの特定の部分のレンダリングなど) を一度実行することで回避する方法にすぎません。結果をしばらくキャッシュに保持します。
前に、ワニスは HTTP キャッシュであると言いました。つまり、静的ファイルを提供する Web サーバーよりもすぐに効率的になります。Web サーバーが何をしなければならないかを考えてみましょう。
- HTTP リクエストを解析する
- URI (および などの関連する要求ヘッダー
Accept-Encoding
) をファイルにマップする
- ファイルに関する情報を取得して、応答で HTTP ヘッダーを作成します。これらはエンティティ ヘッダーとして知られています( RFC 2616 セクション 7.1。HTTP キャッシングで使用される、 および
Content-Length
ヘッダーContent-Type
などを含みます)。Expires
Last-Modified
- 追加の応答ヘッダー( RFC 2616 セクション 6.2。これらには、 HTTP キャッシュの重要な部分である と が含まれます) と
ETag
一般的なヘッダー フィールド( RFC 2616 セクション 4.5 ) が必要かどうかを判断します。Vary
- HTTP ステータス行とヘッダーをネットワークに書き出す
- ファイルの内容をネットワークに書き出す
比較すると、ワニスはこれらすべての上流にあるため、次のことだけを行う必要があります。
- HTTP リクエストを解析する
- 内部キャッシュ内のエントリに URI (および関連する要求ヘッダー) をマップする
- エントリがあるかどうかを確認します。存在する場合は、ネットワークに書き込みます。HTTP ヘッダーはキャッシュに保存されます
エントリがない場合、ワニスはもう少し作業を行う必要があります。
- その背後にある Web サーバーに接続し、最初のリストのすべての手順 1 ~ 6 を実行して応答を生成します。
- すべての HTTP ヘッダーを含めて、ネットワークへの応答を書き込みます
- レスポンスをキャッシュに保存する
特に、HTTP ヘッダーとエンティティ ボディ (応答全体) は varnish によってキャッシュできるため、キャッシュからサービスを提供できれば、実行する作業が少なくなります。サーバーで応答を動的に生成し始めると、違いがさらに顕著になる可能性があります。たとえば、生成に 5 秒かかるページがあるとしますが、サイトにアクセスするすべての人にとって同じであるとします。キャッシュからのほとんどのミリ秒 (さらに、ネットワークを介して HTTP クライアントへの応答を取得するのにかかる時間)、きちんとしたメカニズム (猶予期間) があるため、バックエンド サーバーに 1 回アクセスして更新している間も処理を続けることができます。ページのキャッシュされたバージョン。
もちろん、サーバー側のキャッシュを導入して、Web サーバーがリクエストを処理する速度を向上させることはできますが、応答がある場合は、ニスにキャッシュすることができます。(特に Cookie を使用している場合や、閲覧しているユーザーに応じて変化するページがある場合は、varnish にキャッシュするのが難しいさまざまなものがあります。これらの場合でも、本当に信じられないほどの必要がない限り、varnish を使用し続けることは可能ですが、私の知る限り、ほとんどの人はワニスを使用する前に、サーバー側のキャッシュやその他の手法を使用してこれらのケースの最適化を開始しています。)
(varnish はヘッダーを編集することもでき、実際にはキャッシュに出入りするデータも編集できることに注意してください。これは物事を複雑にします.