Nginxをより高速に使うキャッシュ機能には、2種類ある。
・proxy cache
・fastcgi cache
この2つキャッシュの機能のうち、Nginxでリバースプロキシを設定する、といった記事で紹介されるのはproxy cacheの方だ。
なので、リバースプロキシ=proxy cacheだと思ってた。
じゃあ、fastcgi cacheはリバースプロキシではないの?
1. リバースプロキシとは
リバースプロキシとは何か。
以下の2つの記事を読む。
Reverse Proxy がなぜ必要か – naoyaのはてなダイアリー
Reverse Proxyがなぜ必要か、勝手に補遺 – たごもりすメモ
最初の記事でリバースプロキシは
「全体のリソース効率を上げましょう」というためのもの
と紹介されている。
ここでいうリソースは、サーバのCPUやメモリなんかのこと。
このサーバ(さくらVPS1G)の場合は、CPUは2コア、メモリは1Gである。
では、リソース効率を上げるとはなにか?
このCPU2コアとメモリ1Gを、どのように有効に使うかということだ。
リバースプロキシでリソース効率を上げるには、以下のことを行う。
- フロントエンドで捌けるものはフロントエンドで処理する
- バックエンドでしか捌けないものはバックエンドで処理する
このフロントエンドがリバースプロキシとなる。
リバースプロキシの機能は主に2つ。
- 静的ファイルへのリクエストを処理する
- 動的ファイルへのリクエストをバックエンドへ送る
静的ファイルには、CSSやJavaScript、画像などになる。
動的ファイルは、アプリケーションなどスクリプト言語で作られたファイルなど。
このような2段階で処理を行う理由は、バックエンドのアプリケーションサーバがメモリを大量に消費するためである。
そのため、バックエンドが静的ファイル・動的ファイル両方を処理するよりも、フロントエンドが静的ファイルを、バックエンドが動的ファイルを処理するほうが効率が良くなる。
また、2つ目の記事では、リソース効率向上について複合的な視点で取り上げられている。
・通常時のトラフィック配信におけるCPU・メモリ使用率を最適化する
・バースト時(過負荷時)のトラフィックをより細かく制御可能とする
・障害時におけるダウンタイムおよび総合的な計算・配信能力の低下を極小化する
・多数のサーバによる構成全体を増強・入れ替え・移動あるいは削減する際の自由度の向上を狙う
fastcgi cache=リバースプロキシとするためには、この辺がキモになってくる。
2. fastcgi cacheとは
リバースプロキシの意味や役割はぼんやりとだがわかった。
では、fastcgi cacheとはなにか。
proxy cacheと対比させながら考える。
なにわともあれ、下記2つのサイトの図が、とても参考になる。
ただ、1つ目のサイトと2つ目のサイトの図は違うので注意。
Nginxを使ったもう一歩進んだWordPressチューニング | cloudrop
Nginx のFastCGIキャッシュ(fastcgi cache )を使ってみた
1つ目の図はwebサーバを除いているの対し、2つ目の図はproxyサーバを除いている。
とりあえず、1つ目のサイトを参考とする。
fastcgi cacheとは、バックエンドのFastCGIレスポンスをキャッシュする機能。
一方、proxy cacheは、バックエンドからのレスポンスがどんなアプリケーションのものでも問わずキャッシュする機能。
つまり、両者の違いは受け付けるレスポンスの違いだけである(多分)。
fastcgi cacheはFastCGIに絞ったキャッシュ機能であり、proxy cacheはより汎用的なキャッシュ機能であるということ。
fastcgi cacheはFastCGIのみに絞ることで、バックエンド部分にWebサーバを置かなくて良くなる。
つまり、バックエンドは完全にFastCGIのみしか必要とせず、より高速・軽量なキャッシュ機能を提供できるということになる。
3. 結論
fastcgi cacheもリバースプロキシだと言ってしまってもいいような気がする。
リバースプロキシの目的の「全体のリソース効率を上げる」には適っているし、proxy cacheとの主な違いもキャッシュ対象のみだ(多分)。
が、Nginx のFastCGIキャッシュ(fastcgi cache )を使ってみたでは、proxyサーバがなくなったことで、サーバの分散化は図れていないとも書かれていた。
fastcgi cacheは、バックエンドのwebサーバをなくすのか、proxyサーバをなくすのかも自身がない。
自分はwebサーバをなくしていると思っているのだけど・・・
サーバの分散化は、リバースプロキシの目的の一つであるサーバの増強・入れ替え・移動・削減などに寄与するのだろう。
その場合、fastcgi cacheはリバースプロキシでないということになる。
結論が出ない。。。
ので、無理やり結論。
fastcgi cacheはリバースプロキシだということにする。
知っている人いたらご連絡くださいm(__)m
とりあえず当ブログサーバはfastcgi cacheを使うよー
コメント