ASP.NET性能優(yōu)化之負(fù)載均衡
1:HTTP重定向
所謂HTTP重定向,就是通過修改HTTP響應(yīng)頭中的Location標(biāo)識為新的URL,然后返回給客戶端,讓客戶端重新根據(jù)這個Location標(biāo)識的URL去做新的請求。
這是一種最簡單、也是最輕量級的負(fù)載均衡實現(xiàn)方案,使用asp.net,我們可以這樣來實現(xiàn),比如在主站www.yourdomain.com中,我們在默認(rèn)主頁如下編碼:
- static string[] servers =
- {
- "http://192.168.0.77/luminji2/aspx/test3.aspx",
- "http://192.168.0.77/luminji2/aspx/test4.aspx"
- };
- protected void Page_Load(object sender, EventArgs e)
- {
- Response.Redirect(servers[DateTime.Now.Millisecond % 2]);
- }
在上面的代碼中,Response.Redirect實際為http頭返回狀態(tài)碼302,這是為了告訴瀏覽器,請到Location中去拿URL,并且去到這個新的URL去做請求。當(dāng)然,我們也可以采用最原始的方法來代替Redirect方法:
- Response.Status = "302 Found";
- Response.StatusCode = 302;
- Response.AddHeader("Location", servers[DateTime.Now.Millisecond % 2]);
使用HttpWatch監(jiān)視,我們對www.yourdomain.com請求,得到:
可以清晰的看到第一次請求返回的302,然后轉(zhuǎn)發(fā)到新的地址,得到狀態(tài)碼200。
以上方法是在客戶端的重定向,即瀏覽器請求了兩次,一次是到主服務(wù)器,第二次是到Location中指定的服務(wù)器上去請求。
HTTP重定向的方式非常依賴于主站的處理能力,它的性能瓶頸也是來自于IIS對于接受請求->asp.net處理首頁動態(tài)程序->返回帶有特定頭請求,是的,它不能突破自身的性能瓶頸,比如,在我的破測試機上,我得到的吞吐率為:
好在IIS自身已經(jīng)支持重定向(查閱http://technet.microsoft.com/zh-cn/library/cc732969(WS.10).aspx),這更進一步省略了我們自己寫代碼實現(xiàn)重定向,省略運行ASP.NET代碼帶來的性能損耗。
2:varnish實現(xiàn)的反向代理負(fù)載均衡
另外一種思路是使用反向代理服務(wù)器的負(fù)載均衡功能,上篇當(dāng)中介紹的varnish就支持這樣的功能,查看配置文件:
- backend web1 {
- .host = "192.168.0.77";
- .port = "8081";
- }
- backend web2 {
- .host = "192.168.0.77";
- .port = "8082";
- }
- director lb round-robin {
- {
- .backend = web1;
- }
- {
- .backend = web2;
- }
- }
- sub vcl_recv {
- set req.backend = lb;
- return (pass);
- }
在該配置文件中,我們部署了兩臺WEB服務(wù)器,當(dāng)然,為了簡單期間,我這里是使用了同一臺服務(wù)器的兩個端口。在vcl_recv函數(shù)中,varnish定義了負(fù)載均衡。
運行varnish之,我們會發(fā)現(xiàn)請求被轉(zhuǎn)發(fā)到后臺服務(wù)器了。
3:其它方案
1:DNS負(fù)載均衡,通過增加域名A記錄來讓DNS服務(wù)器實現(xiàn)負(fù)載均衡。好處是幾乎不會碰到性能問題。缺點:要求每個WEB服務(wù)器必須有外網(wǎng)地址。一旦某臺服務(wù)器崩潰,不能及時讓DNS修改生效。不能定義自己的轉(zhuǎn)發(fā)策略;
2:IP負(fù)載均衡,有LVS-NAT,采用iptables,對LINUX內(nèi)核操作,性能相對于反向代理服務(wù)器并沒有質(zhì)的飛躍;IP負(fù)載均衡仍舊需要轉(zhuǎn)發(fā)請求給實際服務(wù)器,同時需要轉(zhuǎn)發(fā)實際服務(wù)器的響應(yīng)給用戶,所以,它的性能瓶頸來自于NAT服務(wù)器的性能及網(wǎng)絡(luò)帶寬;
3:直接路由,有LVS-DR,工作在數(shù)據(jù)鏈路層(第二層),要求所有WEB服務(wù)器接入外網(wǎng);負(fù)載均衡器負(fù)責(zé)轉(zhuǎn)發(fā)請求給實際服務(wù)器,但是它通過修改數(shù)據(jù)包中的MAC地址,能夠做到讓實際服務(wù)器的響應(yīng)直接返回給用戶,而不用通過負(fù)載均衡器,這當(dāng)然進一步提升了負(fù)載均衡的效率;
4:IP隧道,有LVS-TUN,用于不同機房(即不同WAN網(wǎng)段)的負(fù)載均衡,原理同LVS-DR;
原文地址:http://www.cnblogs.com/luminji/archive/2012/05/16/2184280.html
【編輯推薦】























