ASP.NET性能优化之负载均衡

开发 后端
今天谈到的ASP.NET性能优化主要涉及到负载均衡方面,希望对大家有所帮助。

1:HTTP重定向

所谓HTTP重定向,就是通过修改HTTP响应头中的Location标识为新的URL,然后返回给客户端,让客户端重新根据这个Location标识的URL去做新的请求。

这是一种最简单、也是最轻量级的负载均衡实现方案,使用asp.net,我们可以这样来实现,比如在主站www.yourdomain.com中,我们在默认主页如下编码:

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]);  
}  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

在上面的代码中,Response.Redirect实际为http头返回状态码302,这是为了告诉浏览器,请到Location中去拿URL,并且去到这个新的URL去做请求。当然,我们也可以采用最原始的方法来代替Redirect方法:

Response.Status = "302 Found";  
Response.StatusCode = 302;  
Response.AddHeader("Location", servers[DateTime.Now.Millisecond % 2]);  
  • 1.
  • 2.
  • 3.

使用HttpWatch监视,我们对www.yourdomain.com请求,得到:

image

可以清晰的看到第一次请求返回的302,然后转发到新的地址,得到状态码200。

以上方法是在客户端的重定向,即浏览器请求了两次,一次是到主服务器,第二次是到Location中指定的服务器上去请求。

HTTP重定向的方式非常依赖于主站的处理能力,它的性能瓶颈也是来自于IIS对于接受请求->asp.net处理首页动态程序->返回带有特定头请求,是的,它不能突破自身的性能瓶颈,比如,在我的破测试机上,我得到的吞吐率为:

image

好在IIS自身已经支持重定向(查阅http://technet.microsoft.com/zh-cn/library/cc732969(WS.10).aspx),这更进一步省略了我们自己写代码实现重定向,省略运行ASP.NET代码带来的性能损耗。

2:varnish实现的反向代理负载均衡

另外一种思路是使用反向代理服务器的负载均衡功能,上篇当中介绍的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);  
}  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.

在该配置文件中,我们部署了两台WEB服务器,当然,为了简单期间,我这里是使用了同一台服务器的两个端口。在vcl_recv函数中,varnish定义了负载均衡。

运行varnish之,我们会发现请求被转发到后台服务器了。

3:其它方案

1:DNS负载均衡,通过增加域名A记录来让DNS服务器实现负载均衡。好处是几乎不会碰到性能问题。缺点:要求每个WEB服务器必须有外网地址。一旦某台服务器崩溃,不能及时让DNS修改生效。不能定义自己的转发策略;

2:IP负载均衡,有LVS-NAT,采用iptables,对LINUX内核操作,性能相对于反向代理服务器并没有质的飞跃;IP负载均衡仍旧需要转发请求给实际服务器,同时需要转发实际服务器的响应给用户,所以,它的性能瓶颈来自于NAT服务器的性能及网络带宽;

3:直接路由,有LVS-DR,工作在数据链路层(第二层),要求所有WEB服务器接入外网;负载均衡器负责转发请求给实际服务器,但是它通过修改数据包中的MAC地址,能够做到让实际服务器的响应直接返回给用户,而不用通过负载均衡器,这当然进一步提升了负载均衡的效率;

4:IP隧道,有LVS-TUN,用于不同机房(即不同WAN网段)的负载均衡,原理同LVS-DR;

原文地址:http://www.cnblogs.com/luminji/archive/2012/05/16/2184280.html

【编辑推荐】

 

责任编辑:彭凡 来源: 博客园
相关推荐

2010-05-06 13:41:42

ASP.NET负载均衡

2009-08-13 15:49:18

ASP.NET性能优化

2011-10-19 09:41:15

ASP.NET性能优化

2009-08-13 16:22:18

ASP.NET性能优化

2011-10-17 09:54:18

ASP.NET性能

2010-05-06 13:33:47

Asp.Net负载均衡

2024-06-11 09:00:00

异步编程代码

2011-02-22 09:16:24

高性能ASP.NET

2011-02-13 09:37:55

ASP.NET

2009-02-23 15:55:29

ASP.NET.NET性能提升

2009-07-28 17:17:19

ASP.NET概述

2011-02-17 09:13:57

ASP.NET

2011-09-08 13:56:41

ASP.NET性能

2011-06-28 15:14:10

ASP.NET性能优化

2018-02-23 13:55:16

ASP.NET性能优化技巧

2024-12-05 08:14:41

2021-05-19 08:04:11

ASP.Net服务性原则

2011-07-06 08:46:30

2011-02-13 09:17:02

ASP.NET

2009-08-10 13:32:15

ASP.NET TimASP.NET组件设计
点赞
收藏

51CTO技术栈公众号