成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

ASP.NET性能優化之反向代理緩存

開發 后端
今天我們將要講到的是大型站點的一種常用做法,將緩存部署在反向代理服務器上,這類緩存我們通常稱之為反向代理緩存。

  到目前為止,我們討論了把緩存存放在ASP.NET的輸出緩存中(內存和硬盤),以及瀏覽器緩存中,而大型站點的另一種常用做法是將緩存部署在反向代理服務器上,這類緩存我們通常稱之為反向代理緩存,比如Squid和Varnish。這兩款軟件通常都部署在非WINDOWS平臺上,對于Windows平臺上的Asp.net來說,其實一樣能使用,我們完全可以把反向代理軟件部署在LINUX上,然后代理會路由到后臺的WINDOWS WEB(IIS)服務器。總之,非WINDOWS的世界很精彩。

  當然,無論是squid還是varnish都有Windows的擴展版本。本文為了簡便起見,基于varnish的Windows版本來描述的。

  varnish的官方站點:https://www.varnish-cache.org/,

  varnish的Windows版本:http://www.cygwin.com/,如果要編譯過的直接可用的版本,在這里:http://www.software112.com/products/cygwin-varnish-cache.html。

  1:將varnish配置為IIS的代理

  首先需要為varnish準備配置文件,比如,可以為default.vcl,內容如下:

  1.   backend default  
  2.   {  
  3.   .host = "192.168.0.77";  
  4.   .port = "80";  
  5.   }  
  6.   sub vcl_fetch  
  7.   {  
  8.   remove beresp.http.Set-Cookie;  
  9.   }  
  10.   sub vcl_recv  
  11.   {  
  12.   remove req.http.Cookie;  
  13.   } 

  在我們要示范的這個實例中,這3個配置都不能少,如下,

  backend default:指定我們的IIS站點的地址和端口;

  sub vcl_fetch:這是一個varnish函數,它varnish從后端服務器,也就是IIS中獲得數據后被調用;

  sub vcl_recv:varnish函數,表示客戶端請求杠杠到達反向代理服務器時被調用;

  由于varnish默認在碰到http頭中含有Cookie相關標識時直接忽略緩存,所以我們需要上面的兩個函數針對Cookie做特殊處理。當然,目前這兩個函數只是簡單而野蠻的刪除標識,實際的應用中我們可能需要根據實際情況為它們加上一些判斷條件。

  2:啟動varnish

  下面的命令為我啟動varnish:

  C:varnishin>varnishd -a :8011 -T :8088 -f c:/varnish/etc/default.vcl -s file,c:/varnish/var/cache,100M

  -a:8011表示,讓varnish監聽在8011端口。由于我測試環境下varnish和iis是在同一臺機器上,所以IIS已經占用了80,我這里只有使用其它端口。

  -T是為varnish指定一個管理端口;

  -f指定所要使用的配置文件;

  后面的參數只是讓varnish使用文件緩存,大小為100M,當然,應該根據實際情況指定大小;

  啟動varnish后,如果我們請求http://地址:端口/,就可以等到200OK狀態碼,那表示varnish已經在正確滴接受請求。

  3:一個實例

  創建asp.net頁面,內容如下:

  1.   protected void Page_Load(object sender, EventArgs e)  
  2.   {  
  3.   this.Response.AddHeader("Cache-Control""max-age=60");  
  4.   this.Response.AddHeader("Last-Modified", DateTime.Now.ToString("U", DateTimeFormatInfo.InvariantInfo));  
  5.   DateTime IfModifiedSince;  
  6.   if (DateTime.TryParse(this.Request.Headers.Get("If-Modified-Since"), out IfModifiedSince))  
  7.   {  
  8.   if ((DateTime.Now - IfModifiedSince.AddHours(8)).Seconds <60)  
  9.   {  
  10.   Response.Status = "304 Not Modified";  
  11.   Response.StatusCode = 304;  
  12.   return;  
  13.   }  
  14.   }  
  15.   string conn = "Data Source=192.168.0.77;Initial Catalog=luminjidb;User Id=sa;Password=sa;";  
  16.   using (DataSet ds = Common.SqlHelper.ExecuteDataset(conn, CommandType.Text, "select top 1* from NameTb a, DepTb b where a.DepID = b.ID ORDER BY NEWID()"))  
  17.   {  
  18.   var result = ds.Tables[0].Rows[0]["name"].ToString();  
  19.   Response.Write(result);  
  20.   }  
  21.   } 

  對該頁面進行壓力測試,100個用戶,1000個請求,得到的結果如下:

  如果沒有緩存,則結果如下:

  可以看到吞吐率有非常大的提升。

  4:監控varnish

  可以使用varnishstat命令,對varnish進行監控,在上面的壓力測試中,如果我們使用監控,得到的結果如下:

  在本例中,我們可以看到共請求了1000次,其中999次命中緩存,那是因為***次顯然肯定是要從IIS中拿輸出滴。

  5:管理varnish

  可以通過多種途徑來進行varnish的管理,包括更改配置、停止服務、啟動服務、清理緩存等。可以通過varnishadm命令進行管理,如果你是在遠程的話,可以使用telnet來進行管理:

  telnet 192.168.0.77 8088

  其中8088就是我們剛在啟動varnish的時候指定的管理端口。連接上之后,stop停止服務、start啟動服務,可以敲入help查看所有命令。下面的命令,清除所有緩存:

  purge.url *$

  6:謹慎引入varnish后帶來的緩存變化

  引入varnish后,可以發現使用強制刷新(ctrl+R5)后,動態行為發生了改變,即客戶端瀏覽器會去VARNISH上請求數據,但是此時的緩存中已經存在靜態的緩存內容,varnish會首先根據請求的HTTP頭去和這個緩存內容判斷得出需要是否更新,即由于緩存內容的存在,請求不會去IIS上進行緩存協商。這個時候,緩存中的靜態內容會直接返回給客戶端瀏覽器,這樣一來的話,我們在Page_Load中的代碼就根本不會執行,因為它是在IIS中的。

  要避免這種情況的發生,我們必須更改VARNISH配置文件,讓VARNISH碰到強制更新的時候,忽略緩存,直接去IIS上請求,為配置文件增加如下函數:

  1.   sub vcl_hit {  
  2.   if(req.http.Cache-Control~"no-cache"||req.http.Cache-Control~"max-age=0"||req.http.Pragma~"no-cache"){  
  3.   set obj.ttl=0s;  
  4.   return (restart);  
  5.   }  
  6.   return (deliver);  
  7.   } 

  經過上面的修改后,再次使用強制更新varnish將會忽略緩存,到IIS上去拿正文。

