高效能Web伺服器Nginx的配置與部署研究(13)應用模組之Memcached模組+Proxy_Cache雙層緩衝模式

來源:互聯網
上載者:User

標籤:style   blog   http   color   io   os   ar   使用   sp   

通過《高效能Web伺服器Nginx的配置與部署研究——(11)應用模組之Memcached模組的兩大應用情境》一文,我們知道Nginx從Memcached讀取資料的方式,如果命中,那麼效率是相當高的。那麼:


1. 如果不命中呢?


我們可以到相應的資料服務器上讀取資料,然後將它緩衝到Nginx伺服器上,然後再將該資料返回給用戶端。這樣,對於該資源,只有穿透Memcached的第一次請求是需要到資料服務器讀取的,之後在緩衝到期時間之內的所有請求,都是讀取Nginx本地的。不過Nginx的proxy_cache是本地硬碟緩衝,效率要遠低於Memcached。


2. 應該如何安裝和配置呢?


(1)HttpMemcModule模組

如果使用Nginx的非核心模組——HttpMemcModule模組,則可以下載模組:

http://github.com/agentzh/memc-nginx-module/tags


  1. [email protected]:~$ tar -zxvf agentzh-memc-nginx-module-a0bc33a.tar.gz  
  2. [email protected]:~$ tar -zxvf nginx-1.1.12.tar.gz  
  3. [email protected]:~$ cd nginx-1.1.12  
  4. [email protected]:~$ ./configure --add-module=/home/michael/agentzh-memc-nginx-module-a0bc33a  
  5. [email protected]:~$ sudo make  
  6. [email protected]:~$ sudo make install  


目前驗證發現Nginx 1.0.10版本 Nginx的1.1.3及其之前的版本,需要額外通過--add-module來載入upstream-keepalive模組,請自行google之。其他版本還不確定,猜測是在1.1  從nginx的1.1.4及其之後的版本開始,自動攜帶upstream-keeplive模組的。 (感謝agentzh的提示)


然後我們來編輯設定檔吧。如下:

  1. http {  
  2.     ...  
  3.     upstream data_server {  
  4.         server  192.168.0.133:1234;  
  5.         server  192.168.0.134:1234;  
  6.         server  192.168.0.135:1234;  
  7.         ip_hash;  
  8.     }  
  9.   
  10.     upstream memc_backend {  
  11.         server  127.0.0.1:11211;  
  12.     }  
  13.     ...  
  14.     server {  
  15.   
  16.         listen      8080;  
  17.         server_name localhost;  
  18.   
  19.         default_type    text/html;  
  20.   
  21.         location / {  
  22.             set     $memc_cmd   get;  
  23.             set     $memc_key   $uri;  
  24.             memc_pass   memc_backend;  
  25.   
  26.             error_page  404 @fallback;  
  27.         }  
  28.   
  29.         location @fallback {  
  30.   
  31.             internal;  
  32.   
  33.             proxy_pass      http://data_server;  
  34.   
  35.             proxy_cache     cache_one;  
  36.             proxy_cache_valid   200 302 1h;  
  37.             proxy_cache_valid   301 1d;  
  38.             proxy_cache_valid   any 1m;  
  39.             expires         30d;  
  40.         }  
  41.     }  
  42.     ...  
  43. }  


從上面的設定檔我們可以看出,一個請求到達後,會其uri作為key去Memcached伺服器127.0.0.1:11211上尋找value,如果沒有命中,則返回404。這時通過error_page將404接收轉到@fallback,然後去data_server中取檔案,取完後將該檔案在本地磁碟緩衝,同時使用者的瀏覽器也通過expires設定緩衝時間。


這樣絕大多數請求如果被第一層Memcached的記憶體緩衝攔截的話,剩餘的請求可以通過訪問第二層Nginx伺服器的硬碟快取檔案,來減少穿透。


按照上面的方式,用戶端得到的請求響應中雖然包含了正確的檔案內容,但狀態代碼都是404(可以通過Fiddler來觀察)。這似乎會引起問題。什麼問題呢?絕大多數瀏覽器,即使在404的情況下,也會嘗試去讀取內容,如果有正確的內容,是可以正確顯示的。但是比較常見的可能引起問題的兩種情況是:

(a)、搜尋引擎的spider爬到的404時,一般不會收錄該URL,我想這不是你所希望看到的;

(b)、Flash等方式載入時,如果頭是404,可能不予顯示,我想著也不是你所希望看到的。


(轉載請註明來自Poechant的CSDN部落格:http://blog.csdn.net/poechant/article/details/7179891)


那我們把它改成都是200,是不是很好呢?

  1. error_page  404 =200 @fallback;  


非也,這樣404傳遞到fallback處理請求後的狀態如果不是200,就很不一致了,會引起更多問題。所以應該如下配置:

  1. error_page  404 = @fallback;  


這樣fallback的處理結果狀態是什麼,就用什麼替換404。


(2)Nginx內部的Memcached模組

如果你想使用Nginx內部的Memcached模組,設定檔可以結合參考上面的樣本和《高效能Web伺服器Nginx的配置與部署研究——(11)應用模組之Memcached模組的兩大應用情境》

高效能Web伺服器Nginx的配置與部署研究(13)應用模組之Memcached模組+Proxy_Cache雙層緩衝模式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.