原文:http://www.cnblogs.com/luminji/archive/2011/10/17/2178759.html

【編輯推薦】

  1. ASP.NET MVC會成為ASP.NET未來主流的UI平臺?
  2. ASP.NET性能優化之構建自定義文件緩存
  3. 想愛容易相處難:當ASP.NET MVC愛上IoC
  4. 導致ASP.NET站點重啟的十大原因
  5. 淺談ASP.NET核心對象
責任編輯:彭凡 來源: 博客園
相關推薦

2011-10-19 09:41:15

ASP.NET性能優化

2009-08-13 15:49:18

ASP.NET性能優化

2009-08-13 16:22:18

ASP.NET性能優化

2012-05-16 10:24:26

ASP.NET性能優化

2011-09-08 13:56:41

ASP.NET性能

2024-06-11 09:00:00

異步編程代碼

2009-08-03 18:47:12

ASP.NET數據緩存

2011-02-22 09:16:24

高性能ASP.NET

2009-07-29 15:38:01

2011-02-13 09:37:55

ASP.NET

2009-02-23 15:55:29

ASP.NET.NET性能提升

2009-07-31 10:23:44

緩存頁面ASP.NET緩存

2009-07-28 17:17:19

ASP.NET概述

2011-02-17 09:13:57

ASP.NET

2011-06-28 15:14:10

ASP.NET性能優化

2018-02-23 13:55:16

ASP.NET性能優化技巧

2024-12-05 08:14:41

2011-07-06 08:46:30

2021-05-19 08:04:11

ASP.Net服務性原則

2009-07-29 10:35:51

ASP.NET緩存
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲高清视频一区二区 | 午夜久久av | 一区二区三区久久 | 久久久久久九九九九九九 | 日韩中文字幕 | 欧美成人综合 | 亚洲九九精品 | 激情五月婷婷丁香 | 日本成人三级电影 | 日韩免费av网站 | 欧美国产视频 | 人人操日日干 | 国产精品一区三区 | 日本精品一区二区三区在线观看视频 | 久久久久一区二区 | 国产做a爱免费视频 | 国产在线精品区 | 美女张开腿露出尿口 | 手机日韩| 仙人掌旅馆在线观看 | 国产精品18hdxxxⅹ在线 | 亚洲人成一区二区三区性色 | 中文av网站| 二区三区在线观看 | 91丨九色丨国产在线 | 美女爽到呻吟久久久久 | 天天摸天天干 | 中文字幕国 | 中文字幕 国产 | 日韩成人精品 | 日韩精品一区二区三区视频播放 | 免费1区2区3区 | 欧美久久久久久久久 | 偷拍第一页 | 一级毛片黄片 | 亚洲一区在线观看视频 | 欧美亚洲国产精品 | 久久久久久久av | 麻豆国产一区二区三区四区 | 久久久久久久久久久久久9999 | 99综合在线|